guard 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -4,40 +4,39 @@ Guard is a command line tool that easily handle events on files modifications.
4
4
 
5
5
  == Features
6
6
 
7
- - {FSEvent}[http://en.wikipedia.org/wiki/FSEvents] support on Mac OS X 10.5+ (without RubyCocoa!, {rb-fsevent gem, >= 0.3.5}[https://rubygems.org/gems/rb-fsevent] required)
8
- - {Inotify}[http://en.wikipedia.org/wiki/Inotify] support on Linux ({rb-inotify gem, >= 0.5.1}[https://rubygems.org/gems/rb-inotify] required)
9
- - Polling for others (help us to support more systems)
10
- - Super fast change detection (when polling not used)
11
- - Automatic files modifications detection (even new files are detected)
12
- - Growl notification ({growlnotify}[http://growl.info/documentation/growlnotify.php] & {growl gem}[https://rubygems.org/gems/growl] required)
13
- - Libnotify notification ({libnotify gem}[https://rubygems.org/gems/libnotify] required)
14
- - Tested on Ruby 1.8.6, 1.8.7 & 1.9.2
7
+ - {FSEvent}[http://en.wikipedia.org/wiki/FSEvents] support on Mac OS X 10.5+ (without RubyCocoa!, {rb-fsevent gem, >= 0.3.5}[https://rubygems.org/gems/rb-fsevent] required).
8
+ - {Inotify}[http://en.wikipedia.org/wiki/Inotify] support on Linux ({rb-inotify gem, >= 0.5.1}[https://rubygems.org/gems/rb-inotify] required).
9
+ - Polling on the other operating systems (help us to support more OS).
10
+ - Automatic & Super fast (when polling is not used) files modifications detection (even new files are detected).
11
+ - Growl notifications ({growlnotify}[http://growl.info/documentation/growlnotify.php] & {growl gem}[https://rubygems.org/gems/growl] required).
12
+ - Libnotify notifications ({libnotify gem}[https://rubygems.org/gems/libnotify] required).
13
+ - Tested on Ruby 1.8.6, 1.8.7 & 1.9.2.
15
14
 
16
15
  == Install
17
16
 
18
17
  Install the gem:
19
18
 
20
- gem install guard
19
+ $ gem install guard
21
20
 
22
- Add it to your Gemfile (inside test group):
21
+ Add it to your Gemfile (inside the <tt>test</tt> group):
23
22
 
24
23
  gem 'guard'
25
24
 
26
25
  Generate an empty Guardfile with:
27
26
 
28
- guard init
27
+ $ guard init
29
28
 
30
- Add the guards you need (see available guards below)
29
+ Add the guards you need to your Guardfile (see the existing guards below).
31
30
 
32
31
  === On Mac OS X
33
32
 
34
- Install rb-fsevent for {FSEvent}[http://en.wikipedia.org/wiki/FSEvents] support:
33
+ Install the rb-fsevent gem for {FSEvent}[http://en.wikipedia.org/wiki/FSEvents] support:
35
34
 
36
- gem install rb-fsevent
35
+ $ gem install rb-fsevent
37
36
 
38
- Install growl for Growl notification support:
37
+ Install the Growl gem if you want notification support:
39
38
 
40
- gem install growl
39
+ $ gem install growl
41
40
 
42
41
  And add it to you Gemfile:
43
42
 
@@ -45,13 +44,13 @@ And add it to you Gemfile:
45
44
 
46
45
  === On Linux
47
46
 
48
- Install rb-inotify for {inotify}[http://en.wikipedia.org/wiki/Inotify] support:
47
+ Install the rb-inotify gem for {inotify}[http://en.wikipedia.org/wiki/Inotify] support:
49
48
 
50
- gem install rb-inotify
49
+ $ gem install rb-inotify
51
50
 
52
- Install libnotify for libonity notification support:
51
+ Install the Libnotify gem if you want notification support:
53
52
 
54
- gem install libnotify
53
+ $ gem install libnotify
55
54
 
56
55
  And add it to you Gemfile:
57
56
 
@@ -61,79 +60,67 @@ And add it to you Gemfile:
61
60
 
62
61
  Just launch Guard inside your Ruby / Rails project with:
63
62
 
64
- guard
63
+ $ guard [start]
65
64
 
66
65
  or if you use Bundler, to run the Guard executable specific to your bundle:
67
66
 
68
- bundle exec guard
67
+ $ bundle exec guard
69
68
 
70
69
  == Command line options
71
70
 
72
71
  Shell can be cleared after each change with:
73
72
 
74
- guard --clear
75
- guard -c # shortcut
73
+ $ guard --clear
74
+ $ guard -c # shortcut
76
75
 
77
- The guards to start can be specified by group (see Guardfile DSL below) specifying the `--group` (or `-g`) option:
76
+ Notifications (growl/libnotify) can be disabled with:
78
77
 
79
- guard --group group_name another_group_name
80
- guard -g group_name another_group_name # shortcut
78
+ $ guard --notify false
79
+ $ guard -n false # shortcut
80
+
81
+ The guards to start can be specified by group (see the Guardfile DSL below) specifying the <tt>--group</tt> (or <tt>-g</tt>) option:
82
+
83
+ $ guard --group group_name another_group_name
84
+ $ guard -g group_name another_group_name # shortcut
81
85
 
82
86
  Options list is available with:
83
87
 
84
- guard help [TASK]
88
+ $ guard help [TASK]
85
89
 
86
90
  == Signal handlers
87
91
 
88
92
  Signal handlers are used to interact with Guard:
89
93
 
90
- - Ctrl-C - Quit Guard (call each guard's run_all method, in the same order they are declared in the Guarfile)
91
- - Ctrl-\ - Call each guard's run_all method, in the same order they are declared in the Guarfile
92
- - Ctrl-Z - Call each guard's reload method, in the same order they are declared in the Guarfile
94
+ - <tt>Ctrl-C</tt> - Calls each guard's <tt>stop</tt> method, in the same order they are declared in the Guardfile, and then quits Guard itself.
95
+ - <tt>Ctrl-\\</tt> - Calls each guard's <tt>run_all</tt> method, in the same order they are declared in the Guardfile.
96
+ - <tt>Ctrl-Z</tt> - Calls each guard's <tt>reload</tt> method, in the same order they are declared in the Guardfile.
93
97
 
94
98
  == Available Guards
95
99
 
96
- - {guard-bundler}[https://github.com/guard/guard-bundler] by {Yann Lugrin}[https://github.com/yannlugrin]
97
- - {guard-coffeescript}[https://github.com/guard/guard-coffeescript] by {Michael Kessler}[https://github.com/netzpirat]
98
- - {guard-compass}[https://github.com/guard/guard-compass] by {Olivier Amblet}[https://github.com/oliamb]
99
- - {guard-cucumber}[https://github.com/guard/guard-cucumber] by {Michael Kessler}[https://github.com/netzpirat]
100
- - {guard-ego}[https://github.com/guard/guard-ego] by {Fabio Kuhn}[https://github.com/mordaroso]
101
- - {guard-jammit}[https://github.com/guard/guard-jammit] by {Pelle Braendgaard}[https://github.com/pelle]
102
- - {guard-less}[https://github.com/guard/guard-less] by {Brendan Erwin}[https://github.com/brendanjerwin]
103
- - {guard-livereload}[https://github.com/guard/guard-livereload] by {Thibaud Guillaume-Gentil}[https://github.com/thibaudgg]
104
- - {guard-minitest}[https://github.com/guard/guard-minitest] by {Yann Lugrin}[https://github.com/yannlugrin]
105
- - {guard-nanoc}[https://github.com/guard/guard-nanoc] by {Yann Lugrin}[https://github.com/yannlugrin]
106
- - {guard-passenger}[https://github.com/guard/guard-passenger] by {Fabio Kuhn}[https://github.com/mordaroso]
107
- - {guard-rspec}[https://github.com/guard/guard-rspec] by {Thibaud Guillaume-Gentil}[https://github.com/thibaudgg]
108
- - {guard-sass}[https://github.com/guard/guard-sass] by {Joshua Hawxwell}[https://github.com/hawx]
109
- - {guard-shell}[https://github.com/guard/guard-shell] by {Joshua Hawxwell}[https://github.com/hawx]
110
- - {guard-soca}[https://github.com/guard/guard-soca] by {Luke Amdor}[https://github.com/rubbish]
111
- - {guard-spork}[https://github.com/guard/guard-spork] by {Thibaud Guillaume-Gentil}[https://github.com/thibaudgg]
112
- - {guard-stendhal}[https://github.com/guard/guard-stendhal] by {Josep Mª Bach}[https://github.com/txus]
113
- - {guard-test}[https://github.com/guard/guard-test] by {Rémy Coutable}[https://github.com/rymai]
100
+ {Available Guards list}[https://github.com/guard/guard/wiki/List-of-available-Guards] (on the wiki now)
114
101
 
115
102
  === Add a guard to your Guardfile
116
103
 
117
- Add it to your Gemfile (inside test group):
104
+ Add it to your Gemfile (inside the <tt>test</tt> group):
118
105
 
119
106
  gem '<guard-name>'
120
107
 
121
- Add guard definition to your Guardfile by running this command:
108
+ Insert default guard's definition to your Guardfile by running this command:
122
109
 
123
- guard init <guard-name>
110
+ $ guard init <guard-name>
124
111
 
125
112
  You are good to go!
126
113
 
127
114
  == Guardfile DSL
128
115
 
129
- The Guardfile DSL consists of just three simple main methods: `guard`, `watch` & `group`.
116
+ The Guardfile DSL consists of just three simple methods: <tt>guard</tt>, <tt>watch</tt> & <tt>group</tt>.
130
117
 
131
118
  Required:
132
- - The `guard` method allows you to add a guard with an optional options hash.
133
- - The `watch` method allows you to define which files are supervised per this guard. A optional block can be added to overwrite path sent to run_on_change guard method or launch simple command.
119
+ - The <tt>guard</tt> method allows you to add a guard with an optional hash of options.
120
+ - The <tt>watch</tt> 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 <tt>run_on_change</tt> guard method or to launch any arbitrary command.
134
121
 
135
122
  Optional:
136
- - The `group` method allows you to group several guards. Groups to 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.
123
+ - The <tt>group</tt> method allows you to group several guards together. Groups to be run can be specified with the Guard DSL option <tt>--group</tt> (or <tt>-g</tt>). This comes in handy especially when you have a huge Guardfile and want to focus your development on a certain part.
137
124
 
138
125
  Example:
139
126
 
@@ -142,9 +129,9 @@ Example:
142
129
  watch('Gemfile')
143
130
  end
144
131
 
145
- guard 'rspec' do
132
+ guard 'rspec', :cli => '--color --format doc' do
146
133
  # Regexp watch patterns are matched with Regexp#match
147
- watch(%r{^spec/(.+)_spec\.rb})
134
+ watch(%r{^spec/.+_spec\.rb})
148
135
  watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
149
136
  watch(%r{^spec/models/.+\.rb}) { ["spec/models", "spec/acceptance"] }
150
137
  watch(%r{^spec/.+\.rb}) { `say hello` }
@@ -156,17 +143,17 @@ Example:
156
143
 
157
144
  group 'frontend' do
158
145
  guard 'coffeescript', :output => 'public/javascripts/compiled' do
159
- watch(%r{app/coffeescripts/.+\.coffee})
146
+ watch(%r{^app/coffeescripts/.+\.coffee})
160
147
  end
161
148
 
162
149
  guard 'livereload' do
163
- watch(%r{app/.+\.(erb|haml)})
150
+ watch(%r{^app/.+\.(erb|haml)})
164
151
  end
165
152
  end
166
153
 
167
- == Create a guard
154
+ == Create a new guard
168
155
 
169
- Create a new guard is very easy, just create a new gem with this basic structure:
156
+ Creating a new guard is very easy, just create a new gem (<tt>bundle gem</tt> if you use Bundler) with this basic structure:
170
157
 
171
158
  lib/
172
159
  guard/
@@ -175,7 +162,7 @@ Create a new guard is very easy, just create a new gem with this basic structure
175
162
  Guardfile (needed for guard init <guard-name>)
176
163
  guard-name.rb
177
164
 
178
- lib/guard/guard-name.rb inherit from guard/guard and should overwrite at least one of the five guard methods. Example:
165
+ <tt>Guard::GuardName</tt> (in <tt>lib/guard/guard-name.rb</tt>) must inherit from <tt>Guard::Guard</tt> and should overwrite at least one of the five basic <tt>Guard::Guard</tt> instance methods. Example:
179
166
 
180
167
  require 'guard'
181
168
  require 'guard/guard'
@@ -183,42 +170,42 @@ lib/guard/guard-name.rb inherit from guard/guard and should overwrite at least o
183
170
  module Guard
184
171
  class GuardName < Guard
185
172
 
186
- def initialize(watchers = [], options = {})
173
+ def initialize(watchers=[], options={})
187
174
  super
188
175
  # init stuff here, thx!
189
176
  end
190
177
 
191
- # ================
192
- # = Guard method =
193
- # ================
178
+ # =================
179
+ # = Guard methods =
180
+ # =================
194
181
 
195
- # If one of those methods raise an exception, the Guard instance
196
- # will be removed from the active guard.
182
+ # If one of those methods raise an exception, the Guard::GuardName instance
183
+ # will be removed from the active guards.
197
184
 
198
- # Call once when guard starts
185
+ # Called once when Guard starts
199
186
  # Please override initialize method to init stuff
200
187
  def start
201
188
  true
202
189
  end
203
190
 
204
- # Call with Ctrl-C signal (when Guard quit)
191
+ # Called on Ctrl-C signal (when Guard quits)
205
192
  def stop
206
193
  true
207
194
  end
208
195
 
209
- # Call with Ctrl-Z signal
196
+ # Called on Ctrl-Z signal
210
197
  # This method should be mainly used for "reload" (really!) actions like reloading passenger/spork/bundler/...
211
198
  def reload
212
199
  true
213
200
  end
214
201
 
215
- # Call with Ctrl-/ signal
202
+ # Called on Ctrl-/ signal
216
203
  # This method should be principally used for long action like running all specs/tests/...
217
204
  def run_all
218
205
  true
219
206
  end
220
207
 
221
- # Call on file(s) modifications
208
+ # Called on file(s) modifications
222
209
  def run_on_change(paths)
223
210
  true
224
211
  end
@@ -226,12 +213,12 @@ lib/guard/guard-name.rb inherit from guard/guard and should overwrite at least o
226
213
  end
227
214
  end
228
215
 
229
- Looks at available guards code for more concrete example.
216
+ Please take a look at the existing guards' source code (see the list above) for more concrete example.
230
217
 
231
218
  == Development
232
219
 
233
- - Source hosted at {GitHub}[https://github.com/guard/guard]
234
- - Report issues/Questions/Feature requests on {GitHub Issues}[https://github.com/guard/guard/issues]
220
+ - Source hosted at {GitHub}[https://github.com/guard/guard].
221
+ - Report Issues/Questions/Feature requests on {GitHub Issues}[https://github.com/guard/guard/issues].
235
222
 
236
223
  Pull requests are very welcome! Make sure your patches are well tested. Please create a topic branch for every separate change
237
224
  you make.
data/lib/guard.rb CHANGED
@@ -17,6 +17,9 @@ module Guard
17
17
  @options = options
18
18
  @listener = Listener.select_and_init
19
19
  @guards = []
20
+
21
+ Notifier.turn_off unless options[:notify]
22
+
20
23
  self
21
24
  end
22
25
 
@@ -50,7 +53,7 @@ module Guard
50
53
  new_modified_files = listener.modified_files([Dir.pwd + '/'], :all => true)
51
54
  listener.update_last_event
52
55
  unless new_modified_files.empty?
53
- run_on_change_for_all_guards(new_modified_files)
56
+ run { run_on_change_for_all_guards(new_modified_files) }
54
57
  end
55
58
  end
56
59
 
@@ -82,20 +85,16 @@ module Guard
82
85
 
83
86
  def get_guard_class(name)
84
87
  require "guard/#{name.downcase}"
85
- klasses = []
86
- ObjectSpace.each_object(Class) do |klass|
87
- klasses << klass if klass.to_s.downcase.match(/^guard::#{name.downcase}/)
88
- end
89
- klasses.first
88
+ self.const_get(self.constants.find{|klass_name| klass_name.to_s.downcase == name.downcase })
90
89
  rescue LoadError
91
90
  UI.error "Could not find gem 'guard-#{name}', please add it in your Gemfile."
92
91
  end
93
92
 
94
93
  def locate_guard(name)
95
- `gem open guard-#{name} --latest --command echo`.chomp
94
+ `gem which guard/#{name}`.chomp
96
95
  rescue
97
96
  UI.error "Could not find 'guard-#{name}' gem path."
98
97
  end
99
98
 
100
99
  end
101
- end
100
+ end
data/lib/guard/cli.rb CHANGED
@@ -4,22 +4,23 @@ require 'guard/version'
4
4
  module Guard
5
5
  class CLI < Thor
6
6
  default_task :start
7
-
8
- method_option :clear, :type => :boolean, :default => false, :aliases => '-c', :banner => "Auto clear shell before each change/run_all/reload"
9
- method_option :debug, :type => :boolean, :default => false, :aliases => '-d', :banner => "Print debug messages"
10
- method_option :group, :type => :array, :default => [], :aliases => '-g', :banner => "Run only the passed groups"
11
-
7
+
8
+ method_option :clear, :type => :boolean, :default => false, :aliases => '-c', :banner => "Auto clear shell before each change/run_all/reload"
9
+ method_option :notify, :type => :boolean, :default => true, :aliases => '-n', :banner => "Notifications feature (growl/libnotify)"
10
+ method_option :debug, :type => :boolean, :default => false, :aliases => '-d', :banner => "Print debug messages"
11
+ method_option :group, :type => :array, :default => [], :aliases => '-g', :banner => "Run only the passed groups"
12
+
12
13
  desc "start", "Starts Guard"
13
14
  def start
14
15
  ::Guard.start(options)
15
16
  end
16
-
17
+
17
18
  desc "version", "Prints Guard's version information"
18
19
  def version
19
20
  ::Guard::UI.info "Guard version #{Guard::VERSION}"
20
21
  end
21
22
  map %w(-v --version) => :version
22
-
23
+
23
24
  desc "init [GUARD]", "Generates a Guardfile into the current working directory, or insert the given GUARD"
24
25
  def init(guard_name = nil)
25
26
  if !File.exist?("Guardfile")
@@ -29,12 +30,12 @@ module Guard
29
30
  ::Guard::UI.error "Guardfile already exists at #{Dir.pwd}/Guardfile"
30
31
  exit 1
31
32
  end
32
-
33
+
33
34
  if guard_name
34
35
  guard_class = ::Guard.get_guard_class(guard_name)
35
36
  guard_class.init(guard_name)
36
37
  end
37
38
  end
38
-
39
+
39
40
  end
40
41
  end
@@ -60,6 +60,7 @@ module Guard
60
60
  update_last_event
61
61
 
62
62
  unless files.empty?
63
+ files.uniq!
63
64
  files.map! { |file| file.gsub("#{Dir.pwd}/", '') }
64
65
  callback.call(files)
65
66
  files.clear
@@ -3,9 +3,13 @@ require 'pathname'
3
3
 
4
4
  module Guard
5
5
  module Notifier
6
-
6
+
7
+ def self.turn_off
8
+ @disable = true
9
+ end
10
+
7
11
  def self.notify(message, options = {})
8
- unless ENV["GUARD_ENV"] == "test"
12
+ unless @disable || ENV["GUARD_ENV"] == "test"
9
13
  image = options[:image] || :success
10
14
  title = options[:title] || "Guard"
11
15
  case Config::CONFIG['target_os']
@@ -20,9 +24,9 @@ module Guard
20
24
  end
21
25
  end
22
26
  end
23
-
27
+
24
28
  private
25
-
29
+
26
30
  def self.image_path(image)
27
31
  images_path = Pathname.new(File.dirname(__FILE__)).join('../../images')
28
32
  case image
@@ -37,7 +41,7 @@ module Guard
37
41
  image
38
42
  end
39
43
  end
40
-
44
+
41
45
  def self.growl_installed?
42
46
  @installed ||= begin
43
47
  require 'growl'
@@ -47,7 +51,7 @@ module Guard
47
51
  false
48
52
  end
49
53
  end
50
-
54
+
51
55
  def self.libnotify_installed?
52
56
  @installed ||= begin
53
57
  require 'libnotify'
@@ -57,6 +61,6 @@ module Guard
57
61
  false
58
62
  end
59
63
  end
60
-
64
+
61
65
  end
62
66
  end
data/lib/guard/ui.rb CHANGED
@@ -1,46 +1,46 @@
1
1
  module Guard
2
2
  module UI
3
3
  class << self
4
-
4
+
5
5
  def info(message, options = {})
6
6
  unless ENV["GUARD_ENV"] == "test"
7
7
  reset_line if options[:reset]
8
8
  puts reset_color(message) if message != ''
9
9
  end
10
10
  end
11
-
11
+
12
12
  def error(message, options = {})
13
13
  unless ENV["GUARD_ENV"] == "test"
14
14
  reset_line if options[:reset]
15
15
  puts "ERROR: #{message}"
16
16
  end
17
17
  end
18
-
18
+
19
19
  def debug(message, options = {})
20
20
  unless ENV["GUARD_ENV"] == "test"
21
21
  reset_line if options[:reset]
22
22
  puts "DEBUG: #{message}" if ::Guard.options && ::Guard.options[:debug]
23
23
  end
24
24
  end
25
-
25
+
26
26
  def reset_line
27
- print "\r\e "
27
+ print "\r\e[0m"
28
28
  end
29
-
29
+
30
30
  def clear
31
31
  system("clear;")
32
32
  end
33
-
33
+
34
34
  private
35
-
35
+
36
36
  def reset_color(text)
37
37
  color(text, "\e[0m")
38
38
  end
39
-
39
+
40
40
  def color(text, color_code)
41
41
  "#{color_code}#{text}\e[0m"
42
42
  end
43
-
43
+
44
44
  end
45
45
  end
46
46
  end
data/lib/guard/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Guard
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Thibaud Guillaume-Gentil
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-19 00:00:00 +01:00
18
+ date: 2011-04-14 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -42,12 +42,12 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- hash: 31
45
+ hash: 27
46
46
  segments:
47
47
  - 2
48
- - 4
48
+ - 5
49
49
  - 0
50
- version: 2.4.0
50
+ version: 2.5.0
51
51
  type: :development
52
52
  version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
@@ -58,12 +58,12 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- hash: 9
61
+ hash: 23
62
62
  segments:
63
63
  - 0
64
- - 1
65
- - 9
66
- version: 0.1.9
64
+ - 2
65
+ - 0
66
+ version: 0.2.0
67
67
  type: :development
68
68
  version_requirements: *id003
69
69
  - !ruby/object:Gem::Dependency
@@ -82,22 +82,6 @@ dependencies:
82
82
  version: 0.14.6
83
83
  type: :runtime
84
84
  version_requirements: *id004
85
- - !ruby/object:Gem::Dependency
86
- name: open_gem
87
- prerelease: false
88
- requirement: &id005 !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- hash: 3
94
- segments:
95
- - 1
96
- - 4
97
- - 2
98
- version: 1.4.2
99
- type: :runtime
100
- version_requirements: *id005
101
85
  description: Guard is a command line tool to easily handle events on files modifications.
102
86
  email:
103
87
  - thibaud@thibaud.me