Merge branch 'user_guardfile' of https://github.com/hashrocket/guard into hashrocket-user_guardfile

Conflicts:
	lib/guard/dsl.rb
	spec/guard/dsl_spec.rb
This commit is contained in:
Thibaud Guillaume-Gentil 2011-05-28 17:52:50 +02:00
commit 1747f66128
3 changed files with 68 additions and 10 deletions

View File

@ -36,6 +36,8 @@ Generate an empty Guardfile with:
$ guard init $ guard init
``` ```
You may optionally place this Guardfile in your home directory to use it across multiple projects.
Add the guards you need to your Guardfile (see the existing guards below). Add the guards you need to your Guardfile (see the existing guards below).
### On Mac OS X ### On Mac OS X
@ -101,6 +103,8 @@ or if you use Bundler, to run the Guard executable specific to your bundle:
$ bundle exec guard $ bundle exec guard
``` ```
Guard will look for a Guardfile in your current directory. If it does not find one, it will look in your home directory for one.
Command line options Command line options
-------------------- --------------------
@ -310,4 +314,4 @@ Author
Contributors Contributors
------ ------
https://github.com/guard/guard/contributors https://github.com/guard/guard/contributors

View File

@ -54,7 +54,7 @@ module Guard
if File.exist?(guardfile_default_path) if File.exist?(guardfile_default_path)
read_guardfile(guardfile_default_path) read_guardfile(guardfile_default_path)
else else
UI.error "No Guardfile in current folder, please create one with `guard init`." UI.error "No Guardfile found, please create one with `guard init`."
exit 1 exit 1
end end
end end
@ -63,7 +63,7 @@ module Guard
UI.error "The command file(#{@@options[:guardfile]}) seems to be empty." UI.error "The command file(#{@@options[:guardfile]}) seems to be empty."
exit 1 exit 1
end end
guardfile_contents guardfile_contents
end end
@ -76,7 +76,17 @@ module Guard
end end
def guardfile_default_path def guardfile_default_path
File.join(Dir.pwd, 'Guardfile') File.exist?(local_guardfile_path) ? local_guardfile_path : home_guardfile_path
end
private
def local_guardfile_path
File.join(Dir.pwd, "Guardfile")
end
def home_guardfile_path
File.expand_path(File.join("~", "Guardfile"))
end end
end end

View File

@ -3,7 +3,8 @@ require 'spec_helper'
describe Guard::Dsl do describe Guard::Dsl do
subject { described_class } subject { described_class }
before(:each) do before(:each) do
@default_guardfile = File.join(Dir.pwd, 'Guardfile') @local_guardfile_path = File.join(Dir.pwd, 'Guardfile')
@home_guardfile_path = File.expand_path(File.join("~", "Guardfile"))
::Guard.stub!(:options).and_return(:debug => true) ::Guard.stub!(:options).and_return(:debug => true)
end end
@ -27,7 +28,7 @@ describe Guard::Dsl do
end end
it "should use a default file if no other options are given" do it "should use a default file if no other options are given" do
fake_guardfile(@default_guardfile, "guard :bar") fake_guardfile(@local_guardfile_path, "guard :bar")
Guard::UI.should_not_receive(:error) Guard::UI.should_not_receive(:error)
lambda { subject.evaluate_guardfile }.should_not raise_error lambda { subject.evaluate_guardfile }.should_not raise_error
@ -36,7 +37,7 @@ describe Guard::Dsl do
it "should use a string over any other method" do it "should use a string over any other method" do
fake_guardfile('/abc/Guardfile', "guard :foo") fake_guardfile('/abc/Guardfile', "guard :foo")
fake_guardfile(@default_guardfile, "guard :bar") fake_guardfile(@local_guardfile_path, "guard :bar")
Guard::UI.should_not_receive(:error) Guard::UI.should_not_receive(:error)
lambda { subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string) }.should_not raise_error lambda { subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string) }.should_not raise_error
@ -45,7 +46,7 @@ describe Guard::Dsl do
it "should use the given Guardfile over default Guardfile" do it "should use the given Guardfile over default Guardfile" do
fake_guardfile('/abc/Guardfile', "guard :foo") fake_guardfile('/abc/Guardfile', "guard :foo")
fake_guardfile(@default_guardfile, "guard :bar") fake_guardfile(@local_guardfile_path, "guard :bar")
Guard::UI.should_not_receive(:error) Guard::UI.should_not_receive(:error)
lambda { subject.evaluate_guardfile(:guardfile => '/abc/Guardfile') }.should_not raise_error lambda { subject.evaluate_guardfile(:guardfile => '/abc/Guardfile') }.should_not raise_error
@ -53,6 +54,12 @@ describe Guard::Dsl do
end end
end end
it "displays an error message when no Guardfile is found" do
subject.stub(:guardfile_default_path).and_return("no_guardfile_here")
Guard::UI.should_receive(:error).with("No Guardfile found, please create one with `guard init`.")
lambda { subject.evaluate_guardfile }.should raise_error
end
describe "it should correctly read data from its valid data source" do describe "it should correctly read data from its valid data source" do
before(:each) do before(:each) do
::Guard::Dsl.stub!(:instance_eval_guardfile) ::Guard::Dsl.stub!(:instance_eval_guardfile)
@ -99,9 +106,10 @@ describe Guard::Dsl do
end end
it "should raise error when resorting to use default, finds no default" do it "should raise error when resorting to use default, finds no default" do
File.stub!(:exist?).with(@default_guardfile) { false } File.stub!(:exist?).with(@local_guardfile_path) { false }
File.stub!(:exist?).with(@home_guardfile_path) { false }
Guard::UI.should_receive(:error).with(/No Guardfile in current folder/) Guard::UI.should_receive(:error).with("No Guardfile found, please create one with `guard init`.")
lambda { subject.evaluate_guardfile }.should raise_error lambda { subject.evaluate_guardfile }.should raise_error
end end
@ -119,6 +127,38 @@ describe Guard::Dsl do
lambda { subject.evaluate_guardfile(:guardfile_contents => invalid_guardfile_string ) }.should raise_error lambda { subject.evaluate_guardfile(:guardfile_contents => invalid_guardfile_string ) }.should raise_error
end end
describe ".guardfile_default_path" do
let(:local_path) { File.join(Dir.pwd, 'Guardfile') }
let(:user_path) { File.expand_path(File.join("~", 'Guardfile')) }
before do
File.stub(:exist? => false)
end
context "when there is a local Guardfile" do
it "returns the path to the local Guardfile" do
File.stub(:exist?).with(local_path).and_return(true)
subject.guardfile_default_path.should == local_path
end
end
context "when there is a Guardfile in the user's home directory" do
it "returns the path to the user Guardfile" do
File.stub(:exist?).with(user_path).and_return(true)
subject.guardfile_default_path.should == user_path
end
end
context "when there's both a local and user Guardfile" do
it "returns the path to the local Guardfile" do
File.stub(:exist?).with(local_path).and_return(true)
File.stub(:exist?).with(user_path).and_return(true)
subject.guardfile_default_path.should == local_path
end
end
end
describe ".guardfile_include?" do describe ".guardfile_include?" do
it "detects a guard specified by a string with double quotes" do it "detects a guard specified by a string with double quotes" do
subject.stub(:guardfile_contents => 'guard "test" {watch("c")}') subject.stub(:guardfile_contents => 'guard "test" {watch("c")}')
@ -230,6 +270,10 @@ private
end" end"
end end
def mock_guardfile_content(content)
File.stub!(:read).with(subject.guardfile_default_path) { content }
end
def invalid_guardfile_string def invalid_guardfile_string
"Bad Guardfile" "Bad Guardfile"
end end