spring 1.0.0 → 1.1.0.beta1
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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +15 -0
- data/README.md +75 -42
- data/lib/spring/application.rb +7 -16
- data/lib/spring/binstub.rb +12 -0
- data/lib/spring/client.rb +8 -5
- data/lib/spring/client/binstub.rb +148 -39
- data/lib/spring/client/help.rb +4 -12
- data/lib/spring/client/rails.rb +1 -3
- data/lib/spring/client/version.rb +11 -0
- data/lib/spring/command_wrapper.rb +83 -0
- data/lib/spring/commands.rb +3 -2
- data/lib/spring/commands/rails.rb +1 -2
- data/lib/spring/commands/rake.rb +0 -4
- data/lib/spring/server.rb +1 -7
- data/lib/spring/version.rb +1 -1
- data/test/acceptance/app_test.rb +163 -347
- data/test/acceptance/helper.rb +312 -0
- data/test/unit/client/version_test.rb +14 -0
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe796fa453e40306865cb1cf6e6541ca01571d5d
|
4
|
+
data.tar.gz: 7210043ae71cdb012a21734c86984922a8127afe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c1bcd8097999582b66b2507029e807be714455fe95f70a52e222a3221c5e3921e89ba1131e3b16bd0d775eaae7f65c660b87e65c22526d3e2e79544a226e532
|
7
|
+
data.tar.gz: a0c20068387c73fd9203e6fc408ab1789240e9b244e4e627dc233f04f9850e3c984aca138a81f59b7c553958859e02349c15659910aa789ee95b5595cf95db5c
|
data/.travis.yml
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
language: ruby
|
2
|
+
before_install: if [[ "$TRAVIS_RUBY_VERSION" = "1.9.3" ]]; then gem install bundler --version="1.3.5"; else gem install bundler; fi
|
2
3
|
rvm:
|
3
4
|
- 1.9.3
|
4
5
|
- 2.0.0
|
6
|
+
- 2.1.0
|
5
7
|
env:
|
6
8
|
- RAILS_VERSION="~> 3.2.0"
|
7
9
|
- RAILS_VERSION="~> 4.0.0"
|
10
|
+
- RAILS_VERSION="~> 4.1.0.beta1"
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## Next version
|
2
|
+
|
3
|
+
* A `bin/spring` binstub is now generated. This allows us to load spring
|
4
|
+
correctly if you have it installed locally with a `BUNDLE_PATH`, so
|
5
|
+
it's no longer necessary to install spring system-wide. Note that you
|
6
|
+
still can't have spring in your Gemfile as a git repository or local
|
7
|
+
path; it must be a proper gem.
|
8
|
+
* Various changes to how springified binstubs are implemented. Existing
|
9
|
+
binstubs will continue to work, but it's recommended to run `spring binstub`
|
10
|
+
again to upgrade them to the new format.
|
11
|
+
* `spring binstub --remove` option added for removing spring from
|
12
|
+
binstubs. This won't work unless you have upgraded your binstubs to
|
13
|
+
the new format.
|
14
|
+
* `config/database.yml` is watched
|
15
|
+
|
1
16
|
## 1.0.0
|
2
17
|
|
3
18
|
* Enterprise ready secret sauce added
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Spring
|
2
2
|
|
3
3
|
[](https://travis-ci.org/jonleighton/spring)
|
4
|
+
[](http://badge.fury.io/rb/spring)
|
4
5
|
|
5
6
|
Spring is a Rails application preloader. It speeds up development by
|
6
7
|
keeping your application running in the background so you don't need to
|
@@ -15,24 +16,50 @@ boot it every time you run a test, rake task or migration.
|
|
15
16
|
|
16
17
|
## Compatibility
|
17
18
|
|
18
|
-
* Ruby versions: MRI 1.9.3, MRI 2.0.
|
19
|
+
* Ruby versions: MRI 1.9.3, MRI 2.0, MRI 2.1
|
19
20
|
* Rails versions: 3.2, 4.0
|
20
21
|
|
21
|
-
Spring makes extensive use of `Process
|
22
|
+
Spring makes extensive use of `Process.fork`, so won't be able to
|
22
23
|
provide a speed up on platforms which don't support forking (Windows, JRuby).
|
23
24
|
|
24
25
|
## Walkthrough
|
25
26
|
|
26
|
-
|
27
|
+
### Setup
|
28
|
+
|
29
|
+
Add spring to your Gemfile:
|
30
|
+
|
31
|
+
``` ruby
|
32
|
+
gem "spring", group: :development
|
33
|
+
```
|
34
|
+
|
35
|
+
It's recommended to 'springify' the executables in your `bin/`
|
36
|
+
directory:
|
37
|
+
|
38
|
+
```
|
39
|
+
$ bundle install
|
40
|
+
$ bundle exec spring binstub --all
|
41
|
+
```
|
42
|
+
|
43
|
+
This generates a `bin/spring` executable, and inserts a small snippet of
|
44
|
+
code into relevant existing executables. The snippet looks like this:
|
27
45
|
|
28
46
|
``` ruby
|
29
|
-
|
30
|
-
|
47
|
+
begin
|
48
|
+
load File.expand_path("../spring", __FILE__)
|
49
|
+
rescue LoadError
|
31
50
|
end
|
32
51
|
```
|
33
52
|
|
34
|
-
|
35
|
-
|
53
|
+
On platforms where spring is installed and supported, this snippet
|
54
|
+
hooks spring into the execution of commands. In other cases, the snippet
|
55
|
+
will just be silently ignored and the lines after it will be executed as
|
56
|
+
normal.
|
57
|
+
|
58
|
+
If you don't want to prefix every command you type with `bin/`, you
|
59
|
+
can [use direnv](https://github.com/zimbatm/direnv) to automatically add
|
60
|
+
`./bin` to your `PATH` when you `cd` into your application.
|
61
|
+
|
62
|
+
### Usage
|
36
63
|
|
37
64
|
For this walkthrough I've generated a new Rails application, and run
|
38
65
|
`rails generate scaffold posts name:string`.
|
@@ -40,7 +67,7 @@ For this walkthrough I've generated a new Rails application, and run
|
|
40
67
|
Let's run a test:
|
41
68
|
|
42
69
|
```
|
43
|
-
$ time
|
70
|
+
$ time bin/rake test test/functional/posts_controller_test.rb
|
44
71
|
Run options:
|
45
72
|
|
46
73
|
# Running tests:
|
@@ -60,7 +87,7 @@ That wasn't particularly fast because it was the first run, so spring
|
|
60
87
|
had to boot the application. It's now running:
|
61
88
|
|
62
89
|
```
|
63
|
-
$ spring status
|
90
|
+
$ bin/spring status
|
64
91
|
Spring is running:
|
65
92
|
|
66
93
|
26150 spring server | spring-demo-app | started 3 secs ago
|
@@ -70,7 +97,7 @@ Spring is running:
|
|
70
97
|
The next run is faster:
|
71
98
|
|
72
99
|
```
|
73
|
-
$ time
|
100
|
+
$ time bin/rake test test/functional/posts_controller_test.rb
|
74
101
|
Run options:
|
75
102
|
|
76
103
|
# Running tests:
|
@@ -86,20 +113,6 @@ user 0m0.276s
|
|
86
113
|
sys 0m0.059s
|
87
114
|
```
|
88
115
|
|
89
|
-
Writing `spring` before every command gets a bit tedious. Spring binstubs solve this:
|
90
|
-
|
91
|
-
```
|
92
|
-
$ spring binstub rake rails
|
93
|
-
```
|
94
|
-
|
95
|
-
This will generate `bin/rake` and `bin/rails`. They
|
96
|
-
replace any binstubs that you might already have in your `bin/`
|
97
|
-
directory. Check them in to source control.
|
98
|
-
|
99
|
-
If you don't want to prefix every command you type with `bin/`, you
|
100
|
-
can [use direnv](https://github.com/zimbatm/direnv) to automatically add
|
101
|
-
`./bin` to your `PATH` when you `cd` into your application.
|
102
|
-
|
103
116
|
If we edit any of the application files, or test files, the changes will
|
104
117
|
be picked up on the next run without the background process having to
|
105
118
|
restart. This works in exactly the same way as the code reloading
|
@@ -114,7 +127,7 @@ Let's "edit" `config/application.rb`:
|
|
114
127
|
|
115
128
|
```
|
116
129
|
$ touch config/application.rb
|
117
|
-
$ spring status
|
130
|
+
$ bin/spring status
|
118
131
|
Spring is running:
|
119
132
|
|
120
133
|
26150 spring server | spring-demo-app | started 36 secs ago
|
@@ -137,7 +150,7 @@ edit_post GET /posts/:id/edit(.:format) posts#edit
|
|
137
150
|
PUT /posts/:id(.:format) posts#update
|
138
151
|
DELETE /posts/:id(.:format) posts#destroy
|
139
152
|
|
140
|
-
$ spring status
|
153
|
+
$ bin/spring status
|
141
154
|
Spring is running:
|
142
155
|
|
143
156
|
26150 spring server | spring-demo-app | started 1 min ago
|
@@ -150,25 +163,18 @@ when you close your terminal. However if you do want to do a manual shut
|
|
150
163
|
down, use the `stop` command:
|
151
164
|
|
152
165
|
```
|
153
|
-
$ spring stop
|
166
|
+
$ bin/spring stop
|
154
167
|
Spring stopped.
|
155
168
|
```
|
156
169
|
|
157
|
-
|
158
|
-
|
159
|
-
The following commands are shipped by default.
|
170
|
+
### Removal
|
160
171
|
|
161
|
-
|
162
|
-
[`lib/spring/commands/`](https://github.com/jonleighton/spring/blob/master/lib/spring/commands/)
|
163
|
-
for examples.
|
172
|
+
To remove spring:
|
164
173
|
|
165
|
-
|
174
|
+
* 'Unspring' your bin/ executables: `bin/spring binstub --remove --all`
|
175
|
+
* Remove spring from your Gemfile
|
166
176
|
|
167
|
-
|
168
|
-
* [spring-commands-cucumber](https://github.com/jonleighton/spring-commands-cucumber)
|
169
|
-
* [spring-commands-testunit](https://github.com/jonleighton/spring-commands-testunit) - useful for
|
170
|
-
running `Test::Unit` tests on Rails 3, since only Rails 4 allows you
|
171
|
-
to use `rake test path/to/test` to run a particular test/directory.
|
177
|
+
## Commands
|
172
178
|
|
173
179
|
### `rake`
|
174
180
|
|
@@ -194,6 +200,28 @@ a different sub command (e.g. `rails server`) then spring will automatically
|
|
194
200
|
pass it through to the underlying `rails` executable (without the
|
195
201
|
speed-up).
|
196
202
|
|
203
|
+
### Additional commands
|
204
|
+
|
205
|
+
You can add these to your Gemfile for additional commands (run `spring stop` afterwards
|
206
|
+
to pick up the changes):
|
207
|
+
|
208
|
+
* [spring-commands-rspec](https://github.com/jonleighton/spring-commands-rspec)
|
209
|
+
* [spring-commands-cucumber](https://github.com/jonleighton/spring-commands-cucumber)
|
210
|
+
* [spring-commands-testunit](https://github.com/jonleighton/spring-commands-testunit) - useful for
|
211
|
+
running `Test::Unit` tests on Rails 3, since only Rails 4 allows you
|
212
|
+
to use `rake test path/to/test` to run a particular test/directory.
|
213
|
+
|
214
|
+
## Use without adding to bundle
|
215
|
+
|
216
|
+
If you don't want spring-related code checked into your source
|
217
|
+
repository, it's possible to use spring without adding to your Gemfile.
|
218
|
+
However, using spring binstubs without adding spring to the Gemfile is not
|
219
|
+
supported.
|
220
|
+
|
221
|
+
To use spring like this, do a `gem install spring` and then prefix
|
222
|
+
commands with `spring`. For example, rather than running `bin/rake -T`,
|
223
|
+
you'd run `spring rake -T`.
|
224
|
+
|
197
225
|
## Configuration
|
198
226
|
|
199
227
|
Spring will read `~/.spring.rb` and `config/spring.rb` for custom
|
@@ -223,9 +251,14 @@ which get run when your application initializers, such as
|
|
223
251
|
`config/initializers/*.rb`.
|
224
252
|
|
225
253
|
For example, if loading your test helper is slow, you might like to
|
226
|
-
preload it to speed up your test runs. To do this you could
|
227
|
-
`
|
228
|
-
|
254
|
+
preload it to speed up your test runs. To do this you could add the
|
255
|
+
following to your `config/environments/test.rb`:
|
256
|
+
|
257
|
+
``` ruby
|
258
|
+
config.after_initialize do
|
259
|
+
require Rails.root.join("test/helper")
|
260
|
+
end
|
261
|
+
```
|
229
262
|
|
230
263
|
### Running code after forking
|
231
264
|
|
data/lib/spring/application.rb
CHANGED
@@ -9,7 +9,6 @@ module Spring
|
|
9
9
|
def initialize(manager, watcher = Spring.watcher)
|
10
10
|
@manager = manager
|
11
11
|
@watcher = watcher
|
12
|
-
@setup = Set.new
|
13
12
|
@spring_env = Env.new
|
14
13
|
@preloaded = false
|
15
14
|
@mutex = Mutex.new
|
@@ -54,6 +53,7 @@ module Spring
|
|
54
53
|
watcher.add loaded_application_features
|
55
54
|
watcher.add Spring.gemfile, "#{Spring.gemfile}.lock"
|
56
55
|
watcher.add Rails.application.paths["config/initializers"]
|
56
|
+
watcher.add Rails.application.paths["config/database"]
|
57
57
|
|
58
58
|
@preloaded = true
|
59
59
|
end
|
@@ -116,22 +116,17 @@ module Spring
|
|
116
116
|
# Load in the current env vars, except those which *were* changed when spring started
|
117
117
|
env.each { |k, v| ENV[k] ||= v }
|
118
118
|
|
119
|
+
# requiring is faster, and we don't need constant reloading in this process
|
120
|
+
ActiveSupport::Dependencies.mechanism = :require
|
121
|
+
Rails.application.config.cache_classes = true
|
122
|
+
|
119
123
|
connect_database
|
120
124
|
srand
|
121
125
|
|
122
126
|
invoke_after_fork_callbacks
|
123
127
|
shush_backtraces
|
124
128
|
|
125
|
-
|
126
|
-
command.call
|
127
|
-
else
|
128
|
-
exec_name = command.exec_name
|
129
|
-
gem_name = command.gem_name if command.respond_to?(:gem_name)
|
130
|
-
|
131
|
-
exec = Gem.bin_path(gem_name || exec_name, exec_name)
|
132
|
-
$0 = exec
|
133
|
-
load exec
|
134
|
-
end
|
129
|
+
command.call
|
135
130
|
}
|
136
131
|
|
137
132
|
disconnect_database
|
@@ -167,11 +162,7 @@ module Spring
|
|
167
162
|
# main process so that they are cached. For example a test command wants to
|
168
163
|
# load the helper file once and have it cached.
|
169
164
|
def setup(command)
|
170
|
-
|
171
|
-
@setup << command.class
|
172
|
-
|
173
|
-
if command.respond_to?(:setup)
|
174
|
-
command.setup
|
165
|
+
if command.setup
|
175
166
|
watcher.add loaded_application_features # loaded features may have changed
|
176
167
|
end
|
177
168
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
command = File.basename($0)
|
2
|
+
|
3
|
+
if command == "spring"
|
4
|
+
load Gem.bin_path("spring", "spring")
|
5
|
+
else
|
6
|
+
disable = ENV["DISABLE_SPRING"]
|
7
|
+
|
8
|
+
if Process.respond_to?(:fork) && (disable.nil? || disable.empty? || disable == "0")
|
9
|
+
ARGV.unshift(command)
|
10
|
+
load Gem.bin_path("spring", "spring")
|
11
|
+
end
|
12
|
+
end
|
data/lib/spring/client.rb
CHANGED
@@ -8,15 +8,18 @@ require "spring/client/binstub"
|
|
8
8
|
require "spring/client/stop"
|
9
9
|
require "spring/client/status"
|
10
10
|
require "spring/client/rails"
|
11
|
+
require "spring/client/version"
|
11
12
|
|
12
13
|
module Spring
|
13
14
|
module Client
|
14
15
|
COMMANDS = {
|
15
|
-
"help"
|
16
|
-
"binstub"
|
17
|
-
"stop"
|
18
|
-
"status"
|
19
|
-
"rails"
|
16
|
+
"help" => Client::Help,
|
17
|
+
"binstub" => Client::Binstub,
|
18
|
+
"stop" => Client::Stop,
|
19
|
+
"status" => Client::Status,
|
20
|
+
"rails" => Client::Rails,
|
21
|
+
"-v" => Client::Version,
|
22
|
+
"--version" => Client::Version
|
20
23
|
}
|
21
24
|
|
22
25
|
def self.run(args)
|
@@ -1,46 +1,160 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module Spring
|
2
4
|
module Client
|
3
5
|
class Binstub < Command
|
4
|
-
|
6
|
+
SHEBANG = /\#\!.*\n/
|
7
|
+
|
8
|
+
# If loading the bin/spring file works, it'll run spring which will
|
9
|
+
# eventually call Kernel.exit. This means that in the client process
|
10
|
+
# we will never execute the lines after this block. But if the spring
|
11
|
+
# client is not invoked for whatever reason, then the Kernel.exit won't
|
12
|
+
# happen, and so we'll fall back to the lines after this block, which
|
13
|
+
# should cause the "unsprung" version of the command to run.
|
14
|
+
LOADER = <<CODE
|
15
|
+
begin
|
16
|
+
load File.expand_path("../spring", __FILE__)
|
17
|
+
rescue LoadError
|
18
|
+
end
|
19
|
+
CODE
|
20
|
+
|
21
|
+
# The defined? check ensures these lines don't execute when we load the
|
22
|
+
# binstub from the application process. Which means that in the application
|
23
|
+
# process we'll execute the lines which come after the LOADER block, which
|
24
|
+
# is what we want.
|
25
|
+
#
|
26
|
+
# Gem.try_activate would be called inside rubygems due to the #require.
|
27
|
+
# However, when that happens $! gets set and it appears that there is a
|
28
|
+
# LoadError, which can cause problems. So we activate the gem separately
|
29
|
+
# to requiring the file.
|
30
|
+
SPRING = <<CODE
|
31
|
+
#!/usr/bin/env ruby
|
32
|
+
|
33
|
+
unless defined?(Spring)
|
34
|
+
require "rubygems"
|
35
|
+
require "bundler"
|
36
|
+
|
37
|
+
ENV["GEM_HOME"] = ""
|
38
|
+
ENV["GEM_PATH"] = Bundler.bundle_path.to_s
|
39
|
+
Gem.paths = ENV
|
40
|
+
|
41
|
+
Gem.try_activate("spring/binstub")
|
42
|
+
require "spring/binstub"
|
43
|
+
end
|
44
|
+
CODE
|
45
|
+
|
46
|
+
OLD_BINSTUB = %{if !Process.respond_to?(:fork) || Gem::Specification.find_all_by_name("spring").empty?}
|
47
|
+
|
48
|
+
class Item
|
49
|
+
attr_reader :command, :existing
|
50
|
+
|
51
|
+
def initialize(command)
|
52
|
+
@command = command
|
53
|
+
|
54
|
+
if command.binstub.exist?
|
55
|
+
@existing = command.binstub.read
|
56
|
+
elsif command.name == "rails"
|
57
|
+
scriptfile = Spring.application_root_path.join("script/rails")
|
58
|
+
@existing = scriptfile.read if scriptfile.exist?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def status(text, stream = $stdout)
|
63
|
+
stream.puts "* #{command.binstub_name}: #{text}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def add
|
67
|
+
if existing
|
68
|
+
if existing.include?(OLD_BINSTUB)
|
69
|
+
fallback = existing.match(/#{Regexp.escape OLD_BINSTUB}\n(.*)else/m)[1]
|
70
|
+
fallback.gsub!(/^ /, "")
|
71
|
+
fallback = nil if fallback.include?("exec")
|
72
|
+
generate(fallback)
|
73
|
+
status "upgraded"
|
74
|
+
elsif existing =~ /load .*spring/
|
75
|
+
status "spring already present"
|
76
|
+
else
|
77
|
+
head, shebang, tail = existing.partition(SHEBANG)
|
78
|
+
|
79
|
+
if shebang.include?("ruby")
|
80
|
+
unless command.binstub.exist?
|
81
|
+
FileUtils.touch command.binstub
|
82
|
+
command.binstub.chmod 0755
|
83
|
+
end
|
84
|
+
|
85
|
+
File.write(command.binstub, "#{head}#{shebang}#{LOADER}#{tail}")
|
86
|
+
status "spring inserted"
|
87
|
+
else
|
88
|
+
status "doesn't appear to be ruby, so cannot use spring", $stderr
|
89
|
+
exit 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
else
|
93
|
+
generate
|
94
|
+
status "generated with spring"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def generate(fallback = nil)
|
99
|
+
unless fallback
|
100
|
+
fallback = "require 'bundler/setup'\n" \
|
101
|
+
"load Gem.bin_path('#{command.gem_name}', '#{command.exec_name}')\n"
|
102
|
+
end
|
103
|
+
|
104
|
+
File.write(command.binstub, "#!/usr/bin/env ruby\n#{LOADER}#{fallback}")
|
105
|
+
command.binstub.chmod 0755
|
106
|
+
end
|
107
|
+
|
108
|
+
def remove
|
109
|
+
if existing
|
110
|
+
File.write(command.binstub, existing.sub(LOADER, ""))
|
111
|
+
status "spring removed"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
attr_reader :bindir, :items
|
5
117
|
|
6
118
|
def self.description
|
7
119
|
"Generate spring based binstubs. Use --all to generate a binstub for all known commands."
|
8
120
|
end
|
9
121
|
|
122
|
+
def self.rails_command
|
123
|
+
@rails_command ||= CommandWrapper.new("rails")
|
124
|
+
end
|
125
|
+
|
10
126
|
def self.call(args)
|
11
127
|
require "spring/commands"
|
12
128
|
super
|
13
129
|
end
|
14
130
|
|
15
|
-
class RailsCommand
|
16
|
-
def fallback
|
17
|
-
<<CODE
|
18
|
-
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
19
|
-
require_relative '../config/boot'
|
20
|
-
require 'rails/commands'
|
21
|
-
CODE
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
131
|
def initialize(args)
|
26
132
|
super
|
27
133
|
|
28
|
-
@bindir
|
29
|
-
@
|
134
|
+
@bindir = env.root.join("bin")
|
135
|
+
@all = false
|
136
|
+
@mode = :add
|
137
|
+
@items = args.drop(1)
|
138
|
+
.map { |name| find_commands name }
|
139
|
+
.inject(Set.new, :|)
|
140
|
+
.map { |command| Item.new(command) }
|
30
141
|
end
|
31
142
|
|
32
143
|
def find_commands(name)
|
33
144
|
case name
|
34
145
|
when "--all"
|
35
|
-
|
146
|
+
@all = true
|
147
|
+
commands = Spring.commands.dup
|
36
148
|
commands.delete_if { |name, _| name.start_with?("rails_") }
|
37
|
-
commands
|
38
|
-
|
149
|
+
commands.values + [self.class.rails_command]
|
150
|
+
when "--remove"
|
151
|
+
@mode = :remove
|
152
|
+
[]
|
39
153
|
when "rails"
|
40
|
-
|
154
|
+
[self.class.rails_command]
|
41
155
|
else
|
42
156
|
if command = Spring.commands[name]
|
43
|
-
|
157
|
+
[command]
|
44
158
|
else
|
45
159
|
$stderr.puts "The '#{name}' command is not known to spring."
|
46
160
|
exit 1
|
@@ -49,32 +163,27 @@ CODE
|
|
49
163
|
end
|
50
164
|
|
51
165
|
def call
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
def generate_binstub(name, command)
|
57
|
-
File.write(bindir.join(name), <<CODE)
|
58
|
-
#!/usr/bin/env ruby
|
59
|
-
|
60
|
-
if !Process.respond_to?(:fork) || Gem::Specification.find_all_by_name("spring").empty?
|
61
|
-
#{fallback(name, command).strip.gsub(/^/, " ")}
|
62
|
-
else
|
63
|
-
ARGV.unshift "#{name}"
|
64
|
-
load Gem.bin_path("spring", "spring")
|
65
|
-
end
|
66
|
-
CODE
|
166
|
+
case @mode
|
167
|
+
when :add
|
168
|
+
bindir.mkdir unless bindir.exist?
|
67
169
|
|
68
|
-
|
69
|
-
|
170
|
+
unless spring_binstub.exist?
|
171
|
+
File.write(spring_binstub, SPRING)
|
172
|
+
spring_binstub.chmod 0755
|
173
|
+
end
|
70
174
|
|
71
|
-
|
72
|
-
|
73
|
-
|
175
|
+
items.each(&:add)
|
176
|
+
when :remove
|
177
|
+
spring_binstub.delete if @all
|
178
|
+
items.each(&:remove)
|
74
179
|
else
|
75
|
-
|
180
|
+
raise ArgumentError
|
76
181
|
end
|
77
182
|
end
|
183
|
+
|
184
|
+
def spring_binstub
|
185
|
+
bindir.join("spring")
|
186
|
+
end
|
78
187
|
end
|
79
188
|
end
|
80
189
|
end
|