diff --git a/lib/guard.rb b/lib/guard.rb index 5d7fe9a..592f506 100644 --- a/lib/guard.rb +++ b/lib/guard.rb @@ -86,13 +86,13 @@ module Guard listener.start end - def add_guard(name, watchers = [], callbacks = [], options = {}, group = nil) + def add_guard(name, watchers = [], callbacks = [], options = {}) if name.to_sym == :ego UI.deprecation("Guard::Ego is now part of Guard. You can remove it from your Guardfile.") else guard_class = get_guard_class(name) callbacks.each { |callback| ::Guard::Hook.add_callback(callback[:listener], guard_class, callback[:events]) } - @guards << guard_class.new(watchers, options, group) + @guards << guard_class.new(watchers, options) end end diff --git a/lib/guard/dsl.rb b/lib/guard/dsl.rb index 1211917..8e2abdd 100644 --- a/lib/guard/dsl.rb +++ b/lib/guard/dsl.rb @@ -119,11 +119,12 @@ module Guard @watchers = [] @callbacks = [] watch_and_callback_definition.call if watch_and_callback_definition - ::Guard.add_guard(name.to_s.downcase.to_sym, @watchers, @callbacks, options, @current_group || :default) + options.update(:group => (@current_group || :default)) + ::Guard.add_guard(name.to_s.downcase.to_sym, @watchers, @callbacks, options) end def watch(pattern, &action) - @watchers << { :pattern => pattern, :action => action } + @watchers << ::Guard::Watcher.new(pattern, action) end def callback(*args, &listener) diff --git a/lib/guard/guard.rb b/lib/guard/guard.rb index 4c17bb4..acd4ddd 100644 --- a/lib/guard/guard.rb +++ b/lib/guard/guard.rb @@ -4,9 +4,9 @@ module Guard attr_accessor :watchers, :options, :group - def initialize(watchers = [], options = {}, group = nil) + def initialize(watchers = [], options = {}) + @group = options.delete(:group) || :default @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 09ed540..3af3d69 100644 --- a/spec/guard/dsl_spec.rb +++ b/spec/guard/dsl_spec.rb @@ -204,41 +204,41 @@ describe Guard::Dsl do describe "#group" do it "evaluates only the specified string group" do - ::Guard.should_receive(:add_guard).with(:pow, [], [], {}, :default) - ::Guard.should_receive(:add_guard).with(:test, [], [], {}, :w) + ::Guard.should_receive(:add_guard).with(:pow, [], [], { :group => :default }) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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, [], [], {}, :default) - ::Guard.should_receive(:add_guard).with(:test, [], [], {}, :w) + ::Guard.should_receive(:add_guard).with(:pow, [], [], { :group => :default }) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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, [], [], {}, :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) + ::Guard.should_receive(:add_guard).with(:pow, [], [], { :group => :default }) + ::Guard.should_receive(:add_guard).with(:rspec, [], [], { :group => :x }) + ::Guard.should_receive(:add_guard).with(:ronn, [], [], { :group => :x }) + ::Guard.should_receive(:add_guard).with(:less, [], [], { :group => :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, [], [], {}, :default) - ::Guard.should_receive(:add_guard).with(:test, [], [], {}, :w) + ::Guard.should_receive(:add_guard).with(:pow, [], [], { :group => :default }) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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, [], [], {}, :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) + ::Guard.should_receive(:add_guard).with(:pow, [], [], { :group => :default }) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :w }) + ::Guard.should_receive(:add_guard).with(:rspec, [], [], { :group => :x }) + ::Guard.should_receive(:add_guard).with(:ronn, [], [], { :group => :x }) + ::Guard.should_receive(:add_guard).with(:less, [], [], { :group => :y }) subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string) end @@ -246,31 +246,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, [], [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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, [], [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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, [], [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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, [], [], {}, :default) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :group => :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' }, :default) + ::Guard.should_receive(:add_guard).with(:test, [], [], { :opt_a => 1, :opt_b => 'fancy', :group => :default }) subject.evaluate_guardfile(:guardfile_contents => "guard 'test', :opt_a => 1, :opt_b => 'fancy'") end @@ -278,12 +278,12 @@ describe Guard::Dsl do describe "#watch" do it "should receive watchers when specified" do - ::Guard.should_receive(:add_guard).with(:dummy, anything, anything, {}, :default) do |name, watchers, callbacks, options, group| + ::Guard.should_receive(:add_guard).with(:dummy, anything, anything, { :group => :default }) do |name, watchers, callbacks, options| watchers.size.should == 2 - watchers[0][:pattern].should == 'a' - watchers[0][:action].call.should == proc { 'b' }.call - watchers[1][:pattern].should == 'c' - watchers[1][:action].should == nil + watchers[0].pattern.should == 'a' + watchers[0].action.call.should == proc { 'b' }.call + watchers[1].pattern.should == 'c' + watchers[1].action.should == nil end subject.evaluate_guardfile(:guardfile_contents => " guard :dummy do @@ -301,7 +301,7 @@ describe Guard::Dsl do end end - ::Guard.should_receive(:add_guard).with(:dummy, anything, anything, {}, :default) do |name, watchers, callbacks, options, group| + ::Guard.should_receive(:add_guard).with(:dummy, anything, anything, { :group => :default }) do |name, watchers, callbacks, options| callbacks.should have(2).items callbacks[0][:events].should == :start_end callbacks[0][:listener].call(Guard::Dummy, :start_end, 'foo').should == "Guard::Dummy executed 'start_end' hook with foo!" diff --git a/spec/guard_spec.rb b/spec/guard_spec.rb index 4f3579e..1a556b4 100644 --- a/spec/guard_spec.rb +++ b/spec/guard_spec.rb @@ -98,7 +98,7 @@ describe Guard do context "with no watchers given" do it "gives an empty array of watchers" do - @guard_rspec_class.should_receive(:new).with([], {}, nil).and_return(@guard_rspec) + @guard_rspec_class.should_receive(:new).with([], {}).and_return(@guard_rspec) Guard.add_guard(:rspec, []) end @@ -106,7 +106,7 @@ describe Guard do context "with watchers given" do it "give the watchers array" do - @guard_rspec_class.should_receive(:new).with([:foo], {}, nil).and_return(@guard_rspec) + @guard_rspec_class.should_receive(:new).with([:foo], {}).and_return(@guard_rspec) Guard.add_guard(:rspec, [:foo]) end @@ -114,7 +114,7 @@ describe Guard do context "with no options given" do it "gives an empty hash of options" do - @guard_rspec_class.should_receive(:new).with([], {}, nil).and_return(@guard_rspec) + @guard_rspec_class.should_receive(:new).with([], {}).and_return(@guard_rspec) Guard.add_guard(:rspec, [], [], {}) end @@ -122,17 +122,9 @@ describe Guard do context "with options given" do it "give the options hash" do - @guard_rspec_class.should_receive(:new).with([], { :foo => true }, nil).and_return(@guard_rspec) + @guard_rspec_class.should_receive(:new).with([], { :foo => true, :group => :backend }).and_return(@guard_rspec) - Guard.add_guard(:rspec, [], [], { :foo => true }) - end - end - - context "with the group :backend given" do - it "initialize the guard and pass it its group" do - @guard_rspec_class.should_receive(:new).with([], {}, :backend).and_return(@guard_rspec) - - Guard.add_guard(:rspec, [], [], {}, :backend) + Guard.add_guard(:rspec, [], [], { :foo => true, :group => :backend }) end end end