From e53036ad0542c2731be850d70454e4b2770e46f6 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 28 Jun 2011 16:15:14 -0400 Subject: [PATCH 01/13] add support for growl_notify --- lib/guard/notifier.rb | 25 ++++++- spec/guard/notifier_spec.rb | 139 +++++++++++++++++++++++++++--------- 2 files changed, 128 insertions(+), 36 deletions(-) diff --git a/lib/guard/notifier.rb b/lib/guard/notifier.rb index eb5bd86..36d9bc2 100644 --- a/lib/guard/notifier.rb +++ b/lib/guard/notifier.rb @@ -45,8 +45,18 @@ module Guard def self.notify_mac(title, message, image, options) require_growl # need for guard-rspec formatter that is called out of guard scope + default_options = { :title => title, :icon => image_path(image), :name => "Guard" } - Growl.notify message, default_options.merge(options) if enabled? + default_options.merge!(options) + + if defined?(GrowlNotify) + default_options[:description] = message + default_options[:application_name] = default_options.delete(:name) + + GrowlNotify.send_notification(default_options) if enabled? + else + Growl.notify message, default_options.merge(options) if enabled? + end end def self.notify_linux(title, message, image, options) @@ -90,10 +100,19 @@ module Guard end def self.require_growl - require 'growl' + begin + require 'growl_notify' + + GrowlNotify.config do |c| + c.notifications = c.default_notifications = [ "Guard" ] + c.application_name = c.notifications.first + end + rescue LoadError + require 'growl' + end rescue LoadError turn_off - UI.info "Please install growl gem for Mac OS X notification support and add it to your Gemfile" + UI.info "Please install growl or growl_notify gem for Mac OS X notification support and add it to your Gemfile" end def self.require_libnotify diff --git a/spec/guard/notifier_spec.rb b/spec/guard/notifier_spec.rb index c0b164e..2613d9a 100644 --- a/spec/guard/notifier_spec.rb +++ b/spec/guard/notifier_spec.rb @@ -20,8 +20,27 @@ describe Guard::Notifier do RbConfig::CONFIG.should_receive(:[]).with('target_os').and_return 'darwin' end + context "with the GrowlNotify library available" do + before do + module ::GrowlNotify + def self.config ; end + end + end + + it "loads the library and enables the notifications" do + subject.should_receive(:require).with('growl_notify').and_return true + subject.turn_on + subject.should be_enabled + end + + after do + Object.send(:remove_const, :GrowlNotify) + end + end + context "with the Growl library available" do it "loads the library and enables the notifications" do + subject.should_receive(:require).with('growl_notify').and_raise LoadError subject.should_receive(:require).with('growl').and_return true subject.turn_on subject.should be_enabled @@ -30,6 +49,7 @@ describe Guard::Notifier do context "without the Growl library available" do it "disables the notifications" do + subject.should_receive(:require).with('growl_notify').and_raise LoadError subject.should_receive(:require).with('growl').and_raise LoadError subject.turn_on subject.should_not be_enabled @@ -89,46 +109,99 @@ describe Guard::Notifier do before do RbConfig::CONFIG.should_receive(:[]).with('target_os').and_return 'darwin' subject.stub(:require_growl) - Object.send(:remove_const, :Growl) if defined?(Growl) - Growl = Object.new end - after do - Object.send(:remove_const, :Growl) + context 'with growl gem' do + before do + Object.send(:remove_const, :Growl) if defined?(Growl) + Growl = Object.new + end + + after do + Object.send(:remove_const, :Growl) + end + + it "passes the notification to Growl" do + Growl.should_receive(:notify).with("great", + :title => "Guard", + :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, + :name => "Guard" + ) + subject.notify 'great', :title => 'Guard' + end + + it "don't passes the notification to Growl if library is not available" do + Growl.should_not_receive(:notify) + subject.should_receive(:enabled?).and_return(true, false) + subject.notify 'great', :title => 'Guard' + end + + it "allows additional notification options" do + Growl.should_receive(:notify).with("great", + :title => "Guard", + :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, + :name => "Guard", + :priority => 1 + ) + subject.notify 'great', :title => 'Guard', :priority => 1 + end + + it "allows to overwrite a default notification option" do + Growl.should_receive(:notify).with("great", + :title => "Guard", + :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, + :name => "Guard-Cucumber" + ) + subject.notify 'great', :title => 'Guard', :name => "Guard-Cucumber" + end end - it "passes the notification to Growl" do - Growl.should_receive(:notify).with("great", - :title => "Guard", - :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :name => "Guard" - ) - subject.notify 'great', :title => 'Guard' - end + context 'with growl_notify gem' do + before do + Object.send(:remove_const, :GrowlNotify) if defined?(GrowlNotify) + GrowlNotify = Object.new + end - it "don't passes the notification to Growl if library is not available" do - Growl.should_not_receive(:notify) - subject.should_receive(:enabled?).and_return(true, false) - subject.notify 'great', :title => 'Guard' - end + after do + Object.send(:remove_const, :GrowlNotify) + end - it "allows additional notification options" do - Growl.should_receive(:notify).with("great", - :title => "Guard", - :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :name => "Guard", - :priority => 1 - ) - subject.notify 'great', :title => 'Guard', :priority => 1 - end + it "passes the notification to Growl" do + GrowlNotify.should_receive(:send_notification).with( + :title => "Guard", + :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, + :application_name => "Guard", + :description => 'great' + ) + subject.notify 'great', :title => 'Guard' + end - it "allows to overwrite a default notification option" do - Growl.should_receive(:notify).with("great", - :title => "Guard", - :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :name => "Guard-Cucumber" - ) - subject.notify 'great', :title => 'Guard', :name => "Guard-Cucumber" + it "don't passes the notification to Growl if library is not available" do + GrowlNotify.should_not_receive(:send_notification) + subject.should_receive(:enabled?).and_return(true, false) + subject.notify 'great', :title => 'Guard' + end + + it "allows additional notification options" do + GrowlNotify.should_receive(:send_notification).with( + :title => "Guard", + :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, + :application_name => "Guard", + :description => 'great', + :priority => 1 + ) + subject.notify 'great', :title => 'Guard', :priority => 1 + end + + it "allows to overwrite a default notification option" do + GrowlNotify.should_receive(:send_notification).with( + :title => "Guard", + :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, + :application_name => "Guard-Cucumber", + :description => 'great' + ) + subject.notify 'great', :title => 'Guard', :name => "Guard-Cucumber" + end end end From b13255a9f86cb30f6d87625214b1cd62dd66bb7b Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 28 Jun 2011 16:53:23 -0400 Subject: [PATCH 02/13] more test and support for growl_notify --- lib/guard/notifier.rb | 13 +++++++++---- spec/guard/notifier_spec.rb | 12 ++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/guard/notifier.rb b/lib/guard/notifier.rb index 36d9bc2..695ce7c 100644 --- a/lib/guard/notifier.rb +++ b/lib/guard/notifier.rb @@ -52,6 +52,7 @@ module Guard if defined?(GrowlNotify) default_options[:description] = message default_options[:application_name] = default_options.delete(:name) + growl_notify_config(default_options[:application_name]) if default_options[:application_name] != 'Guard' GrowlNotify.send_notification(default_options) if enabled? else @@ -103,10 +104,7 @@ module Guard begin require 'growl_notify' - GrowlNotify.config do |c| - c.notifications = c.default_notifications = [ "Guard" ] - c.application_name = c.notifications.first - end + growl_notify_config rescue LoadError require 'growl' end @@ -128,5 +126,12 @@ module Guard turn_off UI.info "Please install rb-notifu gem for Windows notification support and add it to your Gemfile" end + + def self.growl_notify_config(additional_applications = []) + GrowlNotify.config do |c| + c.notifications = c.default_notifications = [ "Guard", additional_applications ].flatten + c.application_name = c.notifications.first + end + end end end diff --git a/spec/guard/notifier_spec.rb b/spec/guard/notifier_spec.rb index 2613d9a..0d3b90b 100644 --- a/spec/guard/notifier_spec.rb +++ b/spec/guard/notifier_spec.rb @@ -194,6 +194,14 @@ describe Guard::Notifier do end it "allows to overwrite a default notification option" do + config = Class.new do + attr_accessor :notifications, :default_notifications, :application_name + end.new + + apps = ["Guard", "Guard-Cucumber"] + + GrowlNotify.should_receive(:config).and_yield(config) + GrowlNotify.should_receive(:send_notification).with( :title => "Guard", :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, @@ -201,6 +209,10 @@ describe Guard::Notifier do :description => 'great' ) subject.notify 'great', :title => 'Guard', :name => "Guard-Cucumber" + + config.notifications.should == apps + config.default_notifications.should == apps + config.application_name.should == apps.first end end end From 8917682cdfd3d38f1daab59630ceb76c3ec55296 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 28 Jun 2011 16:58:23 -0400 Subject: [PATCH 03/13] update README --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 057370d..3078af6 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,11 @@ Install the rb-fsevent gem for [FSEvent](http://en.wikipedia.org/wiki/FSEvents) $ gem install rb-fsevent ``` -Install the Growl gem if you want notification support: +Install either the growl_notify or the Growl gem if you want notification support: ``` bash +$ gem install growl_notify +$ # or $ gem install growl ``` @@ -63,6 +65,9 @@ gem 'rb-fsevent' gem 'growl' ``` +growl_notify uses AppleScript, the suggested method for interfacing with Growl, +rather than the `growlnotify` command to display messages. + ### On Linux Install the rb-inotify gem for [inotify](http://en.wikipedia.org/wiki/Inotify) support: From facd4f2a0b1e1a2b99fc8569f190903f690e24b3 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 1 Jul 2011 11:52:24 -0400 Subject: [PATCH 04/13] force use of Guard application name when using growl_notify --- lib/guard/notifier.rb | 21 ++++++++++----------- spec/guard/notifier_spec.rb | 17 +++-------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/lib/guard/notifier.rb b/lib/guard/notifier.rb index 695ce7c..19820fc 100644 --- a/lib/guard/notifier.rb +++ b/lib/guard/notifier.rb @@ -4,6 +4,7 @@ require 'guard/ui' module Guard module Notifier + APPLICATION_NAME = "Guard" def self.turn_off ENV["GUARD_NOTIFY"] = 'false' @@ -46,13 +47,13 @@ module Guard def self.notify_mac(title, message, image, options) require_growl # need for guard-rspec formatter that is called out of guard scope - default_options = { :title => title, :icon => image_path(image), :name => "Guard" } + default_options = { :title => title, :icon => image_path(image), :name => APPLICATION_NAME } default_options.merge!(options) if defined?(GrowlNotify) default_options[:description] = message - default_options[:application_name] = default_options.delete(:name) - growl_notify_config(default_options[:application_name]) if default_options[:application_name] != 'Guard' + default_options[:application_name] = APPLICATION_NAME + default_options.delete(:name) GrowlNotify.send_notification(default_options) if enabled? else @@ -104,7 +105,12 @@ module Guard begin require 'growl_notify' - growl_notify_config + if GrowlNotify.application_name != APPLICATION_NAME + GrowlNotify.config do |c| + c.notifications = c.default_notifications = [ APPLICATION_NAME ] + c.application_name = c.notifications.first + end + end rescue LoadError require 'growl' end @@ -126,12 +132,5 @@ module Guard turn_off UI.info "Please install rb-notifu gem for Windows notification support and add it to your Gemfile" end - - def self.growl_notify_config(additional_applications = []) - GrowlNotify.config do |c| - c.notifications = c.default_notifications = [ "Guard", additional_applications ].flatten - c.application_name = c.notifications.first - end - end end end diff --git a/spec/guard/notifier_spec.rb b/spec/guard/notifier_spec.rb index 0d3b90b..5b376b5 100644 --- a/spec/guard/notifier_spec.rb +++ b/spec/guard/notifier_spec.rb @@ -29,6 +29,7 @@ describe Guard::Notifier do it "loads the library and enables the notifications" do subject.should_receive(:require).with('growl_notify').and_return true + GrowlNotify.should_receive(:application_name).and_return '' subject.turn_on subject.should be_enabled end @@ -193,26 +194,14 @@ describe Guard::Notifier do subject.notify 'great', :title => 'Guard', :priority => 1 end - it "allows to overwrite a default notification option" do - config = Class.new do - attr_accessor :notifications, :default_notifications, :application_name - end.new - - apps = ["Guard", "Guard-Cucumber"] - - GrowlNotify.should_receive(:config).and_yield(config) - + it "throws out the application name since Guard should only use one Growl App Name while running" do GrowlNotify.should_receive(:send_notification).with( :title => "Guard", :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :application_name => "Guard-Cucumber", + :application_name => "Guard", :description => 'great' ) subject.notify 'great', :title => 'Guard', :name => "Guard-Cucumber" - - config.notifications.should == apps - config.default_notifications.should == apps - config.application_name.should == apps.first end end end From 7f87411189ff2c3fac869a4d3ff1987e6e4e8b26 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 6 Jul 2011 15:45:20 -0400 Subject: [PATCH 05/13] remove growl support completely --- Gemfile | 2 +- README.md | 11 ++----- lib/guard/notifier.rb | 30 ++++++------------- spec/guard/notifier_spec.rb | 57 +------------------------------------ 4 files changed, 14 insertions(+), 86 deletions(-) diff --git a/Gemfile b/Gemfile index 269c5e6..40c14e4 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ require 'rbconfig' if RbConfig::CONFIG['target_os'] =~ /darwin/i gem 'rb-fsevent', '>= 0.4.0', :require => false - gem 'growl', '~> 1.0.3', :require => false + gem 'growl_notify', :require => false end if RbConfig::CONFIG['target_os'] =~ /linux/i gem 'rb-inotify', '>= 0.8.5', :require => false diff --git a/README.md b/README.md index 3078af6..5a3f69a 100644 --- a/README.md +++ b/README.md @@ -50,24 +50,19 @@ Install the rb-fsevent gem for [FSEvent](http://en.wikipedia.org/wiki/FSEvents) $ gem install rb-fsevent ``` -Install either the growl_notify or the Growl gem if you want notification support: +Install the growl_notify gem if you want notification support: ``` bash $ gem install growl_notify -$ # or -$ gem install growl ``` -And add them to your Gemfile: +And add it to your Gemfile: ``` ruby gem 'rb-fsevent' -gem 'growl' +gem 'growl_notify' ``` -growl_notify uses AppleScript, the suggested method for interfacing with Growl, -rather than the `growlnotify` command to display messages. - ### On Linux Install the rb-inotify gem for [inotify](http://en.wikipedia.org/wiki/Inotify) support: diff --git a/lib/guard/notifier.rb b/lib/guard/notifier.rb index 19820fc..9035aef 100644 --- a/lib/guard/notifier.rb +++ b/lib/guard/notifier.rb @@ -47,18 +47,10 @@ module Guard def self.notify_mac(title, message, image, options) require_growl # need for guard-rspec formatter that is called out of guard scope - default_options = { :title => title, :icon => image_path(image), :name => APPLICATION_NAME } - default_options.merge!(options) + options = { :description => message, :title => title, :icon => image_path(image), :application_name => APPLICATION_NAME }.merge(options) + options.delete(:name) - if defined?(GrowlNotify) - default_options[:description] = message - default_options[:application_name] = APPLICATION_NAME - default_options.delete(:name) - - GrowlNotify.send_notification(default_options) if enabled? - else - Growl.notify message, default_options.merge(options) if enabled? - end + GrowlNotify.send_notification(options) if enabled? end def self.notify_linux(title, message, image, options) @@ -102,21 +94,17 @@ module Guard end def self.require_growl - begin - require 'growl_notify' + require 'growl_notify' - if GrowlNotify.application_name != APPLICATION_NAME - GrowlNotify.config do |c| - c.notifications = c.default_notifications = [ APPLICATION_NAME ] - c.application_name = c.notifications.first - end + if GrowlNotify.application_name != APPLICATION_NAME + GrowlNotify.config do |c| + c.notifications = c.default_notifications = [ APPLICATION_NAME ] + c.application_name = c.notifications.first end - rescue LoadError - require 'growl' end rescue LoadError turn_off - UI.info "Please install growl or growl_notify gem for Mac OS X notification support and add it to your Gemfile" + UI.info "Please install growl_notify gem for Mac OS X notification support and add it to your Gemfile" end def self.require_libnotify diff --git a/spec/guard/notifier_spec.rb b/spec/guard/notifier_spec.rb index 5b376b5..e1005bb 100644 --- a/spec/guard/notifier_spec.rb +++ b/spec/guard/notifier_spec.rb @@ -39,19 +39,9 @@ describe Guard::Notifier do end end - context "with the Growl library available" do - it "loads the library and enables the notifications" do - subject.should_receive(:require).with('growl_notify').and_raise LoadError - subject.should_receive(:require).with('growl').and_return true - subject.turn_on - subject.should be_enabled - end - end - - context "without the Growl library available" do + context "without the GrowlNofity library available" do it "disables the notifications" do subject.should_receive(:require).with('growl_notify').and_raise LoadError - subject.should_receive(:require).with('growl').and_raise LoadError subject.turn_on subject.should_not be_enabled end @@ -112,51 +102,6 @@ describe Guard::Notifier do subject.stub(:require_growl) end - context 'with growl gem' do - before do - Object.send(:remove_const, :Growl) if defined?(Growl) - Growl = Object.new - end - - after do - Object.send(:remove_const, :Growl) - end - - it "passes the notification to Growl" do - Growl.should_receive(:notify).with("great", - :title => "Guard", - :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :name => "Guard" - ) - subject.notify 'great', :title => 'Guard' - end - - it "don't passes the notification to Growl if library is not available" do - Growl.should_not_receive(:notify) - subject.should_receive(:enabled?).and_return(true, false) - subject.notify 'great', :title => 'Guard' - end - - it "allows additional notification options" do - Growl.should_receive(:notify).with("great", - :title => "Guard", - :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :name => "Guard", - :priority => 1 - ) - subject.notify 'great', :title => 'Guard', :priority => 1 - end - - it "allows to overwrite a default notification option" do - Growl.should_receive(:notify).with("great", - :title => "Guard", - :icon => Pathname.new(File.dirname(__FILE__)).join('../../images/success.png').to_s, - :name => "Guard-Cucumber" - ) - subject.notify 'great', :title => 'Guard', :name => "Guard-Cucumber" - end - end - context 'with growl_notify gem' do before do Object.send(:remove_const, :GrowlNotify) if defined?(GrowlNotify) From 63ca5f0b70be5b56079697be299e7077df2be415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 11 Aug 2011 13:27:41 +0300 Subject: [PATCH 06/13] [ci skip] Added missing documentation for options and for win32console! --- README.md | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7aa00dd..10c8681 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,12 @@ Install the rb-fchange gem for [Directory Change Notification](http://msdn.micro $ gem install rb-fchange ``` +Install the win32console gem if you want colors in your terminal: + +``` bash +$ gem install win32console +``` + Install the Notifu gem if you want notification support: ``` bash @@ -125,7 +131,7 @@ Guard will look for a Guardfile in your current directory. If it does not find o Command line options -------------------- -### `--clear` option +### `-c`/`--clear` option Shell can be cleared after each change: @@ -134,7 +140,7 @@ $ guard --clear $ guard -c # shortcut ``` -### `--notify` option +### `-n`/`--notify` option Notifications (growl/libnotify) can be disabled: @@ -145,7 +151,7 @@ $ guard -n f # shortcut Notifications can also be disabled globally by setting a `GUARD_NOTIFY` environment variable to `false` -### `--group` option +### `-g`/`--group` option Only certain guards groups can be run (see the Guardfile DSL below for creating groups): @@ -154,7 +160,7 @@ $ guard --group group_name another_group_name $ guard -g group_name another_group_name # shortcut ``` -### `--debug` option +### `-d`/`--debug` option Guard can be run in debug mode: @@ -163,6 +169,24 @@ $ guard --debug $ guard -d # shortcut ``` +### `-w`/`--watchdir` option + +Guard can watch in any directory (instead of the current directory): + +``` bash +$ guard --watchdir ~/your/fancy/project +$ guard -w ~/your/fancy/project # shortcut +``` + +### `-G`/`--guardfile` option + +Guard can use a Guardfile not located in the current directory: + +``` bash +$ guard --guardfile ~/.your_global_guardfile +$ guard -G ~/.your_global_guardfile # shortcut +``` + An exhaustive list of options is available with: ``` bash From e846068e89362f47a1937ded6af3f32cddbd0179 Mon Sep 17 00:00:00 2001 From: Rob Eanes Date: Fri, 12 Aug 2011 10:03:06 -0500 Subject: [PATCH 07/13] Polling#watch_change should use listener directory, not Dir.pwd --- lib/guard/listeners/polling.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/guard/listeners/polling.rb b/lib/guard/listeners/polling.rb index fad687c..894bff9 100644 --- a/lib/guard/listeners/polling.rb +++ b/lib/guard/listeners/polling.rb @@ -22,7 +22,7 @@ module Guard def watch_change until @stop start = Time.now.to_f - files = modified_files([Dir.pwd], :all => true) + files = modified_files([@directory], :all => true) @callback.call(files) unless files.empty? nap_time = @latency - (Time.now.to_f - start) sleep(nap_time) if nap_time > 0 From 2c81e5b9bd27b204897b0d35860d008117b0ae1d Mon Sep 17 00:00:00 2001 From: Thibaud Guillaume-Gentil Date: Sat, 13 Aug 2011 16:47:23 +0200 Subject: [PATCH 08/13] Version 0.6.0 --- CHANGELOG.md | 3 ++- lib/guard/version.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4444c82..1e57b83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## Master +## 0.6.0 - August 13, 2011 ### Bugs fixes: @@ -11,6 +11,7 @@ ### Improvements +- Pull request [#99](https://github.com/guard/guard/pull/99): [OS X] Switch from growl gem to growl_notify gem. ([@johnbintz][]) - Pull request [#115](https://github.com/guard/guard/pull/115): [Linux] Add ':transient => true' to default libnotify options. ([@zonque][]) - Pull request [#95](https://github.com/guard/guard/pull/95): Output system commands and options to be executed when in debug mode. ([@uk-ar][] and [@netzpirat][]) - `Guard::Dsl.revaluate_guardfile` has been renamed to `Guard::Dsl.reevaluate_guardfile`. ([@rymai][]) diff --git a/lib/guard/version.rb b/lib/guard/version.rb index 78f2314..b1df99c 100644 --- a/lib/guard/version.rb +++ b/lib/guard/version.rb @@ -1,3 +1,3 @@ module Guard - VERSION = "0.5.1" unless defined? Guard::VERSION + VERSION = "0.6.0" unless defined? Guard::VERSION end From 87375c7a1ffdfcab1b10015ca6bb7706c41368ae Mon Sep 17 00:00:00 2001 From: Ches Martin Date: Sun, 14 Aug 2011 15:16:16 +0700 Subject: [PATCH 09/13] evaluate_guardfile uses all groups if none specified. Fixes #118 --- lib/guard/dsl.rb | 3 ++- spec/guard/dsl_spec.rb | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/guard/dsl.rb b/lib/guard/dsl.rb index aa78735..12ca379 100644 --- a/lib/guard/dsl.rb +++ b/lib/guard/dsl.rb @@ -104,7 +104,8 @@ module Guard end def group(name, &guard_definition) - guard_definition.call if guard_definition && (@@options[:group].empty? || @@options[:group].include?(name.to_s)) + @groups = @@options[:group] || [] + guard_definition.call if guard_definition && (@groups.empty? || @groups.include?(name.to_s)) end def guard(name, options = {}, &watch_definition) diff --git a/spec/guard/dsl_spec.rb b/spec/guard/dsl_spec.rb index f50c707..740d8ed 100644 --- a/spec/guard/dsl_spec.rb +++ b/spec/guard/dsl_spec.rb @@ -213,6 +213,11 @@ describe Guard::Dsl do ::Guard.should_receive(:add_guard).with('another', anything, {}) lambda { subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string, :group => ['x','y']) }.should_not raise_error end + it "should evaluate all groups when no group option is specified" do + ::Guard.should_receive(:add_guard).with('test', anything, {}).twice + ::Guard.should_receive(:add_guard).with('another', anything, {}).twice + lambda { subject.evaluate_guardfile(:guardfile_contents => valid_guardfile_string) }.should_not raise_error + end end # TODO: not sure if each seperate quoting/call type needs its own test From ca2a4fa1be2a0a1de98e31b566554cddae5484fe Mon Sep 17 00:00:00 2001 From: Ches Martin Date: Sun, 14 Aug 2011 15:16:59 +0700 Subject: [PATCH 10/13] Don't fail specs because of blasted vim swapfiles --- spec/support/listener_helper.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/support/listener_helper.rb b/spec/support/listener_helper.rb index 03bc21b..85c9d78 100644 --- a/spec/support/listener_helper.rb +++ b/spec/support/listener_helper.rb @@ -8,9 +8,11 @@ private end def record_results + noise = %r|\.sw.$| # don't fail specs due to editor swap files, etc. + @results = [] @listener.on_change do |files| - @results += files + @results += files.reject { |f| f =~ noise } end end From e375d2f3271d94fdbae7b427453854bb60f72f9c Mon Sep 17 00:00:00 2001 From: Michael Kessler Date: Sun, 14 Aug 2011 14:17:48 +0200 Subject: [PATCH 11/13] Explain what happens with guards without a group. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f749661..e73b177 100644 --- a/README.md +++ b/README.md @@ -243,7 +243,7 @@ Required: Optional: * The `#watch` method allows you to define which files are supervised by this guard. An optional block can be added to overwrite the paths sent to the guard's `#run_on_change` method or to launch any arbitrary command. -* The `#group` method allows you to group several guards together. Groups to be run can be specified with the Guard DSL option `--group` (or `-g`). This comes in handy especially when you have a huge Guardfile and want to focus your development on a certain part. +* The `#group` method allows you to group several guards together. Groups to be run can be specified with the Guard DSL option `--group` (or `-g`). This comes in handy especially when you have a huge Guardfile and want to focus your development on a certain part. Guards that don't belong to a group are considered global and are always run. Example: From 820501bf15b32ad6dbcebc73a45e3a2c3b613c63 Mon Sep 17 00:00:00 2001 From: mordaroso Date: Sun, 14 Aug 2011 18:41:05 +0200 Subject: [PATCH 12/13] remove guardfile_contents when re-evaluating so that the Guardfile gets reloaded correctly --- lib/guard/dsl.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/guard/dsl.rb b/lib/guard/dsl.rb index aa78735..abea392 100644 --- a/lib/guard/dsl.rb +++ b/lib/guard/dsl.rb @@ -14,6 +14,7 @@ module Guard def reevaluate_guardfile ::Guard.guards.clear + @@options.delete(:guardfile_contents) Dsl.evaluate_guardfile(@@options) msg = "Guardfile has been re-evaluated." UI.info(msg) From e9cef8809b6c77a4aa1c390929cf358e41c96d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Sun, 14 Aug 2011 21:25:57 +0300 Subject: [PATCH 13/13] [ci skip] Added a link to the screencast on Guard by Ryan Bates (idea taken from the guard-process's README!). :) --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e73b177..06bd4a0 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,12 @@ Features * Automatic & Super fast (when polling is not used) files modifications detection (even new files are detected). * Growl notifications ([growlnotify](http://growl.info/documentation/growlnotify.php) & [growl gem](https://rubygems.org/gems/growl) required). * Libnotify notifications ([libnotify gem](https://rubygems.org/gems/libnotify) required). -* Tested on Ruby 1.8.7, 1.9.2 && ree. +* Tested against Ruby 1.8.7, 1.9.2 and REE. + +Screencast +---------- + +Ryan Bates made a screencast on Guard, you can view it here: http://railscasts.com/episodes/264-guard Install -------