spring 1.3.6 → 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ require 'thread'
2
+
3
+ module Spring
4
+ class << self
5
+ def failsafe_thread
6
+ Thread.new {
7
+ begin
8
+ yield
9
+ rescue
10
+ end
11
+ }
12
+ end
13
+ end
14
+ end
@@ -10,7 +10,7 @@ module Spring
10
10
  def self.run(&block)
11
11
  updater = new(&block)
12
12
 
13
- Thread.new {
13
+ Spring.failsafe_thread {
14
14
  $0 = updater.value
15
15
  loop { $0 = updater.next }
16
16
  }
data/lib/spring/server.rb CHANGED
@@ -10,19 +10,24 @@ require "spring/commands"
10
10
 
11
11
  module Spring
12
12
  class Server
13
- def self.boot
14
- new.boot
13
+ def self.boot(options = {})
14
+ new(options).boot
15
15
  end
16
16
 
17
17
  attr_reader :env
18
18
 
19
- def initialize(env = Env.new)
20
- @env = env
21
- @applications = Hash.new { |h, k| h[k] = ApplicationManager.new(k) }
19
+ def initialize(options = {})
20
+ @foreground = options.fetch(:foreground, false)
21
+ @env = options[:env] || default_env
22
+ @applications = Hash.new { |h, k| h[k] = ApplicationManager.new(k, env) }
22
23
  @pidfile = env.pidfile_path.open('a')
23
24
  @mutex = Mutex.new
24
25
  end
25
26
 
27
+ def foreground?
28
+ @foreground
29
+ end
30
+
26
31
  def log(message)
27
32
  env.log "[server] #{message}"
28
33
  end
@@ -31,8 +36,8 @@ module Spring
31
36
  Spring.verify_environment
32
37
 
33
38
  write_pidfile
34
- set_pgid
35
- ignore_signals
39
+ set_pgid unless foreground?
40
+ ignore_signals unless foreground?
36
41
  set_exit_hook
37
42
  set_process_title
38
43
  start_server
@@ -42,6 +47,7 @@ module Spring
42
47
  server = UNIXServer.open(env.socket_name)
43
48
  log "started on #{env.socket_name}"
44
49
  loop { serve server.accept }
50
+ rescue Interrupt
45
51
  end
46
52
 
47
53
  def serve(client)
@@ -100,7 +106,7 @@ module Spring
100
106
  end
101
107
  end
102
108
 
103
- @applications.values.map { |a| Thread.new { a.stop } }.map(&:join)
109
+ @applications.values.map { |a| Spring.failsafe_thread { a.stop } }.map(&:join)
104
110
  end
105
111
 
106
112
  def write_pidfile
@@ -126,5 +132,19 @@ module Spring
126
132
  "spring server | #{env.app_name} | started #{distance} ago"
127
133
  }
128
134
  end
135
+
136
+ private
137
+
138
+ def default_env
139
+ Env.new(log_file: default_log_file)
140
+ end
141
+
142
+ def default_log_file
143
+ if foreground? && !ENV["SPRING_LOG"]
144
+ $stdout
145
+ else
146
+ nil
147
+ end
148
+ end
129
149
  end
130
150
  end
@@ -1,9 +1,8 @@
1
- # encoding: utf-8
2
-
3
1
  require "io/wait"
4
2
  require "timeout"
5
3
  require "spring/sid"
6
4
  require "spring/client"
5
+ require "active_support/core_ext/string/strip"
7
6
 
8
7
  module Spring
9
8
  module Test
@@ -29,6 +28,10 @@ module Spring
29
28
  @app ||= Spring::Test::Application.new("#{Spring::Test.root}/apps/tmp")
30
29
  end
31
30
 
31
+ def spring_env
32
+ app.spring_env
33
+ end
34
+
32
35
  def assert_output(artifacts, expected)
33
36
  expected.each do |stream, output|
34
37
  assert artifacts[stream].include?(output),
@@ -48,6 +51,14 @@ module Spring
48
51
  assert_output artifacts, expected_output if expected_output
49
52
  end
50
53
 
54
+ def refute_output_includes(command, not_expected)
55
+ artifacts = app.run(*Array(command))
56
+ not_expected.each do |stream, output|
57
+ assert !artifacts[stream].include?(output),
58
+ "expected #{stream} to not include '#{output}'.\n\n#{app.debug(artifacts)}"
59
+ end
60
+ end
61
+
51
62
  def assert_speedup(ratio = DEFAULT_SPEEDUP)
52
63
  if ENV['CI']
53
64
  yield
@@ -59,6 +70,14 @@ module Spring
59
70
  end
60
71
  end
61
72
 
73
+ def without_gem(name)
74
+ gem_home = app.gem_home.join('gems')
75
+ FileUtils.mv(gem_home.join(name), app.root)
76
+ yield
77
+ ensure
78
+ FileUtils.mv(app.root.join(name), gem_home)
79
+ end
80
+
62
81
  setup do
63
82
  generator.generate_if_missing
64
83
  generator.install_spring
@@ -77,6 +96,25 @@ module Spring
77
96
 
78
97
  test "help message when called without arguments" do
79
98
  assert_success "bin/spring", stdout: 'Usage: spring COMMAND [ARGS]'
99
+ assert spring_env.server_running?
100
+ end
101
+
102
+ test "shows help" do
103
+ assert_success "bin/spring help", stdout: 'Usage: spring COMMAND [ARGS]'
104
+ assert_success "bin/spring -h", stdout: 'Usage: spring COMMAND [ARGS]'
105
+ assert_success "bin/spring --help", stdout: 'Usage: spring COMMAND [ARGS]'
106
+ refute spring_env.server_running?
107
+ end
108
+
109
+ test "tells the user that spring is being used when used automatically via binstubs" do
110
+ assert_success "bin/rails runner ''", stderr: "Running via Spring preloader in process"
111
+ assert_success app.spring_test_command, stderr: "Running via Spring preloader in process"
112
+ end
113
+
114
+ test "does not tell the user that spring is being used when used automatically via binstubs but quiet is enabled" do
115
+ File.write("#{app.user_home}/.spring.rb", "Spring.quiet = true")
116
+ assert_success "bin/rails runner ''"
117
+ refute_output_includes "bin/rails runner ''", stderr: 'Running via Spring preloader in process'
80
118
  end
81
119
 
82
120
  test "test changes are picked up" do
@@ -111,13 +149,13 @@ module Spring
111
149
  test "app gets reloaded when preloaded files change" do
112
150
  assert_success app.spring_test_command
113
151
 
114
- File.write(app.application_config, app.application_config.read + <<-CODE)
152
+ File.write(app.application_config, app.application_config.read + <<-RUBY.strip_heredoc)
115
153
  class Foo
116
154
  def self.omg
117
155
  raise "omg"
118
156
  end
119
157
  end
120
- CODE
158
+ RUBY
121
159
  File.write(app.test, app.test.read.sub("get :index", "Foo.omg"))
122
160
 
123
161
  app.await_reload
@@ -150,17 +188,17 @@ module Spring
150
188
 
151
189
  test "stop command kills server" do
152
190
  app.run app.spring_test_command
153
- assert app.spring_env.server_running?, "The server should be running but it isn't"
191
+ assert spring_env.server_running?, "The server should be running but it isn't"
154
192
 
155
193
  assert_success "bin/spring stop"
156
- assert !app.spring_env.server_running?, "The server should not be running but it is"
194
+ assert !spring_env.server_running?, "The server should not be running but it is"
157
195
  end
158
196
 
159
197
  test "custom commands" do
160
198
  # Start spring before setting up the command, to test that it gracefully upgrades itself
161
199
  assert_success "bin/rails runner ''"
162
200
 
163
- File.write(app.spring_config, <<-CODE)
201
+ File.write(app.spring_config, <<-RUBY.strip_heredoc)
164
202
  class CustomCommand
165
203
  def call
166
204
  puts "omg"
@@ -172,7 +210,7 @@ module Spring
172
210
  end
173
211
 
174
212
  Spring.register_command "custom", CustomCommand.new
175
- CODE
213
+ RUBY
176
214
 
177
215
  assert_success "bin/spring custom", stdout: "omg"
178
216
 
@@ -193,53 +231,166 @@ module Spring
193
231
  assert_success "bin/rake -T", stdout: "rake db:migrate"
194
232
  end
195
233
 
196
- test "binstub when spring is uninstalled" do
197
- app.run! "gem uninstall --ignore-dependencies spring"
198
- File.write(app.gemfile, app.gemfile.read.gsub(/gem 'spring.*/, ""))
199
- assert_success "bin/rake -T", stdout: "rake db:migrate"
234
+ test "binstub remove all" do
235
+ assert_success "bin/spring binstub --remove --all"
236
+ refute File.exist?(app.path("bin/spring"))
200
237
  end
201
238
 
202
- test "binstub upgrade" do
203
- File.write(app.path("bin/rake"), <<CODE)
204
- #!/usr/bin/env ruby
239
+ test "binstub when spring gem is missing" do
240
+ without_gem "spring-#{Spring::VERSION}" do
241
+ File.write(app.gemfile, app.gemfile.read.gsub(/gem 'spring.*/, ""))
242
+ assert_success "bin/rake -T", stdout: "rake db:migrate"
243
+ end
244
+ end
205
245
 
206
- if !Process.respond_to?(:fork) || Gem::Specification.find_all_by_name("spring").empty?
207
- exec "bundle", "exec", "rake", *ARGV
208
- else
209
- ARGV.unshift "rake"
210
- load Gem.bin_path("spring", "spring")
211
- end
212
- CODE
213
-
214
- File.write(app.path("bin/rails"), <<CODE)
215
- #!/usr/bin/env ruby
216
-
217
- if !Process.respond_to?(:fork) || Gem::Specification.find_all_by_name("spring").empty?
218
- APP_PATH = File.expand_path('../../config/application', __FILE__)
219
- require_relative '../config/boot'
220
- require 'rails/commands'
221
- else
222
- ARGV.unshift "rails"
223
- load Gem.bin_path("spring", "spring")
224
- end
225
- CODE
246
+ test "binstub when spring binary is missing" do
247
+ begin
248
+ File.rename(app.path("bin/spring"), app.path("bin/spring.bak"))
249
+ assert_success "bin/rake -T", stdout: "rake db:migrate"
250
+ ensure
251
+ File.rename(app.path("bin/spring.bak"), app.path("bin/spring"))
252
+ end
253
+ end
254
+
255
+ test "binstub upgrade with old binstub" do
256
+ File.write(app.path("bin/rake"), <<-RUBY.strip_heredoc)
257
+ #!/usr/bin/env ruby
258
+
259
+ if !Process.respond_to?(:fork) || Gem::Specification.find_all_by_name("spring").empty?
260
+ exec "bundle", "exec", "rake", *ARGV
261
+ else
262
+ ARGV.unshift "rake"
263
+ load Gem.bin_path("spring", "spring")
264
+ end
265
+ RUBY
266
+
267
+ File.write(app.path("bin/rails"), <<-RUBY.strip_heredoc)
268
+ #!/usr/bin/env ruby
269
+
270
+ if !Process.respond_to?(:fork) || Gem::Specification.find_all_by_name("spring").empty?
271
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
272
+ require_relative '../config/boot'
273
+ require 'rails/commands'
274
+ else
275
+ ARGV.unshift "rails"
276
+ load Gem.bin_path("spring", "spring")
277
+ end
278
+ RUBY
226
279
 
227
280
  assert_success "bin/spring binstub --all", stdout: "upgraded"
228
281
 
229
- assert_equal app.path("bin/rake").read, <<CODE
230
- #!/usr/bin/env ruby
231
- #{Spring::Client::Binstub::LOADER.strip}
232
- require 'bundler/setup'
233
- load Gem.bin_path('rake', 'rake')
234
- CODE
282
+ expected = <<-RUBY.gsub(/^ /, "")
283
+ #!/usr/bin/env ruby
284
+ #{Spring::Client::Binstub::LOADER.strip}
285
+ require 'bundler/setup'
286
+ load Gem.bin_path('rake', 'rake')
287
+ RUBY
288
+ assert_equal expected, app.path("bin/rake").read
289
+
290
+ expected = <<-RUBY.gsub(/^ /, "")
291
+ #!/usr/bin/env ruby
292
+ #{Spring::Client::Binstub::LOADER.strip}
293
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
294
+ require_relative '../config/boot'
295
+ require 'rails/commands'
296
+ RUBY
297
+ assert_equal expected, app.path("bin/rails").read
298
+ end
299
+
300
+ test "binstub upgrade with new binstub variations" do
301
+ expected = <<-RUBY.gsub(/^ /, "")
302
+ #!/usr/bin/env ruby
303
+ #{Spring::Client::Binstub::LOADER.strip}
304
+ require 'bundler/setup'
305
+ load Gem.bin_path('rake', 'rake')
306
+ RUBY
307
+
308
+ # older variation with double quotes
309
+ File.write(app.path("bin/rake"), <<-RUBY.strip_heredoc)
310
+ #!/usr/bin/env ruby
311
+ begin
312
+ load File.expand_path("../spring", __FILE__)
313
+ rescue LoadError
314
+ end
315
+ require 'bundler/setup'
316
+ load Gem.bin_path('rake', 'rake')
317
+ RUBY
318
+
319
+ assert_success "bin/spring binstub rake", stdout: "bin/rake: upgraded"
320
+ assert_equal expected, app.path("bin/rake").read
321
+
322
+ # newer variation with single quotes
323
+ File.write(app.path("bin/rake"), <<-RUBY.strip_heredoc)
324
+ #!/usr/bin/env ruby
325
+ begin
326
+ load File.expand_path('../spring', __FILE__)
327
+ rescue LoadError
328
+ end
329
+ require 'bundler/setup'
330
+ load Gem.bin_path('rake', 'rake')
331
+ RUBY
332
+
333
+ assert_success "bin/spring binstub rake", stdout: "bin/rake: upgraded"
334
+ assert_equal expected, app.path("bin/rake").read
335
+
336
+ # newer variation which checks end of exception message
337
+ File.write(app.path("bin/rake"), <<-RUBY.strip_heredoc)
338
+ #!/usr/bin/env ruby
339
+ begin
340
+ spring_bin_path = File.expand_path('../spring', __FILE__)
341
+ load spring_bin_path
342
+ rescue LoadError => e
343
+ raise unless e.message.end_with? spring_bin_path, 'spring/binstub'
344
+ end
345
+ require 'bundler/setup'
346
+ load Gem.bin_path('rake', 'rake')
347
+ RUBY
235
348
 
236
- assert_equal app.path("bin/rails").read, <<CODE
237
- #!/usr/bin/env ruby
238
- #{Spring::Client::Binstub::LOADER.strip}
239
- APP_PATH = File.expand_path('../../config/application', __FILE__)
240
- require_relative '../config/boot'
241
- require 'rails/commands'
242
- CODE
349
+ assert_success "bin/spring binstub rake", stdout: "bin/rake: upgraded"
350
+ assert_equal expected, app.path("bin/rake").read
351
+ end
352
+
353
+ test "binstub remove with new binstub variations" do
354
+ # older variation with double quotes
355
+ File.write(app.path("bin/rake"), <<-RUBY.strip_heredoc)
356
+ #!/usr/bin/env ruby
357
+ begin
358
+ load File.expand_path("../spring", __FILE__)
359
+ rescue LoadError
360
+ end
361
+ require 'bundler/setup'
362
+ load Gem.bin_path('rake', 'rake')
363
+ RUBY
364
+
365
+ # newer variation with single quotes
366
+ File.write(app.path("bin/rails"), <<-RUBY.strip_heredoc)
367
+ #!/usr/bin/env ruby
368
+ begin
369
+ load File.expand_path('../spring', __FILE__)
370
+ rescue LoadError
371
+ end
372
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
373
+ require_relative '../config/boot'
374
+ require 'rails/commands'
375
+ RUBY
376
+
377
+ assert_success "bin/spring binstub --remove rake", stdout: "bin/rake: spring removed"
378
+ assert_success "bin/spring binstub --remove rails", stdout: "bin/rails: spring removed"
379
+
380
+ expected = <<-RUBY.strip_heredoc
381
+ #!/usr/bin/env ruby
382
+ require 'bundler/setup'
383
+ load Gem.bin_path('rake', 'rake')
384
+ RUBY
385
+ assert_equal expected, app.path("bin/rake").read
386
+
387
+ expected = <<-RUBY.strip_heredoc
388
+ #!/usr/bin/env ruby
389
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
390
+ require_relative '../config/boot'
391
+ require 'rails/commands'
392
+ RUBY
393
+ assert_equal expected, app.path("bin/rails").read
243
394
  end
244
395
 
245
396
  test "after fork callback" do
@@ -252,6 +403,13 @@ CODE
252
403
  assert_success "bin/rails runner 'puts 2'", stdout: "!callback!\n2"
253
404
  end
254
405
 
406
+ test "can define client tasks" do
407
+ File.write("#{app.spring_client_config}", <<-RUBY)
408
+ Spring::Client::COMMANDS["foo"] = lambda { |args| puts "bar -- \#{args.inspect}" }
409
+ RUBY
410
+ assert_success "bin/spring foo --baz", stdout: "bar -- [\"foo\", \"--baz\"]\n"
411
+ end
412
+
255
413
  test "missing config/application.rb" do
256
414
  app.application_config.delete
257
415
  assert_failure "bin/rake -T", stderr: "unable to find your config/application.rb"
@@ -278,17 +436,17 @@ CODE
278
436
  end
279
437
 
280
438
  test "setting env vars with rake" do
281
- File.write(app.path("lib/tasks/env.rake"), <<-'CODE')
439
+ File.write(app.path("lib/tasks/env.rake"), <<-RUBY.strip_heredoc)
282
440
  task :print_rails_env => :environment do
283
441
  puts Rails.env
284
442
  end
285
443
 
286
444
  task :print_env do
287
- ENV.each { |k, v| puts "#{k}=#{v}" }
445
+ ENV.each { |k, v| puts "\#{k}=\#{v}" }
288
446
  end
289
447
 
290
448
  task(:default).clear.enhance [:print_rails_env]
291
- CODE
449
+ RUBY
292
450
 
293
451
  assert_success "bin/rake RAILS_ENV=test print_rails_env", stdout: "test"
294
452
  assert_success "bin/rake FOO=bar print_env", stdout: "FOO=bar"
@@ -305,15 +463,15 @@ CODE
305
463
  end
306
464
 
307
465
  test "changing the Gemfile works when spring calls into itself" do
308
- File.write(app.path("script.rb"), <<-CODE)
466
+ File.write(app.path("script.rb"), <<-RUBY.strip_heredoc)
309
467
  gemfile = Rails.root.join("Gemfile")
310
- File.write(gemfile, "\#{gemfile.read}gem 'devise'\\n")
468
+ File.write(gemfile, "\#{gemfile.read}gem 'text'\\n")
311
469
  Bundler.with_clean_env do
312
470
  system(#{app.env.inspect}, "bundle install")
313
471
  end
314
- output = `\#{Rails.root.join('bin/rails')} runner 'require "devise"; puts "done";'`
315
- exit output == "done\n"
316
- CODE
472
+ output = `\#{Rails.root.join('bin/rails')} runner 'require "text"; puts "done";'`
473
+ exit output.include? "done\n"
474
+ RUBY
317
475
 
318
476
  assert_success [%(bin/rails runner 'load Rails.root.join("script.rb")'), timeout: 60]
319
477
  end
@@ -341,6 +499,41 @@ CODE
341
499
  expr = "p Kernel.private_instance_methods.include?(:raise)"
342
500
  assert_success %(bin/rails runner '#{expr}'), stdout: "true"
343
501
  end
502
+
503
+ test "custom bundle path" do
504
+ bundle_path = app.path(".bundle/#{Bundler.ruby_scope}")
505
+ bundle_path.dirname.mkpath
506
+
507
+ FileUtils.cp_r "#{app.gem_home}/", bundle_path.to_s
508
+
509
+ app.run! "bundle install --path .bundle --clean --local"
510
+
511
+ assert_speedup do
512
+ 2.times { assert_success "bundle exec rails runner ''" }
513
+ end
514
+ end
515
+
516
+ test "booting a foreground server" do
517
+ FileUtils.cd(app.root) do
518
+ assert !spring_env.server_running?
519
+ assert_success "bin/spring server &"
520
+
521
+ Timeout.timeout(10) do
522
+ sleep 0.1 until spring_env.server_running? && spring_env.socket_path.exist?
523
+ end
524
+
525
+ assert_success app.spring_test_command
526
+ end
527
+ end
528
+
529
+ test "server boot timeout" do
530
+ app.env["SPRING_SERVER_COMMAND"] = "sleep 1"
531
+ File.write("#{app.spring_client_config}", %(
532
+ Spring::Client::Run.const_set(:BOOT_TIMEOUT, 0.1)
533
+ ))
534
+
535
+ assert_failure "bin/rails runner ''", stderr: "timed out"
536
+ end
344
537
  end
345
538
  end
346
539
  end
@@ -9,7 +9,8 @@ module Spring
9
9
 
10
10
  def initialize(root)
11
11
  @root = Pathname.new(root)
12
- @spring_env = Spring::Env.new(root)
12
+ @spring_env = Spring::Env.new(root: root)
13
+ @times = nil
13
14
  end
14
15
 
15
16
  def exists?
@@ -48,7 +49,7 @@ module Spring
48
49
  end
49
50
 
50
51
  def gem_home
51
- path "vendor/gems/#{RUBY_VERSION}"
52
+ path "../gems/#{RUBY_VERSION}"
52
53
  end
53
54
 
54
55
  def user_home
@@ -88,6 +89,10 @@ module Spring
88
89
  path "config/spring.rb"
89
90
  end
90
91
 
92
+ def spring_client_config
93
+ path "config/spring_client.rb"
94
+ end
95
+
91
96
  def run(command, opts = {})
92
97
  start_time = Time.now
93
98
 
@@ -116,8 +121,8 @@ module Spring
116
121
  @times << (Time.now - start_time) if @times
117
122
 
118
123
  output.merge(status: status, command: command)
119
- rescue Timeout::Error => e
120
- raise e, "Output:\n\n#{dump_streams(command, read_streams)}"
124
+ rescue Timeout::Error
125
+ raise Timeout::Error, "While running command:\n\n#{dump_streams(command, read_streams)}"
121
126
  end
122
127
 
123
128
  def with_timing
@@ -8,6 +8,7 @@ module Spring
8
8
  @version = RailsVersion.new(version_constraint.split(' ').last)
9
9
  @application = Application.new(root)
10
10
  @bundled = false
11
+ @installed = false
11
12
  end
12
13
 
13
14
  def test_root
@@ -52,19 +53,36 @@ module Spring
52
53
  FileUtils.mkdir_p(application.user_home)
53
54
  FileUtils.rm_rf(application.path("test/performance"))
54
55
 
55
- File.write(application.gemfile, "#{application.gemfile.read}gem 'spring', '#{Spring::VERSION}'\n")
56
+ append_to_file(application.gemfile, "gem 'spring', '#{Spring::VERSION}'")
56
57
 
57
58
  if version.needs_testunit?
58
- File.write(application.gemfile, "#{application.gemfile.read}gem 'spring-commands-testunit'\n")
59
+ append_to_file(application.gemfile, "gem 'spring-commands-testunit'")
60
+ end
61
+
62
+ if RUBY_VERSION == "1.9.3"
63
+ append_to_file(application.gemfile, "gem 'mime-types', '~> 2'")
64
+ end
65
+
66
+ rewrite_file(application.gemfile) do |c|
67
+ c.sub!("https://rubygems.org", "http://rubygems.org")
68
+ c.gsub!(/(gem '(byebug|web-console|sdoc|jbuilder)')/, "# \\1")
69
+ c
59
70
  end
60
71
 
61
- File.write(application.gemfile, application.gemfile.read.sub("https://rubygems.org", "http://rubygems.org"))
62
72
 
63
73
  if application.path("bin").exist?
64
74
  FileUtils.cp_r(application.path("bin"), application.path("bin_original"))
65
75
  end
66
76
  end
67
77
 
78
+ def rewrite_file(file)
79
+ File.write(file, yield(file.read))
80
+ end
81
+
82
+ def append_to_file(file, add)
83
+ rewrite_file(file) { |c| c << "#{add}\n" }
84
+ end
85
+
68
86
  def generate_if_missing
69
87
  generate unless application.exists?
70
88
  end
@@ -99,7 +117,7 @@ module Spring
99
117
  system("gem build #{name}.gemspec 2>&1")
100
118
  end
101
119
 
102
- application.run! "gem install #{spec.gem_dir}/#{name}-*.gem", timeout: nil
120
+ application.run! "gem install #{spec.gem_dir}/#{name}-*.gem --no-ri --no-rdoc", timeout: nil
103
121
  end
104
122
  end
105
123
 
@@ -1,3 +1,3 @@
1
1
  module Spring
2
- VERSION = "1.3.6"
2
+ VERSION = "1.7.2"
3
3
  end
@@ -1,5 +1,3 @@
1
- require "spring/watcher"
2
-
3
1
  module Spring
4
2
  module Watcher
5
3
  class Polling < Abstract
@@ -25,6 +25,6 @@ module Spring
25
25
  end
26
26
 
27
27
  def self.watch(*items)
28
- watcher.add *items
28
+ watcher.add(*items)
29
29
  end
30
30
  end