From 6f7ce6feb78b535a3d87c84fcd2b5e0415367878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Re=CC=81my=20Coutable?= Date: Wed, 17 Aug 2011 00:36:02 +0200 Subject: [PATCH] On a guard's initialization, pass the group in which it's been declared in the Guardfile, pass group's name on Guard.add_guard and thus in the Dsl --- lib/guard/dsl.rb | 10 ++++++++-- lib/guard/guard.rb | 5 +++-- spec/guard/dsl_spec.rb | 42 +++++++++++++++++++++--------------------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/lib/guard/dsl.rb b/lib/guard/dsl.rb index 45e51b2..57faefe 100644 --- a/lib/guard/dsl.rb +++ b/lib/guard/dsl.rb @@ -106,13 +106,19 @@ module Guard def group(name, &guard_definition) @groups = @@options[:group] || [] - guard_definition.call if guard_definition && (@groups.empty? || @groups.map(&:to_sym).include?(name.to_sym)) + name = name.to_sym + + if guard_definition && (@groups.empty? || @groups.map(&:to_sym).include?(name)) + @current_group = name + guard_definition.call + @current_group = nil + end end def guard(name, options = {}, &watch_definition) @watchers = [] watch_definition.call if watch_definition - ::Guard.add_guard(name.to_sym, @watchers, @guard_options) + ::Guard.add_guard(name.to_s.downcase.to_sym, @watchers, options, @current_group || :default) end def watch(pattern, &action) diff --git a/lib/guard/guard.rb b/lib/guard/guard.rb index a4d1488..b6b081a 100644 --- a/lib/guard/guard.rb +++ b/lib/guard/guard.rb @@ -1,10 +1,11 @@ module Guard class Guard - attr_accessor :watchers, :options + attr_accessor :watchers, :options, :group - def initialize(watchers = [], options = {}) + def initialize(watchers = [], options = {}, group = nil) @watchers, @options = watchers, options + @group ||= :default end # Guardfile template needed inside guard gem diff --git a/spec/guard/dsl_spec.rb b/spec/guard/dsl_spec.rb index 86afac9..6bbb166 100644 --- a/spec/guard/dsl_spec.rb +++ b/spec/guard/dsl_spec.rb @@ -201,41 +201,41 @@ describe Guard::Dsl do describe "#group" do it "evaluates only the specified string group" do - ::Guard.should_receive(:add_guard).with(:pow, [], {}) - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:pow, [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :w) subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string, :group => ['w']) end it "evaluates only the specified symbol group" do - ::Guard.should_receive(:add_guard).with(:pow, [], {}) - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:pow, [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :w) subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string, :group => [:w]) end it "evaluates only the specified groups" do - ::Guard.should_receive(:add_guard).with(:pow, [], {}) - ::Guard.should_receive(:add_guard).with(:rspec, [], {}) - ::Guard.should_receive(:add_guard).with(:ronn, [], {}) - ::Guard.should_receive(:add_guard).with(:less, [], {}) + ::Guard.should_receive(:add_guard).with(:pow, [], {}, :default) + ::Guard.should_receive(:add_guard).with(:rspec, [], {}, :x) + ::Guard.should_receive(:add_guard).with(:ronn, [], {}, :x) + ::Guard.should_receive(:add_guard).with(:less, [], {}, :y) subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string, :group => [:x, :y]) end it "evaluates always guard outside any group (even when a group is given)" do - ::Guard.should_receive(:add_guard).with(:pow, [], {}) - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:pow, [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :w) subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string, :group => [:w]) end it "evaluates all groups when no group option is specified" do - ::Guard.should_receive(:add_guard).with(:pow, [], {}) - ::Guard.should_receive(:add_guard).with(:test, [], {}) - ::Guard.should_receive(:add_guard).with(:rspec, [], {}) - ::Guard.should_receive(:add_guard).with(:ronn, [], {}) - ::Guard.should_receive(:add_guard).with(:less, [], {}) + ::Guard.should_receive(:add_guard).with(:pow, [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :w) + ::Guard.should_receive(:add_guard).with(:rspec, [], {}, :x) + ::Guard.should_receive(:add_guard).with(:ronn, [], {}, :x) + ::Guard.should_receive(:add_guard).with(:less, [], {}, :y) subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string) end @@ -243,31 +243,31 @@ describe Guard::Dsl do describe "#guard" do it "loads a guard specified as a quoted string from the DSL" do - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :default) subject.evaluate_guardfile(:guardfile_contents => "guard 'test'") end it "loads a guard specified as a double quoted string from the DSL" do - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :default) subject.evaluate_guardfile(:guardfile_contents => 'guard "test"') end it "loads a guard specified as a symbol from the DSL" do - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :default) subject.evaluate_guardfile(:guardfile_contents => "guard :test") end it "loads a guard specified as a symbol and called with parens from the DSL" do - ::Guard.should_receive(:add_guard).with(:test, [], {}) + ::Guard.should_receive(:add_guard).with(:test, [], {}, :default) subject.evaluate_guardfile(:guardfile_contents => "guard(:test)") end it "receives options when specified, from normal arg" do - ::Guard.should_receive(:add_guard).with(:test, [], { :opt_a => 1, :opt_b => 'fancy' }) + ::Guard.should_receive(:add_guard).with(:test, [], { :opt_a => 1, :opt_b => 'fancy' }, :default) subject.evaluate_guardfile(:guardfile_contents => "guard 'test', :opt_a => 1, :opt_b => 'fancy'") end @@ -280,7 +280,7 @@ describe Guard::Dsl do watch('c') end" - ::Guard.should_receive(:add_guard).with(:test, anything, {}) do |name, watchers, options| + ::Guard.should_receive(:add_guard).with(:test, anything, {}, :default) do |name, watchers, options| watchers.size.should == 2 watchers[0].pattern.should == 'a' watchers[0].action.call.should == proc { 'b' }.call