alloy-kicker 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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