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 +11 -6
- data/Rakefile +10 -2
- data/VERSION.yml +2 -2
- data/lib/kicker.rb +59 -48
- data/test/kicker_test.rb +45 -48
- metadata +12 -21
- data/kicker.gemspec +0 -31
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
|
-
|
8
|
-
|
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] [
|
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 "
|
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 "
|
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
|
15
|
+
gem.files.concat FileList['vendor/**/*']
|
15
16
|
gem.require_paths = ['vendor']
|
16
|
-
gem.has_rdoc =
|
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
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] [
|
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[:
|
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 :
|
48
|
+
attr_reader :paths
|
49
49
|
attr_accessor :use_growl, :growl_command
|
50
50
|
|
51
51
|
def initialize(options)
|
52
|
-
|
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
|
61
|
+
log "Watching for changes on: #{@paths.join(', ')}"
|
67
62
|
log "With command: #{command}"
|
68
63
|
log ''
|
69
64
|
|
70
|
-
|
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
|
-
|
88
|
-
|
75
|
+
private
|
76
|
+
|
77
|
+
def validate_options!
|
78
|
+
validate_paths_and_command!
|
79
|
+
validate_paths_exist!
|
89
80
|
end
|
90
81
|
|
91
|
-
def
|
92
|
-
|
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
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
123
|
-
|
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
|
128
|
-
|
129
|
-
|
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
|
135
|
-
|
136
|
-
|
137
|
-
|
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
|
5
|
-
Kicker.parse_options(
|
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(:
|
27
|
+
@kicker = Kicker.new(:paths => %w{ /some/dir a/relative/path }, :command => 'ls -l')
|
26
28
|
end
|
27
29
|
|
28
|
-
it "should return the
|
29
|
-
|
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
|
-
|
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(:
|
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
|
57
|
-
@kicker.instance_variable_set("@
|
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(:
|
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
|
69
|
-
@kicker.expects(:puts).with("The given path
|
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
|
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).
|
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(:
|
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
|
130
|
-
event =
|
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
|
131
|
+
@kicker.send(:process, [event])
|
134
132
|
end
|
135
133
|
|
136
|
-
it "should
|
137
|
-
event =
|
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(:`).
|
140
|
-
@kicker.process
|
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
|
144
|
-
|
145
|
-
|
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(:`).
|
149
|
-
kicker.process
|
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(:
|
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
|
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.
|
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-
|
13
|
-
default_executable:
|
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
|
-
-
|
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
|