alloy-kicker 1.0.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -2,15 +2,16 @@
2
2
 
3
3
  A simple OS X CLI tool which uses FSEvents to run a given shell command.
4
4
 
5
+ http://github.com/alloy/kicker/raw/master/html/images/kikker.jpg
6
+
5
7
  == Usage
6
8
 
7
- At the least give it a path to a file or directory and a shell command to
8
- execute when any changes occur.
9
+ Give it paths to files or directories and a shell command to execute when any
10
+ changes occur.
9
11
 
10
- Usage: kicker [options] -e [command] [path]
12
+ Usage: kicker [options] -e [command] [paths to watch]
11
13
  -e, --execute [COMMAND] The command to execute.
12
14
  --[no-]growl Whether or not to use Growl. Default is to use growl.
13
- --growl-message [MESSAGE] The message to Growl when the command succeeded.
14
15
  --growl-command [COMMAND] The command to execute when the Growl succeeded message is clicked.
15
16
 
16
17
  == Examples
@@ -21,12 +22,16 @@ Show all files whenever a change occurs in the current work directory:
21
22
 
22
23
  Run a Rake task whenever a given file is changed:
23
24
 
24
- $ kicker -e "ONLY=nested_model_forms rake guides" guides/source/nested_model_forms.textile
25
+ $ kicker -e "rake guides" guides/source/nested_model_forms.textile
25
26
 
26
27
  Run a Run task whenever a given file is changed and specify a command to be
27
28
  executed if the user clicks a `succeeded' Growl message:
28
29
 
29
- $ kicker -e "ONLY=nested_model_forms rake guides" --growl-command "open -a Safari guides/output/nested_model_forms.html" guides/source/nested_model_forms.textile
30
+ $ kicker -e "rake guides" --growl-command "open -a Safari guides/output/nested_model_forms.html" guides/source/nested_model_forms.textile
31
+
32
+ And for fun, ghetto-autotest:
33
+
34
+ $ kicker -e "ruby test/test_case.rb" test/test_case.rb lib/file.rb
30
35
 
31
36
  == Installation
32
37
 
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
  require 'rake/testtask'
4
+ require 'rake/rdoctask'
4
5
 
5
6
  begin
6
7
  require 'jeweler'
@@ -11,9 +12,9 @@ begin
11
12
  gem.homepage = "http://github.com/alloy/kicker"
12
13
  gem.authors = ["Eloy Duran"]
13
14
  gem.executables << 'kicker'
14
- gem.files = FileList['**/**']
15
+ gem.files.concat FileList['vendor/**/*']
15
16
  gem.require_paths = ['vendor']
16
- gem.has_rdoc = false
17
+ gem.has_rdoc = true
17
18
  end
18
19
  rescue LoadError
19
20
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
@@ -25,4 +26,11 @@ Rake::TestTask.new do |t|
25
26
  t.options = '-rs'
26
27
  end
27
28
 
29
+ namespace :docs do
30
+ Rake::RDocTask.new('generate') do |t|
31
+ t.main = "README.rdoc"
32
+ t.rdoc_files.include("README.rdoc", "lib/**/*.rb")
33
+ end
34
+ end
35
+
28
36
  task :default => :test
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
- :minor: 0
4
- :patch: 0
3
+ :minor: 1
4
+ :patch: 1
data/lib/kicker.rb CHANGED
@@ -6,7 +6,7 @@ require 'optparse'
6
6
  class Kicker
7
7
  OPTION_PARSER = lambda do |options|
8
8
  OptionParser.new do |opts|
9
- opts.banner = "Usage: #{$0} [options] -e [command] [path]"
9
+ opts.banner = "Usage: #{$0} [options] -e [command] [paths to watch]"
10
10
 
11
11
  opts.on('-e', '--execute [COMMAND]', 'The command to execute.') do |command|
12
12
  options[:command] = command
@@ -26,7 +26,7 @@ class Kicker
26
26
  argv = argv.dup
27
27
  options = { :growl => true }
28
28
  OPTION_PARSER.call(options).parse!(argv)
29
- options[:path] = argv.first
29
+ options[:paths] = argv
30
30
  options
31
31
  end
32
32
 
@@ -45,37 +45,25 @@ class Kicker
45
45
  end
46
46
 
47
47
  attr_writer :command
48
- attr_reader :path, :file
48
+ attr_reader :paths
49
49
  attr_accessor :use_growl, :growl_command
50
50
 
51
51
  def initialize(options)
52
- self.path = options[:path] if options[:path]
52
+ @paths = options[:paths].map { |path| File.expand_path(path) }
53
53
  @command = options[:command]
54
54
  @use_growl = options[:growl]
55
55
  @growl_command = options[:growl_command]
56
56
  end
57
57
 
58
- def path=(path)
59
- @path = File.expand_path(path)
60
- @file, @path = @path, File.dirname(@path) unless File.directory?(@path)
61
- end
62
-
63
58
  def start
64
59
  validate_options!
65
60
 
66
- log "Watching for changes on `#{file || path}'"
61
+ log "Watching for changes on: #{@paths.join(', ')}"
67
62
  log "With command: #{command}"
68
63
  log ''
69
64
 
70
- watch_dog = Rucola::FSEvents.start_watching(path) { |events| process(events) }
71
-
72
- trap('INT') do
73
- log "Cleaning up…"
74
- watch_dog.stop
75
- exit
76
- end
77
-
78
- Growl::Notifier.sharedInstance.register('Kicker', Kicker::GROWL_NOTIFICATIONS.values) if @use_growl
65
+ run_watch_dog!
66
+ start_growl! if @use_growl
79
67
 
80
68
  OSX.CFRunLoopRun
81
69
  end
@@ -84,33 +72,33 @@ class Kicker
84
72
  "sh -c #{@command.inspect}"
85
73
  end
86
74
 
87
- def process(events)
88
- execute! unless file && !events.find { |e| e.last_modified_file == file }
75
+ private
76
+
77
+ def validate_options!
78
+ validate_paths_and_command!
79
+ validate_paths_exist!
89
80
  end
90
81
 
91
- def log(message)
92
- puts "[#{Time.now}] #{message}"
82
+ def validate_paths_and_command!
83
+ if @paths.empty? && @command.nil?
84
+ puts OPTION_PARSER.call(nil).help
85
+ exit
86
+ end
93
87
  end
94
88
 
95
- def execute!
96
- log "Change occured. Executing command:"
97
- growl(GROWL_NOTIFICATIONS[:change], 'Kicker: Change occured', 'Executing command') if @use_growl
98
-
99
- output = `#{command}`
100
- output.strip.split("\n").each { |line| log " #{line}" }
101
-
102
- log "Command #{last_command_succeeded? ? 'succeeded' : "failed (#{last_command_status})"}"
103
-
104
- if @use_growl
105
- if last_command_succeeded?
106
- callback = @growl_command.nil? ? GROWL_DEFAULT_CALLBACK : lambda { system(@growl_command) }
107
- growl(GROWL_NOTIFICATIONS[:succeeded], "Kicker: Command succeeded", output, &callback)
108
- else
109
- growl(GROWL_NOTIFICATIONS[:failed], "Kicker: Command failed (#{last_command_status})", output, &GROWL_DEFAULT_CALLBACK)
89
+ def validate_paths_exist!
90
+ @paths.each do |path|
91
+ unless File.exist?(path)
92
+ puts "The given path `#{path}' does not exist"
93
+ exit 1
110
94
  end
111
95
  end
112
96
  end
113
97
 
98
+ def log(message)
99
+ puts "[#{Time.now}] #{message}"
100
+ end
101
+
114
102
  def last_command_succeeded?
115
103
  $?.success?
116
104
  end
@@ -119,22 +107,45 @@ class Kicker
119
107
  $?.to_i
120
108
  end
121
109
 
122
- def validate_options!
123
- validate_path_and_command!
124
- validate_path_exists!
110
+ def start_growl!
111
+ Growl::Notifier.sharedInstance.register('Kicker', Kicker::GROWL_NOTIFICATIONS.values)
125
112
  end
126
113
 
127
- def validate_path_and_command!
128
- unless @path && @command
129
- puts OPTION_PARSER.call(nil).help
114
+ def run_watch_dog!
115
+ dirs = @paths.map { |path| File.directory?(path) ? path : File.dirname(path) }
116
+ watch_dog = Rucola::FSEvents.start_watching(*dirs) { |events| process(events) }
117
+
118
+ trap('INT') do
119
+ log "Cleaning up…"
120
+ watch_dog.stop
130
121
  exit
131
122
  end
132
123
  end
133
124
 
134
- def validate_path_exists!
135
- unless File.exist?(@path)
136
- puts "The given path `#{@path}' does not exist"
137
- exit 1
125
+ def process(events)
126
+ events.each do |event|
127
+ @paths.each do |path|
128
+ return execute! if event.last_modified_file =~ /^#{path}/
129
+ end
130
+ end
131
+ end
132
+
133
+ def execute!
134
+ log "Change occured. Executing command:"
135
+ growl(GROWL_NOTIFICATIONS[:change], 'Kicker: Change occured', 'Executing command') if @use_growl
136
+
137
+ output = `#{command}`
138
+ output.strip.split("\n").each { |line| log " #{line}" }
139
+
140
+ log "Command #{last_command_succeeded? ? 'succeeded' : "failed (#{last_command_status})"}"
141
+
142
+ if @use_growl
143
+ if last_command_succeeded?
144
+ callback = @growl_command.nil? ? GROWL_DEFAULT_CALLBACK : lambda { system(@growl_command) }
145
+ growl(GROWL_NOTIFICATIONS[:succeeded], "Kicker: Command succeeded", output, &callback)
146
+ else
147
+ growl(GROWL_NOTIFICATIONS[:failed], "Kicker: Command failed (#{last_command_status})", output, &GROWL_DEFAULT_CALLBACK)
148
+ end
138
149
  end
139
150
  end
140
151
  end
data/test/kicker_test.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
3
  describe "Kicker.parse_options" do
4
- it "should parse the path" do
5
- Kicker.parse_options(['/some/file.rb'])[:path].should == '/some/file.rb'
4
+ it "should parse the paths" do
5
+ Kicker.parse_options(%w{ /some/file.rb })[:paths].should == %w{ /some/file.rb }
6
+ Kicker.parse_options(%w{ /some/file.rb /a/dir /and/some/other/file.rb })[:paths].should ==
7
+ %w{ /some/file.rb /a/dir /and/some/other/file.rb }
6
8
  end
7
9
 
8
10
  it "should parse the command" do
@@ -22,41 +24,30 @@ end
22
24
 
23
25
  describe "Kicker, when initializing" do
24
26
  before do
25
- @kicker = Kicker.new(:path => '/some/dir', :command => 'ls -l')
27
+ @kicker = Kicker.new(:paths => %w{ /some/dir a/relative/path }, :command => 'ls -l')
26
28
  end
27
29
 
28
- it "should return the path to watch" do
29
- File.stubs(:directory?).with('/some/dir').returns(true)
30
- Kicker.new(:path => '/some/dir').path.should == '/some/dir'
30
+ it "should return the extended paths to watch" do
31
+ @kicker.paths.should == ['/some/dir', File.expand_path('a/relative/path')]
31
32
  end
32
33
 
33
34
  it "should return the command to execute once a change occurs" do
34
- Kicker.new(:command => 'ls -l').command.should == 'sh -c "ls -l"'
35
- end
36
-
37
- it "should return the dirname of the path if the given path is a file" do
38
- File.stubs(:directory?).with('/some/file.rb').returns(false)
39
- Kicker.new(:path => '/some/file.rb').path.should == '/some'
40
- end
41
-
42
- it "should return the path to the file if the given path is a file" do
43
- @kicker = Kicker.new(:path => '/some/file.rb', :command => 'ls -l')
44
- @kicker.file.should == '/some/file.rb'
35
+ @kicker.command.should == 'sh -c "ls -l"'
45
36
  end
46
37
  end
47
38
 
48
39
  describe "Kicker, when starting" do
49
40
  before do
50
- @kicker = Kicker.new(:path => '/some/file.rb', :command => 'ls -l')
41
+ @kicker = Kicker.new(:paths => %w{ /some/file.rb }, :command => 'ls -l')
51
42
  @kicker.stubs(:log)
52
43
  Rucola::FSEvents.stubs(:start_watching)
53
44
  OSX.stubs(:CFRunLoopRun)
54
45
  end
55
46
 
56
- it "should show the usage banner when path and command are nil and exit" do
57
- @kicker.instance_variable_set("@path", nil)
47
+ it "should show the usage banner and exit when there are no paths and a command" do
48
+ @kicker.instance_variable_set("@paths", [])
58
49
  @kicker.command = nil
59
- @kicker.stubs(:validate_path_exists!)
50
+ @kicker.stubs(:validate_paths_exist!)
60
51
 
61
52
  Kicker::OPTION_PARSER.stubs(:call).returns(mock('OptionParser', :help => 'help'))
62
53
  @kicker.expects(:puts).with("help")
@@ -65,17 +56,25 @@ describe "Kicker, when starting" do
65
56
  @kicker.start
66
57
  end
67
58
 
68
- it "should warn the user if the given path doesn't exist and exit" do
69
- @kicker.expects(:puts).with("The given path `#{@kicker.path}' does not exist")
59
+ it "should warn the user and exit if any of the given paths doesn't exist" do
60
+ @kicker.expects(:puts).with("The given path `/some/file.rb' does not exist")
70
61
  @kicker.expects(:exit).with(1)
71
62
 
72
63
  @kicker.start
73
64
  end
74
65
 
75
- it "should start a FSEvents stream with a block which calls #process with the events" do
66
+ it "should start a FSEvents stream which watches all paths, but the dirnames of paths if they're files" do
67
+ @kicker.stubs(:validate_options!)
68
+ File.stubs(:directory?).with('/some/file.rb').returns(false)
69
+
70
+ Rucola::FSEvents.expects(:start_watching).with('/some')
71
+ @kicker.start
72
+ end
73
+
74
+ it "should start a FSEvents stream with a block which calls #process with any generated events" do
76
75
  @kicker.stubs(:validate_options!)
77
76
 
78
- Rucola::FSEvents.expects(:start_watching).with(@kicker.path).yields(['event'])
77
+ Rucola::FSEvents.expects(:start_watching).yields(['event'])
79
78
  @kicker.expects(:process).with(['event'])
80
79
 
81
80
  @kicker.start
@@ -120,40 +119,38 @@ end
120
119
 
121
120
  describe "Kicker, when a change occurs" do
122
121
  before do
123
- File.stubs(:directory?).returns(false)
124
122
  Kicker.any_instance.stubs(:last_command_succeeded?).returns(true)
125
123
  Kicker.any_instance.stubs(:log)
126
- @kicker = Kicker.new(:path => '/some/file.rb', :command => 'ls -l')
124
+ @kicker = Kicker.new(:paths => %w{ /some/file.rb /some/dir }, :command => 'ls -l')
127
125
  end
128
126
 
129
- it "should execute the command if a change occured to the watched file" do
130
- event = mock('Rucola::FSEvents::Event', :last_modified_file => '/some/file.rb')
127
+ it "should execute the command if a change occured to a watched path which is a file" do
128
+ event = stub('Event', :last_modified_file => '/some/file.rb')
131
129
 
132
130
  @kicker.expects(:`).with(@kicker.command).returns('')
133
- @kicker.process([event])
131
+ @kicker.send(:process, [event])
134
132
  end
135
133
 
136
- it "should _not_ execute the command if a change occured to another file than the one being watched" do
137
- event = mock('Rucola::FSEvents::Event', :last_modified_file => '/some/other_file.rb')
134
+ it "should execute the command if a change occured to some file in watched path which is a directory" do
135
+ event = stub('Event', :last_modified_file => '/some/dir/with/file.rb')
138
136
 
139
- @kicker.expects(:`).never
140
- @kicker.process([event])
137
+ @kicker.expects(:`).with(@kicker.command).returns('')
138
+ @kicker.send(:process, [event])
141
139
  end
142
140
 
143
- it "should execute the command if a change occured in the watched directory" do
144
- File.stubs(:directory?).returns(true)
145
- kicker = Kicker.new(:path => '/some/dir', :command => 'ls -l')
146
- event = mock('Rucola::FSEvents::Event')
141
+ it "should _not_ execute the command if a change occured to a file that isn't being watched" do
142
+ event1 = stub('Event', :last_modified_file => '/some/other_file.rb')
143
+ event2 = stub('Event', :last_modified_file => '/some/not/watched/dir/with/file.rb')
147
144
 
148
- kicker.expects(:`).with(kicker.command).returns('')
149
- kicker.process([event])
145
+ @kicker.expects(:`).never
146
+ @kicker.send(:process, [event1, event2])
150
147
  end
151
148
  end
152
149
 
153
150
  describe "Kicker, in general" do
154
151
  before do
155
152
  Kicker.any_instance.stubs(:last_command_succeeded?).returns(true)
156
- @kicker = Kicker.new(:path => '/some/dir', :command => 'ls -l')
153
+ @kicker = Kicker.new(:paths => %w{ /some/dir }, :command => 'ls -l')
157
154
  end
158
155
 
159
156
  it "should print a log entry with timestamp" do
@@ -161,7 +158,7 @@ describe "Kicker, in general" do
161
158
  Time.stubs(:now).returns(now)
162
159
 
163
160
  @kicker.expects(:puts).with("[#{now}] the message")
164
- @kicker.log('the message')
161
+ @kicker.send(:log, 'the message')
165
162
  end
166
163
 
167
164
  it "should log the output of the command indented by 2 spaces and whether or not the command succeeded" do
@@ -171,7 +168,7 @@ describe "Kicker, in general" do
171
168
  @kicker.expects(:log).with(' line 1')
172
169
  @kicker.expects(:log).with(' line 2')
173
170
  @kicker.expects(:log).with('Command succeeded')
174
- @kicker.execute!
171
+ @kicker.send(:execute!)
175
172
 
176
173
  @kicker.stubs(:last_command_succeeded?).returns(false)
177
174
  @kicker.stubs(:last_command_status).returns(123)
@@ -179,7 +176,7 @@ describe "Kicker, in general" do
179
176
  @kicker.expects(:log).with(' line 1')
180
177
  @kicker.expects(:log).with(' line 2')
181
178
  @kicker.expects(:log).with('Command failed (123)')
182
- @kicker.execute!
179
+ @kicker.send(:execute!)
183
180
  end
184
181
 
185
182
  it "should send the Growl messages with the default click callback" do
@@ -192,13 +189,13 @@ describe "Kicker, in general" do
192
189
 
193
190
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:change], 'Kicker: Change occured', 'Executing command')
194
191
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:succeeded], 'Kicker: Command succeeded', "line 1\nline 2").yields
195
- @kicker.execute!
192
+ @kicker.send(:execute!)
196
193
 
197
194
  @kicker.stubs(:last_command_succeeded?).returns(false)
198
195
  @kicker.stubs(:last_command_status).returns(123)
199
196
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:change], 'Kicker: Change occured', 'Executing command')
200
197
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:failed], 'Kicker: Command failed (123)', "line 1\nline 2").yields
201
- @kicker.execute!
198
+ @kicker.send(:execute!)
202
199
  end
203
200
 
204
201
  it "should send the Growl messages with a click callback which executes the specified growl command when succeeded" do
@@ -213,12 +210,12 @@ describe "Kicker, in general" do
213
210
 
214
211
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:change], 'Kicker: Change occured', 'Executing command')
215
212
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:succeeded], 'Kicker: Command succeeded', "line 1\nline 2").yields
216
- @kicker.execute!
213
+ @kicker.send(:execute!)
217
214
 
218
215
  @kicker.stubs(:last_command_succeeded?).returns(false)
219
216
  @kicker.stubs(:last_command_status).returns(123)
220
217
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:change], 'Kicker: Change occured', 'Executing command')
221
218
  @kicker.expects(:growl).with(Kicker::GROWL_NOTIFICATIONS[:failed], 'Kicker: Command failed (123)', "line 1\nline 2").yields
222
- @kicker.execute!
219
+ @kicker.send(:execute!)
223
220
  end
224
221
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alloy-kicker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -9,46 +9,36 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-14 00:00:00 -07:00
13
- default_executable: kicker
12
+ date: 2009-04-12 00:00:00 -07:00
13
+ default_executable:
14
14
  dependencies: []
15
15
 
16
16
  description:
17
17
  email: eloy.de.enige@gmail.com
18
18
  executables:
19
19
  - kicker
20
+ - kicker
20
21
  extensions: []
21
22
 
22
23
  extra_rdoc_files:
23
- - README.rdoc
24
24
  - LICENSE
25
+ - README.rdoc
25
26
  files:
26
- - bin
27
- - bin/kicker
28
- - kicker.gemspec
29
- - lib
30
- - lib/kicker.rb
31
27
  - LICENSE
32
- - pkg
33
- - pkg/kicker-0.1.0.gem
34
- - pkg/kicker-0.1.1.gem
35
- - Rakefile
36
28
  - README.rdoc
37
- - test
29
+ - Rakefile
30
+ - VERSION.yml
31
+ - bin/kicker
32
+ - lib/kicker.rb
38
33
  - test/kicker_test.rb
39
34
  - test/test_helper.rb
40
- - vendor
41
- - vendor/growlnotifier
42
35
  - vendor/growlnotifier/growl.rb
43
36
  - vendor/growlnotifier/growl_helpers.rb
44
- - vendor/rucola
45
37
  - vendor/rucola/fsevents.rb
46
- - VERSION.yml
47
38
  has_rdoc: true
48
39
  homepage: http://github.com/alloy/kicker
49
40
  post_install_message:
50
41
  rdoc_options:
51
- - --inline-source
52
42
  - --charset=UTF-8
53
43
  require_paths:
54
44
  - vendor
@@ -71,5 +61,6 @@ rubygems_version: 1.2.0
71
61
  signing_key:
72
62
  specification_version: 2
73
63
  summary: A simple OS X CLI tool which uses FSEvents to run a given shell command.
74
- test_files: []
75
-
64
+ test_files:
65
+ - test/kicker_test.rb
66
+ - test/test_helper.rb
data/kicker.gemspec DELETED
@@ -1,31 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{kicker}
5
- s.version = "1.0.0"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Eloy Duran"]
9
- s.date = %q{2009-03-14}
10
- s.default_executable = %q{kicker}
11
- s.email = %q{eloy.de.enige@gmail.com}
12
- s.executables = ["kicker"]
13
- s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
14
- s.files = ["bin", "bin/kicker", "kicker.gemspec", "lib", "lib/kicker.rb", "LICENSE", "pkg", "pkg/kicker-0.1.0.gem", "pkg/kicker-0.1.1.gem", "Rakefile", "README.rdoc", "test", "test/kicker_test.rb", "test/test_helper.rb", "vendor", "vendor/growlnotifier", "vendor/growlnotifier/growl.rb", "vendor/growlnotifier/growl_helpers.rb", "vendor/rucola", "vendor/rucola/fsevents.rb", "VERSION.yml"]
15
- s.has_rdoc = true
16
- s.homepage = %q{http://github.com/alloy/kicker}
17
- s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
18
- s.require_paths = ["vendor"]
19
- s.rubygems_version = %q{1.3.1}
20
- s.summary = %q{A simple OS X CLI tool which uses FSEvents to run a given shell command.}
21
-
22
- if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
- s.specification_version = 2
25
-
26
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
- else
28
- end
29
- else
30
- end
31
- end