Add a user guard config
Users can add additional settings to ~/.guard.rb that augment the existing Guardfile.
This commit is contained in:
parent
b144514b06
commit
b59d6ac07b
15
README.md
15
README.md
@ -331,6 +331,21 @@ Group frontend:
|
|||||||
livereload
|
livereload
|
||||||
```
|
```
|
||||||
|
|
||||||
|
User config file
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If a .guard.rb is found in your home directory, it will be appended to
|
||||||
|
the Guardfile. This can be used for tasks you want guard to handle but
|
||||||
|
other users probably don't. For example, indexing your source tree with
|
||||||
|
[Ctags](http://ctags.sourceforge.net):
|
||||||
|
|
||||||
|
``` ruby
|
||||||
|
guard 'shell' do
|
||||||
|
watch(%r{^(?:app|lib)/.+\.rb$}) { `ctags -R` }
|
||||||
|
end
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
Create a new guard
|
Create a new guard
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ module Guard
|
|||||||
options.is_a?(Hash) or raise ArgumentError.new("evaluate_guardfile not passed a Hash!")
|
options.is_a?(Hash) or raise ArgumentError.new("evaluate_guardfile not passed a Hash!")
|
||||||
|
|
||||||
@@options = options.dup
|
@@options = options.dup
|
||||||
instance_eval_guardfile(fetch_guardfile_contents)
|
fetch_guardfile_contents
|
||||||
|
instance_eval_guardfile(guardfile_contents_with_user_config)
|
||||||
|
|
||||||
UI.error "No guards found in Guardfile, please add at least one." if !::Guard.guards.nil? && ::Guard.guards.empty?
|
UI.error "No guards found in Guardfile, please add at least one." if !::Guard.guards.nil? && ::Guard.guards.empty?
|
||||||
end
|
end
|
||||||
@ -72,14 +73,17 @@ 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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def guardfile_contents
|
def guardfile_contents
|
||||||
@@options ? @@options[:guardfile_contents] : ""
|
@@options ? @@options[:guardfile_contents] : ""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def guardfile_contents_with_user_config
|
||||||
|
config = File.read(user_config_path) if File.exist?(user_config_path)
|
||||||
|
[guardfile_contents, config].join("\n")
|
||||||
|
end
|
||||||
|
|
||||||
def guardfile_path
|
def guardfile_path
|
||||||
@@options ? @@options[:guardfile_path] : ""
|
@@options ? @@options[:guardfile_path] : ""
|
||||||
end
|
end
|
||||||
@ -102,6 +106,10 @@ module Guard
|
|||||||
File.expand_path(File.join("~", ".Guardfile"))
|
File.expand_path(File.join("~", ".Guardfile"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def user_config_path
|
||||||
|
File.expand_path(File.join("~", ".guard.rb"))
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def group(name, &guard_definition)
|
def group(name, &guard_definition)
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Guard::DslDescriber do
|
describe Guard::DslDescriber do
|
||||||
before(:each) { ::Guard.stub!(:guards).and_return([mock('Guard')]) }
|
before(:each) do
|
||||||
|
::Guard.stub!(:guards).and_return([mock('Guard')])
|
||||||
|
user_config_path = File.expand_path(File.join('~', '.guard.rb'))
|
||||||
|
File.stub(:exist?).with(user_config_path) { false }
|
||||||
|
end
|
||||||
subject { described_class }
|
subject { described_class }
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,12 +5,18 @@ describe Guard::Dsl do
|
|||||||
before(:each) do
|
before(:each) do
|
||||||
@local_guardfile_path = File.join(Dir.pwd, 'Guardfile')
|
@local_guardfile_path = File.join(Dir.pwd, 'Guardfile')
|
||||||
@home_guardfile_path = File.expand_path(File.join("~", ".Guardfile"))
|
@home_guardfile_path = File.expand_path(File.join("~", ".Guardfile"))
|
||||||
|
@user_config_path = File.expand_path(File.join("~", ".guard.rb"))
|
||||||
::Guard.stub!(:options).and_return(:debug => true)
|
::Guard.stub!(:options).and_return(:debug => true)
|
||||||
::Guard.stub!(:guards).and_return([mock('Guard')])
|
::Guard.stub!(:guards).and_return([mock('Guard')])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.disable_user_config
|
||||||
|
before(:each) { File.stub(:exist?).with(@user_config_path) { false } }
|
||||||
|
end
|
||||||
|
|
||||||
describe "it should select the correct data source for Guardfile" do
|
describe "it should select the correct data source for Guardfile" do
|
||||||
before(:each) { ::Guard::Dsl.stub!(:instance_eval_guardfile) }
|
before(:each) { ::Guard::Dsl.stub!(:instance_eval_guardfile) }
|
||||||
|
disable_user_config
|
||||||
|
|
||||||
it "should use a string for initializing" do
|
it "should use a string for initializing" do
|
||||||
Guard::UI.should_not_receive(:error)
|
Guard::UI.should_not_receive(:error)
|
||||||
@ -51,6 +57,15 @@ describe Guard::Dsl do
|
|||||||
lambda { subject.evaluate_guardfile(:guardfile => '/abc/Guardfile') }.should_not raise_error
|
lambda { subject.evaluate_guardfile(:guardfile => '/abc/Guardfile') }.should_not raise_error
|
||||||
subject.guardfile_contents.should == "guard :foo"
|
subject.guardfile_contents.should == "guard :foo"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should append the user config file if present' do
|
||||||
|
fake_guardfile('/abc/Guardfile', "guard :foo")
|
||||||
|
fake_guardfile(@user_config_path, "guard :bar")
|
||||||
|
Guard::UI.should_not_receive(:error)
|
||||||
|
lambda { subject.evaluate_guardfile(:guardfile => '/abc/Guardfile') }.should_not raise_error
|
||||||
|
subject.guardfile_contents_with_user_config.should == "guard :foo\nguard :bar"
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "displays an error message when no Guardfile is found" do
|
it "displays an error message when no Guardfile is found" do
|
||||||
@ -68,6 +83,7 @@ describe Guard::Dsl do
|
|||||||
|
|
||||||
describe "correctly reads data from its valid data source" do
|
describe "correctly reads data from its valid data source" do
|
||||||
before(:each) { ::Guard::Dsl.stub!(:instance_eval_guardfile) }
|
before(:each) { ::Guard::Dsl.stub!(:instance_eval_guardfile) }
|
||||||
|
disable_user_config
|
||||||
|
|
||||||
it "reads correctly from a string" do
|
it "reads correctly from a string" do
|
||||||
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
|
||||||
@ -200,6 +216,8 @@ describe Guard::Dsl do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "#group" do
|
describe "#group" do
|
||||||
|
disable_user_config
|
||||||
|
|
||||||
it "evaluates only the specified string group" do
|
it "evaluates only the specified string group" do
|
||||||
::Guard.should_receive(:add_guard).with(:pow, [], { :group => :default })
|
::Guard.should_receive(:add_guard).with(:pow, [], { :group => :default })
|
||||||
::Guard.should_receive(:add_guard).with(:test, [], { :group => :w })
|
::Guard.should_receive(:add_guard).with(:test, [], { :group => :w })
|
||||||
@ -242,6 +260,8 @@ describe Guard::Dsl do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "#guard" do
|
describe "#guard" do
|
||||||
|
disable_user_config
|
||||||
|
|
||||||
it "loads a guard specified as a quoted string from the DSL" do
|
it "loads a guard specified as a quoted string from the DSL" do
|
||||||
::Guard.should_receive(:add_guard).with(:test, [], { :group => :default })
|
::Guard.should_receive(:add_guard).with(:test, [], { :group => :default })
|
||||||
|
|
||||||
@ -274,6 +294,8 @@ describe Guard::Dsl do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "#watch" do
|
describe "#watch" do
|
||||||
|
disable_user_config
|
||||||
|
|
||||||
it "should receive watchers when specified" do
|
it "should receive watchers when specified" do
|
||||||
guardfile_with_watchers = "guard 'test' do
|
guardfile_with_watchers = "guard 'test' do
|
||||||
watch('a') { 'b' }
|
watch('a') { 'b' }
|
||||||
|
Loading…
Reference in New Issue
Block a user