spring 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,13 @@
1
+ ## 0.0.9
2
+
3
+ * Added `Spring::Commands::Rake.environment_matchers` for matching
4
+ rake tasks to specific environments.
5
+ * Kill the spring server when the `Gemfile` or `Gemfile.lock` is
6
+ changed. This forces a new server to boot up on the next run, which
7
+ ensures that you get the correct gems (or the correct error message from
8
+ bundler if you have forgotten to `bundle install`.)
9
+ * Fixed error when `Spring.watch` is used in `config/spring.rb`
10
+
1
11
  ## 0.0.8
2
12
 
3
13
  * Renamed `spring test` to `spring testunit`.
data/README.md CHANGED
@@ -78,9 +78,9 @@ Finished tests in 0.127245s, 55.0121 tests/s, 78.5887 assertions/s.
78
78
 
79
79
  7 tests, 10 assertions, 0 failures, 0 errors, 0 skips
80
80
 
81
- real 0m2.165s
82
- user 0m0.281s
83
- sys 0m0.066s
81
+ real 0m2.165s
82
+ user 0m0.281s
83
+ sys 0m0.066s
84
84
  ```
85
85
 
86
86
  That booted our app in the background:
@@ -111,9 +111,9 @@ Finished tests in 0.176896s, 39.5714 tests/s, 56.5305 assertions/s.
111
111
 
112
112
  7 tests, 10 assertions, 0 failures, 0 errors, 0 skips
113
113
 
114
- real 0m0.610s
115
- user 0m0.276s
116
- sys 0m0.059s
114
+ real 0m0.610s
115
+ user 0m0.276s
116
+ sys 0m0.059s
117
117
  ```
118
118
 
119
119
  Running `spring testunit`, `spring rake`, `spring rails`, etc gets a bit
@@ -145,15 +145,22 @@ Finished tests in 0.166585s, 42.0207 tests/s, 60.0296 assertions/s.
145
145
 
146
146
  7 tests, 10 assertions, 0 failures, 0 errors, 0 skips
147
147
 
148
- real 0m0.407s
149
- user 0m0.077s
150
- sys 0m0.059s
148
+ real 0m0.407s
149
+ user 0m0.077s
150
+ sys 0m0.059s
151
151
  ```
152
152
 
153
153
  You can add "./bin" to your `PATH` when in your application's directory
154
154
  [with direnv](https://github.com/zimbatm/direnv), but you should
155
155
  recognise and understand the security implications of using that.
156
156
 
157
+ Note: Don't use spring binstubs with `bundle install --binstubs`. If
158
+ you do this, spring and bundler will overwrite each other. If _you will_
159
+ not be using a command with spring, use `bundle binstub [GEM]` to
160
+ generate a bundler binstub for that specific gem. If you _will_ be
161
+ using a command with spring, generate a spring binstub _instaed of_ a
162
+ bundler binstub; spring will run your command inside the bundle anyway.
163
+
157
164
  If we edit any of the application files, or test files, the change will
158
165
  be picked up on the next run, without the background process
159
166
  having to be restarted.
@@ -242,7 +249,17 @@ Runs a cucumber feature.
242
249
 
243
250
  ### `rake`
244
251
 
245
- Runs a rake task.
252
+ Runs a rake task. Rake tasks run in the `development` environment by
253
+ default. You can change this on the fly by using the `RAILS_ENV`
254
+ environment variable. The environment is also configurable with the
255
+ `Spring::Commands::Rake.environment_matchers` hash. This has sensible
256
+ defaults, but if you need to match a specific task to a specific
257
+ environment, you'd do it like this:
258
+
259
+ ``` ruby
260
+ Spring::Commands::Rake.environment_matchers["perf_test"] = "test"
261
+ Spring::Commands::Rake.environment_matchers[/^perf/] = "test"
262
+ ```
246
263
 
247
264
  ### `rails console`, `rails generate`, `rails runner`
248
265
 
@@ -251,22 +268,22 @@ a different sub command (e.g. `rails server`) then spring will automatically
251
268
  pass it through to the underlying `rails` executable (without the
252
269
  speed-up).
253
270
 
254
- ## Configuration
271
+ ## Configuration file
272
+
273
+ Spring will read `config/spring.rb` for custom settings, described below.
255
274
 
256
- ### application_root
275
+ ### Specifying application root
257
276
 
258
- Spring must know how to find your rails application. If you have a
277
+ Spring must know how to find your Rails application. If you have a
259
278
  normal app everything works out of the box. If you are working on a
260
279
  project with a special setup (an engine for example), you must tell
261
280
  Spring where your app is located:
262
281
 
263
- **config/spring.rb**
264
-
265
282
  ```ruby
266
283
  Spring.application_root = './test/dummy'
267
284
  ```
268
285
 
269
- ### preload files
286
+ ### Preloading files
270
287
 
271
288
  Every Spring command has the ability to preload a set of files. The
272
289
  `test` command for example preloads `test_helper` (it also adds the
@@ -276,16 +293,16 @@ preloads for every command:
276
293
 
277
294
  ```ruby
278
295
  # if your test helper is called "helper"
279
- Commands::Command::TestUnit.preloads = %w(helper)
296
+ Spring::Commands::TestUnit.preloads = %w(helper)
280
297
 
281
298
  # if you don't want to preload spec_helper.rb
282
- Commands::Command::RSpec.preloads = []
299
+ Spring::Commands::RSpec.preloads = []
283
300
 
284
301
  # if you want to preload additional files for the console
285
- Commands::Command::RailsConsole.preloads << 'extenstions/console_helper'
302
+ Spring::Commands::RailsConsole.preloads << 'extensions/console_helper'
286
303
  ```
287
304
 
288
- ### after fork callbacks
305
+ ### Callbacks after forking
289
306
 
290
307
  You might want to run code after Spring forked off the process but
291
308
  before the actual command is run. You might want to use an
@@ -301,22 +318,23 @@ end
301
318
  If you want to register multiple callbacks you can simply call
302
319
  `Spring.after_fork` multiple times with different blocks.
303
320
 
304
- ### tmp directory
305
-
306
- Spring needs a tmp directory. This will default to `Rails.root.join('tmp', 'spring')`.
307
- You can set your own configuration directory by setting the `SPRING_TMP_PATH` environment variable.
308
-
309
321
  ### Watching files and directories
310
322
 
311
323
  As mentioned above, Spring will automatically detect file changes to any file loaded when the server
312
- boots. If you would like to watch additional files or directories, use
313
- `Spring.watch`:
324
+ boots. If you would like to watch additional files or directories, use `watch`:
314
325
 
315
326
  ```ruby
316
- Spring.watch "#{Rails.root}/spec/factories"
327
+ Spring.watch "spec/factories"
317
328
  ```
318
329
 
319
- ### Filesystem polling
330
+ ## Other configuration
331
+
332
+ ### tmp directory
333
+
334
+ Spring needs a tmp directory. This will default to `Rails.root.join('tmp', 'spring')`.
335
+ You can set your own configuration directory by setting the `SPRING_TMP_PATH` environment variable.
336
+
337
+ ### Filesystem polling speed
320
338
 
321
339
  By default Spring will check the filesystem for changes once every 0.2 seconds. This
322
340
  method requires zero configuration, but if you find that it's using too
@@ -326,9 +344,6 @@ adding the following to to your `Gemfile`:
326
344
  ```ruby
327
345
  group :development, :test do
328
346
  gem 'listen'
329
- gem 'rb-inotify', :require => false # linux
330
- gem 'rb-fsevent', :require => false # mac os x
331
- gem 'rb-kqueue', :require => false # bsd
332
347
  end
333
348
  ```
334
349
 
data/bin/spring CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
3
4
  require 'spring/client'
4
5
  Spring::Client.run(ARGV)
@@ -24,7 +24,7 @@ module Spring
24
24
  # The test environment has config.cache_classes = true set by default.
25
25
  # However, we don't want this to prevent us from performing class reloading,
26
26
  # so this gets around that.
27
- Rails::Application.initializer :initialize_dependency_mechanism, group: :all do
27
+ ::Rails::Application.initializer :initialize_dependency_mechanism, group: :all do
28
28
  ActiveSupport::Dependencies.mechanism = :load
29
29
  end
30
30
 
@@ -4,11 +4,10 @@ require "spring/application"
4
4
 
5
5
  module Spring
6
6
  class ApplicationManager
7
- attr_reader :pid, :child, :app_env, :spring_env
8
-
9
- def initialize(app_env)
10
- super()
7
+ attr_reader :pid, :child, :app_env, :spring_env, :server
11
8
 
9
+ def initialize(server, app_env)
10
+ @server = server
12
11
  @app_env = app_env
13
12
  @spring_env = Env.new
14
13
  @mutex = Mutex.new
@@ -78,6 +77,8 @@ module Spring
78
77
  private
79
78
 
80
79
  def start_child(silence = false)
80
+ server.application_starting
81
+
81
82
  @child, child_socket = UNIXSocket.pair
82
83
  @pid = fork {
83
84
  [STDOUT, STDERR].each { |s| s.reopen('/dev/null', 'w') } if silence
@@ -29,7 +29,7 @@ module Spring
29
29
 
30
30
  def boot_server
31
31
  env.socket_path.unlink if env.socket_path.exist?
32
- Process.spawn("spring", "start")
32
+ Process.spawn(BINFILE, "start")
33
33
  sleep 0.1 until env.socket_path.exist?
34
34
  end
35
35
 
@@ -48,7 +48,7 @@ ERROR
48
48
 
49
49
  def connect_to_application(client)
50
50
  server.send_io client
51
- send_json server, args: args, env: ENV
51
+ send_json server, args: args, env: ENV.to_hash
52
52
  server.gets or raise CommandNotFound
53
53
  end
54
54
 
@@ -1,3 +1,5 @@
1
+ require "spring/watcher"
2
+
1
3
  # If the config/spring.rb contains requires for commands from other gems,
2
4
  # then we need to be under bundler.
3
5
  require "bundler/setup"
@@ -71,17 +73,18 @@ MESSAGE
71
73
  end
72
74
 
73
75
  def call(args)
74
- if args.size > 0
75
- ARGV.replace args
76
- path = File.expand_path(args.first)
76
+ if args.empty?
77
+ args = ['test']
78
+ end
77
79
 
80
+ ARGV.replace args
81
+ args.each do |arg|
82
+ path = File.expand_path(arg)
78
83
  if File.directory?(path)
79
84
  Dir[File.join path, "**", "*_test.rb"].each { |f| require f }
80
85
  else
81
86
  require path
82
87
  end
83
- else
84
- $stderr.puts "you need to specify what test to run: spring test TEST_NAME"
85
88
  end
86
89
  end
87
90
 
@@ -107,7 +110,7 @@ MESSAGE
107
110
 
108
111
  def call(args)
109
112
  $0 = "rspec"
110
- ::RSpec::Core::Runner.run(args)
113
+ Kernel.exit ::RSpec::Core::Runner.run(args)
111
114
  end
112
115
 
113
116
  def description
@@ -127,7 +130,9 @@ MESSAGE
127
130
  end
128
131
 
129
132
  def call(args)
130
- ::Cucumber::Cli::Main.execute(args)
133
+ # Cucumber's execute funtion returns `true` if any of the steps failed or
134
+ # some other error occured.
135
+ Kernel.exit(1) if ::Cucumber::Cli::Main.execute(args)
131
136
  end
132
137
 
133
138
  def description
@@ -137,6 +142,21 @@ MESSAGE
137
142
  Spring.register_command "cucumber", Cucumber.new
138
143
 
139
144
  class Rake < Command
145
+ class << self
146
+ attr_accessor :environment_matchers
147
+ end
148
+
149
+ self.environment_matchers = {
150
+ /^(test|spec|cucumber)($|:)/ => "test"
151
+ }
152
+
153
+ def env(args)
154
+ self.class.environment_matchers.each do |matcher, environment|
155
+ return environment if matcher === args.first
156
+ end
157
+ nil
158
+ end
159
+
140
160
  def setup
141
161
  super
142
162
  require "rake"
@@ -154,8 +174,8 @@ MESSAGE
154
174
  Spring.register_command "rake", Rake.new
155
175
 
156
176
  class RailsConsole < Command
157
- def env(tail)
158
- tail.first if tail.first && !tail.first.index("-")
177
+ def env(args)
178
+ args.first if args.first && !args.first.index("-")
159
179
  end
160
180
 
161
181
  def setup
@@ -6,6 +6,7 @@ require "spring/sid"
6
6
 
7
7
  module Spring
8
8
  IGNORE_SIGNALS = %w(INT QUIT)
9
+ BINFILE = File.expand_path("../../../bin/spring", __FILE__)
9
10
 
10
11
  class Env
11
12
  attr_reader :root
@@ -48,12 +49,10 @@ module Spring
48
49
  end
49
50
 
50
51
  def server_running?
51
- if pidfile_path.exist?
52
- pidfile = pidfile_path.open('r')
53
- !pidfile.flock(File::LOCK_EX | File::LOCK_NB)
54
- else
55
- false
56
- end
52
+ pidfile = pidfile_path.open('r')
53
+ !pidfile.flock(File::LOCK_EX | File::LOCK_NB)
54
+ rescue Errno::ENOENT
55
+ false
57
56
  ensure
58
57
  if pidfile
59
58
  pidfile.flock(File::LOCK_UN)
@@ -61,6 +60,10 @@ module Spring
61
60
  end
62
61
  end
63
62
 
63
+ def bundle_mtime
64
+ [Bundler.default_lockfile, Bundler.default_gemfile].select(&:exist?).map(&:mtime).max
65
+ end
66
+
64
67
  private
65
68
 
66
69
  def default_tmp_path
@@ -1,8 +1,11 @@
1
1
  require "socket"
2
+ require "thread"
2
3
 
3
4
  require "spring/env"
4
5
  require "spring/application_manager"
5
6
  require "spring/process_title_updater"
7
+
8
+ # Must be last, as it requires bundler/setup
6
9
  require "spring/commands"
7
10
 
8
11
  # readline must be required before we setpgid, otherwise the require may hang,
@@ -19,17 +22,19 @@ module Spring
19
22
 
20
23
  def initialize(env = Env.new)
21
24
  @env = env
22
- @applications = Hash.new { |h, k| h[k] = ApplicationManager.new(k) }
25
+ @applications = Hash.new { |h, k| h[k] = ApplicationManager.new(self, k) }
23
26
  @pidfile = env.pidfile_path.open('a')
27
+ @mutex = Mutex.new
24
28
  end
25
29
 
26
30
  def boot
31
+ write_pidfile
27
32
  set_pgid
28
33
  ignore_signals
29
34
  set_exit_hook
30
- write_pidfile
31
35
  redirect_output
32
36
  set_process_title
37
+ watch_bundle
33
38
 
34
39
  server = UNIXServer.open(env.socket_name)
35
40
  loop { serve server.accept }
@@ -78,15 +83,15 @@ module Spring
78
83
  def set_exit_hook
79
84
  server_pid = Process.pid
80
85
 
81
- at_exit do
82
- # We don't want this hook to run in any forks of the current process
83
- if Process.pid == server_pid
84
- [env.socket_path, env.pidfile_path].each do |path|
85
- path.unlink if path.exist?
86
- end
86
+ # We don't want this hook to run in any forks of the current process
87
+ at_exit { shutdown if Process.pid == server_pid }
88
+ end
89
+
90
+ def shutdown
91
+ @applications.values.each(&:stop)
87
92
 
88
- @applications.values.each(&:stop)
89
- end
93
+ [env.socket_path, env.pidfile_path].each do |path|
94
+ path.unlink if path.exist?
90
95
  end
91
96
  end
92
97
 
@@ -96,7 +101,6 @@ module Spring
96
101
  @pidfile.write("#{Process.pid}\n")
97
102
  @pidfile.fsync
98
103
  else
99
- $stderr.puts "#{@pidfile.path} is locked; it looks like a server is already running"
100
104
  exit 1
101
105
  end
102
106
  end
@@ -121,5 +125,13 @@ module Spring
121
125
  "spring server | #{env.app_name} | started #{distance} ago"
122
126
  }
123
127
  end
128
+
129
+ def watch_bundle
130
+ @bundle_mtime = env.bundle_mtime
131
+ end
132
+
133
+ def application_starting
134
+ @mutex.synchronize { exit if env.bundle_mtime != @bundle_mtime }
135
+ end
124
136
  end
125
137
  end
@@ -1,3 +1,3 @@
1
1
  module Spring
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -5,6 +5,7 @@ module Spring
5
5
 
6
6
  def self.available?
7
7
  require "listen"
8
+ require "listen/version"
8
9
  true
9
10
  rescue LoadError
10
11
  false
@@ -12,10 +13,15 @@ module Spring
12
13
 
13
14
  def start
14
15
  unless @listener
15
- @listener = ::Listen::MultiListener.new(*base_directories)
16
+ @listener = ::Listen.to(*base_directories, relative_paths: false)
16
17
  @listener.latency(latency)
17
18
  @listener.change(&method(:changed))
18
- @listener.start(false)
19
+
20
+ if ::Listen::VERSION >= "1.0.0"
21
+ @listener.start
22
+ else
23
+ @listener.start(false)
24
+ end
19
25
  end
20
26
  end
21
27
 
@@ -45,9 +51,10 @@ module Spring
45
51
  end
46
52
 
47
53
  def base_directories
48
- [root] +
54
+ ([root] +
49
55
  files.reject { |f| f.start_with? root }.map { |f| File.expand_path("#{f}/..") } +
50
56
  directories.reject { |d| d.start_with? root }
57
+ ).uniq
51
58
  end
52
59
  end
53
60
  end
@@ -6,6 +6,8 @@ require "spring/env"
6
6
  require "pty"
7
7
 
8
8
  class AppTest < ActiveSupport::TestCase
9
+ DEFAULT_TIMEOUT = ENV['CI'] ? 30 : 10
10
+
9
11
  def app_root
10
12
  Pathname.new("#{TEST_ROOT}/apps/rails-3-2")
11
13
  end
@@ -30,12 +32,16 @@ class AppTest < ActiveSupport::TestCase
30
32
  @stderr ||= IO.pipe
31
33
  end
32
34
 
35
+ def env
36
+ @env ||= {"GEM_HOME" => gem_home.to_s, "GEM_PATH" => ""}
37
+ end
38
+
33
39
  def app_run(command, opts = {})
34
40
  start_time = Time.now
35
41
 
36
42
  Bundler.with_clean_env do
37
43
  Process.spawn(
38
- { "GEM_HOME" => gem_home.to_s, "GEM_PATH" => "" },
44
+ env,
39
45
  command.to_s,
40
46
  out: stdout.last,
41
47
  err: stderr.last,
@@ -44,7 +50,7 @@ class AppTest < ActiveSupport::TestCase
44
50
  )
45
51
  end
46
52
 
47
- _, status = Timeout.timeout(opts.fetch(:timeout, 10)) { Process.wait2 }
53
+ _, status = Timeout.timeout(opts.fetch(:timeout, DEFAULT_TIMEOUT)) { Process.wait2 }
48
54
 
49
55
  stdout, stderr = read_streams
50
56
  puts dump_streams(command, stdout, stderr) if ENV["SPRING_DEBUG"]
@@ -63,7 +69,7 @@ class AppTest < ActiveSupport::TestCase
63
69
  def read_streams
64
70
  [stdout, stderr].map(&:first).map do |stream|
65
71
  output = ""
66
- output << stream.readpartial(10240) while IO.select([stream], [], [], 0.1)
72
+ output << stream.readpartial(10240) while IO.select([stream], [], [], 0.5)
67
73
  output
68
74
  end
69
75
  end
@@ -98,13 +104,13 @@ class AppTest < ActiveSupport::TestCase
98
104
 
99
105
  def assert_success(command, expected_output = nil)
100
106
  artifacts = app_run(command)
101
- assert artifacts[:status].success?, "expected successful exit status"
107
+ assert artifacts[:status].success?, "expected successful exit status\n\n#{dump_streams(command, *artifacts.values_at(:stdout, :stderr))}"
102
108
  assert_output artifacts, expected_output if expected_output
103
109
  end
104
110
 
105
111
  def assert_failure(command, expected_output = nil)
106
112
  artifacts = app_run(command)
107
- assert !artifacts[:status].success?, "expected unsuccessful exit status"
113
+ assert !artifacts[:status].success?, "expected unsuccessful exit status\n\n#{dump_streams(command, *artifacts.values_at(:stdout, :stderr))}"
108
114
  assert_output artifacts, expected_output if expected_output
109
115
  end
110
116
 
@@ -124,6 +130,8 @@ class AppTest < ActiveSupport::TestCase
124
130
  setup do
125
131
  @test = "#{app_root}/test/functional/posts_controller_test.rb"
126
132
  @test_contents = File.read(@test)
133
+ @spec = "#{app_root}/spec/dummy_spec.rb"
134
+ @spec_contents = File.read(@spec)
127
135
  @controller = "#{app_root}/app/controllers/posts_controller.rb"
128
136
  @controller_contents = File.read(@controller)
129
137
 
@@ -143,6 +151,7 @@ class AppTest < ActiveSupport::TestCase
143
151
  teardown do
144
152
  app_run "#{spring} stop"
145
153
  File.write(@test, @test_contents)
154
+ File.write(@spec, @spec_contents)
146
155
  File.write(@controller, @controller_contents)
147
156
  end
148
157
 
@@ -311,4 +320,33 @@ class AppTest < ActiveSupport::TestCase
311
320
  assert_success "#{spring} rails runner -e staging 'puts Rails.env'", stdout: "staging"
312
321
  assert_success "#{spring} rails runner --environment=staging 'puts Rails.env'", stdout: "staging"
313
322
  end
323
+
324
+ test "exit code for failing specs" do
325
+ assert_success "#{spring} rspec"
326
+ File.write(@spec, @spec_contents.sub("true.should be_true", "false.should be_true"))
327
+ assert_failure "#{spring} rspec"
328
+ end
329
+
330
+ test "selecting rails environment for rake" do
331
+ env['RAILS_ENV'] = 'staging'
332
+ assert_success "#{spring} rake -p 'ENV[\"RAILS_ENV\"]'", stdout: "staging"
333
+ end
334
+
335
+ test "changing the Gemfile restarts the server" do
336
+ begin
337
+ gemfile = app_root.join("Gemfile")
338
+ gemfile_contents = gemfile.read
339
+
340
+ assert_success %(#{spring} rails runner 'require "rspec"')
341
+
342
+ File.write(gemfile, gemfile_contents.sub(%{gem 'rspec'}, %{# gem 'rspec'}))
343
+ app_run "bundle check"
344
+
345
+ await_reload
346
+ assert_failure %(#{spring} rails runner 'require "rspec"'), stderr: "cannot load such file -- rspec"
347
+ ensure
348
+ File.write(gemfile, gemfile_contents)
349
+ assert_success "bundle check"
350
+ end
351
+ end
314
352
  end
@@ -2,6 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'rails', '~> 3.2.0'
4
4
  gem 'sqlite3'
5
+ gem 'rspec'
5
6
 
6
7
  # gem 'listen'
7
8
  gem 'rb-inotify', :require => false # linux
@@ -0,0 +1,5 @@
1
+ describe "behaviour" do
2
+ it "passes" do
3
+ true.should be_true
4
+ end
5
+ end
@@ -2,20 +2,6 @@ require "helper"
2
2
  require "spring/commands"
3
3
 
4
4
  class CommandsTest < ActiveSupport::TestCase
5
- test "test command needs a test name" do
6
- begin
7
- real_stderr = $stderr
8
- $stderr = StringIO.new('')
9
-
10
- command = Spring::Commands::TestUnit.new
11
- command.call([])
12
-
13
- assert_equal "you need to specify what test to run: spring test TEST_NAME\n", $stderr.string
14
- ensure
15
- $stderr = real_stderr
16
- end
17
- end
18
-
19
5
  test 'children of Command have inheritable accessor named "preload"' do
20
6
  command1, command2 = 2.times.map { Class.new(Spring::Commands::Command) }
21
7
 
@@ -75,4 +61,13 @@ class CommandsTest < ActiveSupport::TestCase
75
61
  command = Spring::Commands::RailsRunner.new
76
62
  assert_nil command.env(['puts 1+1'])
77
63
  end
64
+
65
+ test "rake command has configurable environments" do
66
+ command = Spring::Commands::Rake.new
67
+ assert_nil command.env(["foo"])
68
+ assert_equal "test", command.env(["test"])
69
+ assert_equal "test", command.env(["test:models"])
70
+ assert_equal "test", command.env(["spec"])
71
+ assert_nil command.env(["test_foo"])
72
+ end
78
73
  end
@@ -3,7 +3,8 @@ require "tmpdir"
3
3
  require "fileutils"
4
4
  require "active_support/core_ext/numeric/time"
5
5
  require "spring/watcher"
6
- require "listen"
6
+
7
+ raise "listen not loaded" unless Spring::Watcher::Listen.available?
7
8
 
8
9
  module WatcherTests
9
10
  LATENCY = 0.001
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spring
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-22 00:00:00.000000000 Z
12
+ date: 2013-06-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -137,12 +137,12 @@ files:
137
137
  - test/apps/rails-3-2/public/index.html
138
138
  - test/apps/rails-3-2/public/robots.txt
139
139
  - test/apps/rails-3-2/script/rails
140
+ - test/apps/rails-3-2/spec/dummy_spec.rb
140
141
  - test/apps/rails-3-2/test/fixtures/.gitkeep
141
142
  - test/apps/rails-3-2/test/fixtures/posts.yml
142
143
  - test/apps/rails-3-2/test/functional/.gitkeep
143
144
  - test/apps/rails-3-2/test/functional/posts_controller_test.rb
144
145
  - test/apps/rails-3-2/test/integration/.gitkeep
145
- - test/apps/rails-3-2/test/performance/browsing_test.rb
146
146
  - test/apps/rails-3-2/test/test_helper.rb
147
147
  - test/apps/rails-3-2/test/unit/.gitkeep
148
148
  - test/apps/rails-3-2/test/unit/helpers/posts_helper_test.rb
@@ -234,12 +234,12 @@ test_files:
234
234
  - test/apps/rails-3-2/public/index.html
235
235
  - test/apps/rails-3-2/public/robots.txt
236
236
  - test/apps/rails-3-2/script/rails
237
+ - test/apps/rails-3-2/spec/dummy_spec.rb
237
238
  - test/apps/rails-3-2/test/fixtures/.gitkeep
238
239
  - test/apps/rails-3-2/test/fixtures/posts.yml
239
240
  - test/apps/rails-3-2/test/functional/.gitkeep
240
241
  - test/apps/rails-3-2/test/functional/posts_controller_test.rb
241
242
  - test/apps/rails-3-2/test/integration/.gitkeep
242
- - test/apps/rails-3-2/test/performance/browsing_test.rb
243
243
  - test/apps/rails-3-2/test/test_helper.rb
244
244
  - test/apps/rails-3-2/test/unit/.gitkeep
245
245
  - test/apps/rails-3-2/test/unit/helpers/posts_helper_test.rb
@@ -1,12 +0,0 @@
1
- require 'test_helper'
2
- require 'rails/performance_test_help'
3
-
4
- class BrowsingTest < ActionDispatch::PerformanceTest
5
- # Refer to the documentation for all available options
6
- # self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory]
7
- # :output => 'tmp/performance', :formats => [:flat] }
8
-
9
- def test_homepage
10
- get '/'
11
- end
12
- end