rerun 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +46 -7
- data/Rakefile +7 -0
- data/lib/rerun.rb +1 -0
- data/lib/rerun/notification.rb +64 -0
- data/lib/rerun/options.rb +27 -7
- data/lib/rerun/runner.rb +46 -21
- data/lib/rerun/system.rb +2 -24
- data/lib/rerun/watcher.rb +2 -9
- data/rerun.gemspec +2 -2
- metadata +6 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a237bdcfe8672bdd765c6a480fbd397e30f0fc45
|
4
|
+
data.tar.gz: 46a4241842ffad57cfdb560bf2b7da0088f35c47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3abd42a820c468ae5c5ac50095a888106967e0c64dfe4bdb4c8aca3adef2ce84e85262278a7c9c5382a276437c359de5f875b578da7624c001b2b0d4d7c5d458
|
7
|
+
data.tar.gz: 20964c0461cb634bbe11ea931b2eb25d740e4dd228c6a6e8ab18cdf6e2a368376b8e47c3614a073385323856d0ad6238db5031cfb3fbc732415c7fce5d4f9f38
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Rerun's advantage is its simple design. Since it uses `exec` and the standard
|
|
14
14
|
Unix `SIGINT` and `SIGKILL` signals, you're sure the restarted app is really
|
15
15
|
acting just like it was when you ran it from the command line the first time.
|
16
16
|
|
17
|
-
By default
|
17
|
+
By default it watches files ending in: `rb,js,coffee,css,scss,sass,erb,html,haml,ru,yml,slim,md,feature`.
|
18
18
|
Use the `--pattern` option if you want to change this.
|
19
19
|
|
20
20
|
As of version 0.7.0, we use the Listen gem, which tries to use your OS's
|
@@ -116,7 +116,7 @@ Procfile processes locally and restart them all when necessary.
|
|
116
116
|
`--dir` directory (or directories) to watch (default = "."). Separate multiple paths with ',' and/or use multiple `-d` options.
|
117
117
|
|
118
118
|
`--pattern` glob to match inside directory. This uses the Ruby Dir glob style -- see <http://www.ruby-doc.org/core/classes/Dir.html#M002322> for details.
|
119
|
-
By default it watches files ending in: `rb,js,css,
|
119
|
+
By default it watches files ending in: `rb,js,coffee,css,scss,sass,erb,html,haml,ru,yml,slim,md,feature`.
|
120
120
|
On top of this, it also ignores dotfiles, `.tmp` files, and some other files and directories (like `.git` and `log`).
|
121
121
|
Run `rerun --help` to see the actual list.
|
122
122
|
|
@@ -125,31 +125,44 @@ Run `rerun --help` to see the actual list.
|
|
125
125
|
|
126
126
|
*On top of --pattern and --ignore, we ignore any changes to files and dirs starting with a dot.*
|
127
127
|
|
128
|
-
`--signal` (or
|
128
|
+
`--signal` (or `-s`) use specified signal (instead of the default SIGTERM) to terminate the previous process.
|
129
129
|
This may be useful for forcing the respective process to terminate as quickly as possible.
|
130
130
|
(`--signal KILL` is the equivalent of `kill -9`)
|
131
131
|
|
132
|
+
`--restart` (or `-r`) expect process to restart itself, using signal HUP by default
|
133
|
+
(e.g. `-r -s INT` will send a INT and then resume watching for changes)
|
134
|
+
|
132
135
|
`--clear` (or -c) clear the screen before each run
|
133
136
|
|
134
137
|
`--exit` (or -x) expect the program to exit. With this option, rerun checks the return value; without it, rerun checks that the launched process is still running.
|
135
138
|
|
136
139
|
`--background` (or -b) disable on-the-fly commands, allowing the process to be backgrounded
|
137
140
|
|
138
|
-
`--
|
141
|
+
`--notify NOTIFIER` use `growl` or `osx` for notifications (see below)
|
142
|
+
|
143
|
+
`--no-notify` don't use growl (or osx) notifications
|
139
144
|
|
140
145
|
`--name` set the app name (for display)
|
141
146
|
|
142
147
|
Also `--version` and `--help`, naturally.
|
143
148
|
|
144
|
-
#
|
149
|
+
# Notifications
|
145
150
|
|
146
151
|
If you have `growlnotify` available on the `PATH`, it sends notifications to
|
147
|
-
growl in addition to the console.
|
148
|
-
|
152
|
+
growl in addition to the console.
|
153
|
+
If you have `terminal-notifier`, it sends notifications to
|
154
|
+
the OS X notification center in addition to the console.
|
155
|
+
|
156
|
+
If you have both, Rerun will pick one, or you can choose between them using `--notify growl` or `--notify osx` respectively.
|
157
|
+
|
158
|
+
If you have a notifier installed but don't want rerun to use it,
|
159
|
+
set the `--no-notify` option.
|
149
160
|
|
150
161
|
Download [growlnotify here](http://growl.info/downloads.php#generaldownloads)
|
151
162
|
now that Growl has moved to the App Store.
|
152
163
|
|
164
|
+
Install [terminal-notifier](https://github.com/julienXX/terminal-notifier) using `gem install terminal-notifier`. (You may have to put it in your system gemset and/or use `sudo` too.) Using Homebrew to install terminal-notifier is not recommended.
|
165
|
+
|
153
166
|
# On-The-Fly Commands
|
154
167
|
|
155
168
|
While the app is (re)running, you can make things happen by pressing keys:
|
@@ -174,6 +187,21 @@ This seems like the most gentle and unixy way of doing things, but it does
|
|
174
187
|
mean that if your program ignores SIGTERM, it takes an extra 4 to 6 seconds to
|
175
188
|
restart.
|
176
189
|
|
190
|
+
# Troubleshooting
|
191
|
+
If you are using `zsh` as your shell, and you are specifying your `--pattern` as `**/*.rb`, you may face this error
|
192
|
+
```
|
193
|
+
Errno::EACCES: Permission denied - <filename>
|
194
|
+
```
|
195
|
+
This is because `**/*.rb` gets expanded into the command by `zsh` instead of passing it through to rerun. The solution is to simply quote ('' or "") the pattern.
|
196
|
+
i.e
|
197
|
+
```
|
198
|
+
rerun -p **/*.rb rake test
|
199
|
+
```
|
200
|
+
becomes
|
201
|
+
```
|
202
|
+
rerun -p "**/*.rb" rake test
|
203
|
+
```
|
204
|
+
|
177
205
|
# To Do:
|
178
206
|
|
179
207
|
## Must have for v1.0
|
@@ -186,6 +214,7 @@ restart.
|
|
186
214
|
* If the last element of the command is a `.ru` file and there's no other command then use `rackup`
|
187
215
|
* Figure out an algorithm so "-x" is not needed (if possible) -- maybe by accepting a "--port" option or reading `config.ru`
|
188
216
|
* Specify (or deduce) port to listen for to determine success of a web server launch
|
217
|
+
* see also [todo.md](todo.md)
|
189
218
|
|
190
219
|
## Wacky Ideas
|
191
220
|
* Make it work on Windows, like Guard now does. See
|
@@ -289,9 +318,19 @@ Based upon and/or inspired by:
|
|
289
318
|
* <https://github.com/FND>
|
290
319
|
* Barry Sia <https://github.com/bsia>
|
291
320
|
* Paul Rangel <https://github.com/ismell>
|
321
|
+
* James Edward Gray II <https://github.com/JEG2>
|
322
|
+
* Raul E Rangel <https://github.com/ismell> and Antonio Terceiro <https://github.com/terceiro>
|
323
|
+
* Mike Pastore <https://github.com/mwpastore>
|
292
324
|
|
293
325
|
# Version History
|
294
326
|
|
327
|
+
* 0.11.0 7 October 2015
|
328
|
+
* better 'changed' message
|
329
|
+
* `--notify osx` option
|
330
|
+
* `--restart` option (with bugfix by Mike Pastore)
|
331
|
+
* use Listen 3 gem
|
332
|
+
* add `.feature` files to default watchlist (thanks @jmuheim)
|
333
|
+
|
295
334
|
* v0.10.0 4 May 2014
|
296
335
|
* add '.coffee,.slim,.md' to default pattern (thanks @xylinq)
|
297
336
|
* --ignore option
|
data/Rakefile
CHANGED
@@ -73,3 +73,10 @@ task 'release' => [:check_git, package('.gem'), package('.tar.gz')] do |t|
|
|
73
73
|
sh "git tag v#{$spec.version}"
|
74
74
|
sh "git push && git push --tags"
|
75
75
|
end
|
76
|
+
|
77
|
+
desc 'download github issues and pull requests'
|
78
|
+
task 'github' do
|
79
|
+
%w(issues pulls).each do |type|
|
80
|
+
sh "curl -o #{type}.json https://api.github.com/repos/alexch/rerun/#{type}"
|
81
|
+
end
|
82
|
+
end
|
data/lib/rerun.rb
CHANGED
@@ -0,0 +1,64 @@
|
|
1
|
+
# todo: unit tests
|
2
|
+
|
3
|
+
module Rerun
|
4
|
+
class Notification
|
5
|
+
include System
|
6
|
+
|
7
|
+
attr_reader :title, :body, :options
|
8
|
+
|
9
|
+
def initialize(title, body, options = Options::DEFAULTS.dup)
|
10
|
+
@title = title
|
11
|
+
@body = body
|
12
|
+
@options = options
|
13
|
+
end
|
14
|
+
|
15
|
+
def command
|
16
|
+
return unless mac?
|
17
|
+
|
18
|
+
# todo: strategy or subclass
|
19
|
+
|
20
|
+
s = nil
|
21
|
+
|
22
|
+
if options[:notify] == true or options[:notify] == "growl"
|
23
|
+
if (cmd = command_named("growlnotify"))
|
24
|
+
# todo: check version of growlnotify and warn if it's too old
|
25
|
+
icon_str = ("--image \"#{icon}\"" if icon)
|
26
|
+
s = "#{cmd} -n \"#{app_name}\" -m \"#{body}\" \"#{app_name} #{title}\" #{icon_str}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
if s.nil? and options[:notify] == true or options[:notify] == "osx"
|
31
|
+
if (cmd = command_named("terminal-notifier"))
|
32
|
+
icon_str = ("-appIcon \"#{icon}\"" if icon)
|
33
|
+
s = "#{cmd} -title \"#{app_name}\" -message \"#{body}\" \"#{app_name} #{title}\" #{icon_str}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
s
|
38
|
+
end
|
39
|
+
|
40
|
+
def command_named(name)
|
41
|
+
path = `which #{name}`.chomp
|
42
|
+
path.empty? ? nil : path
|
43
|
+
end
|
44
|
+
|
45
|
+
def send(background = true)
|
46
|
+
return unless command
|
47
|
+
`#{command}#{" &" if background}`
|
48
|
+
end
|
49
|
+
|
50
|
+
def app_name
|
51
|
+
options[:name]
|
52
|
+
end
|
53
|
+
|
54
|
+
def icon
|
55
|
+
"#{icon_dir}/rails_red_sml.png" if rails?
|
56
|
+
end
|
57
|
+
|
58
|
+
def icon_dir
|
59
|
+
here = File.expand_path(File.dirname(__FILE__))
|
60
|
+
File.expand_path("#{here}/../../icons")
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
data/lib/rerun/options.rb
CHANGED
@@ -8,19 +8,25 @@ $spec = Gem::Specification.load(File.join(libdir, "..", "rerun.gemspec"))
|
|
8
8
|
|
9
9
|
module Rerun
|
10
10
|
class Options
|
11
|
-
DEFAULT_PATTERN = "**/*.{rb,js,coffee,css,scss,sass,erb,html,haml,ru,yml,slim,md}"
|
11
|
+
DEFAULT_PATTERN = "**/*.{rb,js,coffee,css,scss,sass,erb,html,haml,ru,yml,slim,md,feature}"
|
12
12
|
DEFAULT_DIRS = ["."]
|
13
13
|
|
14
14
|
DEFAULTS = {
|
15
15
|
:pattern => DEFAULT_PATTERN,
|
16
16
|
:signal => "TERM",
|
17
|
-
:
|
17
|
+
:notify => true,
|
18
18
|
:name => Pathname.getwd.basename.to_s.capitalize,
|
19
|
-
:ignore => []
|
19
|
+
:ignore => [],
|
20
|
+
:dir => DEFAULT_DIRS
|
20
21
|
}
|
21
22
|
|
22
23
|
def self.parse args = ARGV
|
23
|
-
|
24
|
+
|
25
|
+
default_options = DEFAULTS.dup
|
26
|
+
options = {
|
27
|
+
ignore: []
|
28
|
+
}
|
29
|
+
|
24
30
|
opts = OptionParser.new("", 24, ' ') do |opts|
|
25
31
|
opts.banner = "Usage: rerun [options] [--] cmd"
|
26
32
|
|
@@ -49,6 +55,11 @@ module Rerun
|
|
49
55
|
options[:signal] = signal
|
50
56
|
end
|
51
57
|
|
58
|
+
opts.on("-r", "--restart", "expect process to restart itself (uses the HUP signal unless overridden using --signal)") do |signal|
|
59
|
+
options[:restart] = true
|
60
|
+
default_options[:signal] = "HUP"
|
61
|
+
end
|
62
|
+
|
52
63
|
opts.on("-c", "--clear", "clear screen before each run") do
|
53
64
|
options[:clear] = true
|
54
65
|
end
|
@@ -65,8 +76,15 @@ module Rerun
|
|
65
76
|
options[:name] = name
|
66
77
|
end
|
67
78
|
|
68
|
-
opts.on("--no-growl", "don't use growl") do
|
79
|
+
opts.on("--no-growl", "don't use growl [OBSOLETE]") do
|
69
80
|
options[:growl] = false
|
81
|
+
$stderr.puts "--no-growl is obsolete; use --no-notify instead"
|
82
|
+
return
|
83
|
+
end
|
84
|
+
|
85
|
+
opts.on("--[no-]notify [notifier]", "send messages through growl (requires growlnotify) or osx (requires terminal-notifier gem)") do |notifier|
|
86
|
+
notifier = true if notifier.nil?
|
87
|
+
options[:notify] = notifier
|
70
88
|
end
|
71
89
|
|
72
90
|
opts.on_tail("-h", "--help", "--usage", "show this message") do
|
@@ -89,8 +107,10 @@ module Rerun
|
|
89
107
|
nil
|
90
108
|
else
|
91
109
|
opts.parse! args
|
92
|
-
|
93
|
-
|
110
|
+
default_options[:cmd] = args.join(" ")
|
111
|
+
|
112
|
+
options = default_options.merge(options)
|
113
|
+
|
94
114
|
options
|
95
115
|
end
|
96
116
|
end
|
data/lib/rerun/runner.rb
CHANGED
@@ -60,8 +60,12 @@ module Rerun
|
|
60
60
|
|
61
61
|
def restart
|
62
62
|
@restarting = true
|
63
|
-
|
64
|
-
|
63
|
+
if @options[:restart]
|
64
|
+
restart_with_signal(@options[:signal])
|
65
|
+
else
|
66
|
+
stop
|
67
|
+
start
|
68
|
+
end
|
65
69
|
@restarting = false
|
66
70
|
end
|
67
71
|
|
@@ -75,7 +79,7 @@ module Rerun
|
|
75
79
|
@watcher.pause
|
76
80
|
@pausing = true
|
77
81
|
else
|
78
|
-
say "Resuming"
|
82
|
+
say "Resuming."
|
79
83
|
@watcher.unpause
|
80
84
|
@pausing = false
|
81
85
|
end
|
@@ -113,19 +117,19 @@ module Rerun
|
|
113
117
|
@options[:name]
|
114
118
|
end
|
115
119
|
|
120
|
+
def restart_with_signal(restart_signal)
|
121
|
+
if @pid && (@pid != 0)
|
122
|
+
notify "restarting", "We will be with you shortly."
|
123
|
+
signal(restart_signal)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
116
127
|
def start
|
117
128
|
if windows?
|
118
129
|
raise "Sorry, Rerun does not work on Windows."
|
119
130
|
end
|
120
131
|
|
121
|
-
if
|
122
|
-
taglines = [
|
123
|
-
"To infinity... and beyond!",
|
124
|
-
"Charge!",
|
125
|
-
]
|
126
|
-
notify "launched", taglines[rand(taglines.size)]
|
127
|
-
@already_running = true
|
128
|
-
else
|
132
|
+
if @already_running
|
129
133
|
taglines = [
|
130
134
|
"Here we go again!",
|
131
135
|
"Keep on trucking.",
|
@@ -133,6 +137,13 @@ module Rerun
|
|
133
137
|
"The road goes ever on and on, down from the door where it began.",
|
134
138
|
]
|
135
139
|
notify "restarted", taglines[rand(taglines.size)]
|
140
|
+
else
|
141
|
+
taglines = [
|
142
|
+
"To infinity... and beyond!",
|
143
|
+
"Charge!",
|
144
|
+
]
|
145
|
+
notify "launched", taglines[rand(taglines.size)]
|
146
|
+
@already_running = true
|
136
147
|
end
|
137
148
|
|
138
149
|
clear_screen if clear?
|
@@ -181,21 +192,35 @@ module Rerun
|
|
181
192
|
|
182
193
|
watcher = Watcher.new(:directory => dirs, :pattern => pattern, :ignore => ignore) do |changes|
|
183
194
|
|
184
|
-
message =
|
185
|
-
|
186
|
-
if count and count > 0
|
187
|
-
"#{count} #{change}"
|
188
|
-
end
|
189
|
-
end.compact.join(", ")
|
195
|
+
message = change_message(changes)
|
196
|
+
|
190
197
|
say "Change detected: #{message}"
|
191
198
|
restart unless @restarting
|
192
199
|
end
|
193
200
|
watcher.start
|
194
201
|
@watcher = watcher
|
195
202
|
say "Watching #{dir.join(', ')} for #{pattern}" +
|
196
|
-
(ignore.empty? ? "" : " (ignoring #{ignore.join(',')})")
|
197
|
-
|
203
|
+
(ignore.empty? ? "" : " (ignoring #{ignore.join(',')})")
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
def change_message(changes)
|
208
|
+
message = [:modified, :added, :removed].map do |change|
|
209
|
+
count = changes[change] ? changes[change].size : 0
|
210
|
+
if count > 0
|
211
|
+
"#{count} #{change}"
|
212
|
+
end
|
213
|
+
end.compact.join(", ")
|
214
|
+
|
215
|
+
changed_files = changes.values.flatten
|
216
|
+
if changed_files.count > 0
|
217
|
+
message += ": "
|
218
|
+
message += changes.values.flatten[0..3].map { |path| path.split('/').last }.join(', ')
|
219
|
+
if changed_files.count > 3
|
220
|
+
message += ", ..."
|
221
|
+
end
|
198
222
|
end
|
223
|
+
message
|
199
224
|
end
|
200
225
|
|
201
226
|
def die
|
@@ -257,8 +282,8 @@ module Rerun
|
|
257
282
|
@git_head = File.exists?(git_head_file) && File.read(git_head_file)
|
258
283
|
end
|
259
284
|
|
260
|
-
def notify(title, body)
|
261
|
-
|
285
|
+
def notify(title, body, background = true)
|
286
|
+
Notification.new(title, body, @options).send(background) if @options[:notify]
|
262
287
|
puts
|
263
288
|
say "#{app_name} #{title}"
|
264
289
|
end
|
data/lib/rerun/system.rb
CHANGED
@@ -13,31 +13,9 @@ module Rerun
|
|
13
13
|
RUBY_PLATFORM =~ /linux/i
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
def growl_available?
|
18
|
-
mac? && (growlcmd != "")
|
19
|
-
end
|
20
|
-
|
21
|
-
def growlcmd
|
22
|
-
growlnotify = `which growlnotify`.chomp
|
23
|
-
# todo: check version of growlnotify and warn if it's too old
|
24
|
-
growlnotify
|
25
|
-
end
|
26
|
-
|
27
|
-
def icon
|
28
|
-
here = File.expand_path(File.dirname(__FILE__))
|
29
|
-
icondir = File.expand_path("#{here}/../../icons")
|
16
|
+
def rails?
|
30
17
|
rails_sig_file = File.expand_path(".")+"/config/boot.rb"
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
def growl(title, body, background = true)
|
35
|
-
if growl_available?
|
36
|
-
icon_str = ("--image \"#{icon}\"" if icon)
|
37
|
-
s = "#{growlcmd} -n \"#{app_name}\" -m \"#{body}\" \"#{app_name} #{title}\" #{icon_str}"
|
38
|
-
s += " &" if background
|
39
|
-
`#{s}`
|
40
|
-
end
|
18
|
+
File.exists? rails_sig_file
|
41
19
|
end
|
42
20
|
|
43
21
|
end
|
data/lib/rerun/watcher.rb
CHANGED
@@ -85,13 +85,6 @@ module Rerun
|
|
85
85
|
[dotfiles] + @ignore.map { |x| Rerun::Glob.new(x).to_regexp }
|
86
86
|
end
|
87
87
|
|
88
|
-
def adapter
|
89
|
-
@listener.registry[:adapter] || (timeout(4) do
|
90
|
-
sleep 1 until adapter = @listener.registry[:adapter]
|
91
|
-
adapter
|
92
|
-
end)
|
93
|
-
end
|
94
|
-
|
95
88
|
# kill the file watcher thread
|
96
89
|
def stop
|
97
90
|
@thread.wakeup rescue ThreadError
|
@@ -115,11 +108,11 @@ module Rerun
|
|
115
108
|
end
|
116
109
|
|
117
110
|
def unpause
|
118
|
-
@listener.
|
111
|
+
@listener.start if @listener
|
119
112
|
end
|
120
113
|
|
121
114
|
def running?
|
122
|
-
@listener && @listener.
|
115
|
+
@listener && @listener.processing?
|
123
116
|
end
|
124
117
|
|
125
118
|
end
|
data/rerun.gemspec
CHANGED
@@ -3,7 +3,7 @@ $spec = Gem::Specification.new do |s|
|
|
3
3
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
4
4
|
|
5
5
|
s.name = 'rerun'
|
6
|
-
s.version = '0.
|
6
|
+
s.version = '0.11.0'
|
7
7
|
|
8
8
|
s.description = "Restarts your app when a file changes. A no-frills, command-line alternative to Guard, Shotgun, Autotest, etc."
|
9
9
|
s.summary = "Launches an app, and restarts it whenever the filesystem changes. A no-frills, command-line alternative to Guard, Shotgun, Autotest, etc."
|
@@ -25,7 +25,7 @@ $spec = Gem::Specification.new do |s|
|
|
25
25
|
|
26
26
|
s.extra_rdoc_files = %w[README.md]
|
27
27
|
|
28
|
-
s.add_runtime_dependency 'listen', '~>
|
28
|
+
s.add_runtime_dependency 'listen', '~> 3.0'
|
29
29
|
|
30
30
|
s.homepage = "http://github.com/alexch/rerun/"
|
31
31
|
s.require_paths = %w[lib]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rerun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Chaffee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: listen
|
@@ -16,20 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 2.7.3
|
19
|
+
version: '3.0'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 2.7.3
|
26
|
+
version: '3.0'
|
33
27
|
description: Restarts your app when a file changes. A no-frills, command-line alternative
|
34
28
|
to Guard, Shotgun, Autotest, etc.
|
35
29
|
email: alex@stinky.com
|
@@ -47,6 +41,7 @@ files:
|
|
47
41
|
- icons/rails_red_sml.png
|
48
42
|
- lib/rerun.rb
|
49
43
|
- lib/rerun/glob.rb
|
44
|
+
- lib/rerun/notification.rb
|
50
45
|
- lib/rerun/options.rb
|
51
46
|
- lib/rerun/runner.rb
|
52
47
|
- lib/rerun/system.rb
|
@@ -72,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
67
|
version: '0'
|
73
68
|
requirements: []
|
74
69
|
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
70
|
+
rubygems_version: 2.4.8
|
76
71
|
signing_key:
|
77
72
|
specification_version: 2
|
78
73
|
summary: Launches an app, and restarts it whenever the filesystem changes. A no-frills,
|