appraisal 1.0.3 → 2.0.0
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 +1 -0
- data/CONTRIBUTING.md +6 -2
- data/Gemfile +5 -0
- data/README.md +5 -0
- data/appraisal.gemspec +1 -1
- data/lib/appraisal/appraisal.rb +10 -2
- data/lib/appraisal/bundler_dsl.rb +124 -0
- data/lib/appraisal/cli.rb +21 -2
- data/lib/appraisal/command.rb +22 -6
- data/lib/appraisal/dependency_list.rb +2 -1
- data/lib/appraisal/gemfile.rb +9 -126
- data/lib/appraisal/gemspec.rb +1 -1
- data/lib/appraisal/git_source.rb +7 -19
- data/lib/appraisal/group.rb +5 -46
- data/lib/appraisal/path_source.rb +7 -19
- data/lib/appraisal/platform.rb +16 -14
- data/lib/appraisal/travis_ci_helper.rb +65 -0
- data/lib/appraisal/version.rb +1 -1
- data/spec/acceptance/appraisals_file_bundler_dsl_compatibility_spec.rb +18 -2
- data/spec/acceptance/bundle_with_custom_path_spec.rb +22 -0
- data/spec/acceptance/cli/generate_spec.rb +6 -0
- data/spec/acceptance/cli/install_spec.rb +1 -1
- data/spec/acceptance/cli/list_spec.rb +28 -0
- data/spec/acceptance/cli/version_spec.rb +27 -0
- data/spec/acceptance/gemfile_dsl_compatibility_spec.rb +3 -3
- data/spec/acceptance/gemspec_spec.rb +3 -3
- data/spec/acceptance/travis_ci_integration_spec.rb +94 -0
- data/spec/appraisal/gemfile_spec.rb +147 -16
- data/spec/appraisal/utils_spec.rb +6 -5
- data/spec/spec_helper.rb +6 -2
- data/spec/support/acceptance_test_helpers.rb +24 -18
- data/spec/support/dependency_helpers.rb +7 -0
- metadata +15 -7
- data/features/support/dependency_helpers.rb +0 -35
@@ -26,7 +26,7 @@ describe 'Gemfile DSL compatibility' do
|
|
26
26
|
gem "waffle"
|
27
27
|
end
|
28
28
|
|
29
|
-
gem 'appraisal', path
|
29
|
+
gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
|
30
30
|
|
31
31
|
gemspec
|
32
32
|
Gemfile
|
@@ -111,7 +111,7 @@ describe 'Gemfile DSL compatibility' do
|
|
111
111
|
build_gem "bacon", "1.2.0"
|
112
112
|
|
113
113
|
build_gemfile <<-Gemfile
|
114
|
-
gem "appraisal", path
|
114
|
+
gem "appraisal", :path => #{PROJECT_ROOT.inspect}
|
115
115
|
gem "bacon", "1.2.0"
|
116
116
|
Gemfile
|
117
117
|
|
@@ -142,7 +142,7 @@ describe 'Gemfile DSL compatibility' do
|
|
142
142
|
build_gemspec
|
143
143
|
|
144
144
|
build_gemfile <<-Gemfile
|
145
|
-
gem "appraisal", path
|
145
|
+
gem "appraisal", :path => #{PROJECT_ROOT.inspect}
|
146
146
|
|
147
147
|
group :plugin do
|
148
148
|
gemspec
|
@@ -10,7 +10,7 @@ describe 'Gemspec' do
|
|
10
10
|
build_gemspec
|
11
11
|
|
12
12
|
write_file 'Gemfile', <<-Gemfile
|
13
|
-
gem 'appraisal', path
|
13
|
+
gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
|
14
14
|
|
15
15
|
gemspec
|
16
16
|
Gemfile
|
@@ -26,9 +26,9 @@ describe 'Gemspec' do
|
|
26
26
|
build_gemspec 'specdir'
|
27
27
|
|
28
28
|
write_file 'Gemfile', <<-Gemfile
|
29
|
-
gem 'appraisal', path
|
29
|
+
gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
|
30
30
|
|
31
|
-
gemspec path
|
31
|
+
gemspec :path => './specdir'
|
32
32
|
Gemfile
|
33
33
|
|
34
34
|
run 'bundle install --local'
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "active_support/core_ext/kernel/reporting"
|
3
|
+
require "appraisal/travis_ci_helper"
|
4
|
+
|
5
|
+
describe "Travis CI integration" do
|
6
|
+
before do
|
7
|
+
build_appraisal_file <<-Appraisals.strip_heredoc
|
8
|
+
appraise "1.0.0" do
|
9
|
+
gem "dummy", "1.0.0"
|
10
|
+
end
|
11
|
+
|
12
|
+
appraise "1.1.0" do
|
13
|
+
gem "dummy", "1.1.0"
|
14
|
+
end
|
15
|
+
Appraisals
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when user runs `appraisal generate --travis`" do
|
19
|
+
it "displays a correct Gemfile directive" do
|
20
|
+
output = run("appraisal generate --travis")
|
21
|
+
|
22
|
+
expect(output).to include <<-stdout.strip_heredoc
|
23
|
+
# Put this in your .travis.yml
|
24
|
+
gemfiles:
|
25
|
+
- gemfiles/1.0.0.gemfile
|
26
|
+
- gemfiles/1.1.0.gemfile
|
27
|
+
stdout
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "When user has .travis.yml" do
|
32
|
+
context "with no gemfiles directive" do
|
33
|
+
before do
|
34
|
+
write_file ".travis.yml", ""
|
35
|
+
end
|
36
|
+
|
37
|
+
it "displays a warning message when run `appraisal generate`" do
|
38
|
+
warning = run "appraisal generate 2>&1"
|
39
|
+
|
40
|
+
expect(warning).to include no_configuration_warning
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with incorrect gemfiles directive" do
|
45
|
+
before do
|
46
|
+
write_file ".travis.yml", <<-travis_yml
|
47
|
+
gemfiles:
|
48
|
+
- gemfiles/1.0.0.gemfile
|
49
|
+
- gemfiles/1.0.1.gemfile
|
50
|
+
travis_yml
|
51
|
+
end
|
52
|
+
|
53
|
+
it "displays a warning message when run `appraisal generate`" do
|
54
|
+
warning = run "appraisal generate 2>&1"
|
55
|
+
|
56
|
+
expect(warning).to include invalid_configuration_warning
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "with correct gemfiles directive" do
|
61
|
+
before do
|
62
|
+
write_file ".travis.yml", <<-travis_yml
|
63
|
+
gemfiles:
|
64
|
+
- gemfiles/1.0.0.gemfile
|
65
|
+
- gemfiles/1.1.0.gemfile
|
66
|
+
travis_yml
|
67
|
+
end
|
68
|
+
|
69
|
+
it "does not display any warning when run `appraisal generate`" do
|
70
|
+
warning = run "appraisal generate 2>&1"
|
71
|
+
|
72
|
+
expect(warning).not_to include no_configuration_warning
|
73
|
+
expect(warning).not_to include invalid_configuration_warning
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when user does not have .travis.yml" do
|
79
|
+
it "does not display any warning when run `appraisal generate`" do
|
80
|
+
warning = run "appraisal generate 2>&1"
|
81
|
+
|
82
|
+
expect(warning).not_to include no_configuration_warning
|
83
|
+
expect(warning).not_to include invalid_configuration_warning
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def no_configuration_warning
|
88
|
+
Appraisal::TravisCIHelper::NO_CONFIGURATION_WARNING
|
89
|
+
end
|
90
|
+
|
91
|
+
def invalid_configuration_warning
|
92
|
+
Appraisal::TravisCIHelper::INVALID_CONFIGURATION_WARNING
|
93
|
+
end
|
94
|
+
end
|
@@ -17,6 +17,13 @@ describe Appraisal::Gemfile do
|
|
17
17
|
expect(gemfile.to_s.strip).to eq %{source "one"\nsource "two"}
|
18
18
|
end
|
19
19
|
|
20
|
+
it "ignores duplicate sources" do
|
21
|
+
gemfile = Appraisal::Gemfile.new
|
22
|
+
gemfile.source "one"
|
23
|
+
gemfile.source "one"
|
24
|
+
expect(gemfile.to_s.strip).to eq %{source "one"}
|
25
|
+
end
|
26
|
+
|
20
27
|
it "preserves dependency order" do
|
21
28
|
gemfile = Appraisal::Gemfile.new
|
22
29
|
gemfile.gem "one"
|
@@ -45,22 +52,36 @@ describe Appraisal::Gemfile do
|
|
45
52
|
GEMFILE
|
46
53
|
end
|
47
54
|
|
48
|
-
it
|
55
|
+
it "supports nested DSL within group syntax" do
|
49
56
|
gemfile = Appraisal::Gemfile.new
|
50
57
|
|
51
|
-
|
52
|
-
|
58
|
+
gemfile.group :development, :test do
|
59
|
+
platforms :jruby do
|
53
60
|
gem "one"
|
54
61
|
end
|
62
|
+
git "git://example.com/repo.git" do
|
63
|
+
gem "two"
|
64
|
+
end
|
65
|
+
path ".." do
|
66
|
+
gem "three"
|
67
|
+
end
|
55
68
|
end
|
56
69
|
|
57
70
|
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
58
71
|
group :development, :test do
|
59
|
-
|
72
|
+
git "git://example.com/repo.git" do
|
73
|
+
gem "two"
|
74
|
+
end
|
75
|
+
|
76
|
+
path "../.." do
|
77
|
+
gem "three"
|
78
|
+
end
|
79
|
+
|
80
|
+
platforms :jruby do
|
81
|
+
gem "one"
|
82
|
+
end
|
60
83
|
end
|
61
84
|
GEMFILE
|
62
|
-
|
63
|
-
expect(warning).to match(/deprecated/)
|
64
85
|
end
|
65
86
|
|
66
87
|
it 'supports platform syntax' do
|
@@ -77,20 +98,130 @@ describe Appraisal::Gemfile do
|
|
77
98
|
GEMFILE
|
78
99
|
end
|
79
100
|
|
80
|
-
it
|
101
|
+
it "supports nested DSL within platform syntax" do
|
102
|
+
gemfile = Appraisal::Gemfile.new
|
103
|
+
|
104
|
+
gemfile.platform :jruby do
|
105
|
+
group :development, :test do
|
106
|
+
gem "one"
|
107
|
+
end
|
108
|
+
git "git://example.com/repo.git" do
|
109
|
+
gem "two"
|
110
|
+
end
|
111
|
+
path ".." do
|
112
|
+
gem "three"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
117
|
+
platforms :jruby do
|
118
|
+
git "git://example.com/repo.git" do
|
119
|
+
gem "two"
|
120
|
+
end
|
121
|
+
|
122
|
+
path "../.." do
|
123
|
+
gem "three"
|
124
|
+
end
|
125
|
+
|
126
|
+
group :development, :test do
|
127
|
+
gem "one"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
GEMFILE
|
131
|
+
end
|
132
|
+
|
133
|
+
it "supports git syntax" do
|
81
134
|
gemfile = Appraisal::Gemfile.new
|
82
135
|
|
83
|
-
gemfile.
|
136
|
+
gemfile.git "git://example.com/repo.git" do
|
84
137
|
gem "one"
|
85
138
|
end
|
86
139
|
|
87
140
|
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
141
|
+
git "git://example.com/repo.git" do
|
142
|
+
gem "one"
|
143
|
+
end
|
144
|
+
GEMFILE
|
145
|
+
end
|
146
|
+
|
147
|
+
it "supports nested DSL within git syntax" do
|
148
|
+
gemfile = Appraisal::Gemfile.new
|
149
|
+
|
150
|
+
gemfile.git "git://example.com/repo.git" do
|
151
|
+
group :development, :test do
|
152
|
+
gem "one"
|
153
|
+
end
|
88
154
|
platforms :jruby do
|
155
|
+
gem "two"
|
156
|
+
end
|
157
|
+
path ".." do
|
158
|
+
gem "three"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
163
|
+
git "git://example.com/repo.git" do
|
164
|
+
path "../.." do
|
165
|
+
gem "three"
|
166
|
+
end
|
167
|
+
|
168
|
+
group :development, :test do
|
169
|
+
gem "one"
|
170
|
+
end
|
171
|
+
|
172
|
+
platforms :jruby do
|
173
|
+
gem "two"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
GEMFILE
|
177
|
+
end
|
178
|
+
|
179
|
+
it "supports path syntax" do
|
180
|
+
gemfile = Appraisal::Gemfile.new
|
181
|
+
|
182
|
+
gemfile.path "../path" do
|
183
|
+
gem "one"
|
184
|
+
end
|
185
|
+
|
186
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
187
|
+
path "../../path" do
|
89
188
|
gem "one"
|
90
189
|
end
|
91
190
|
GEMFILE
|
92
191
|
end
|
93
192
|
|
193
|
+
it "supports nested DSL within path syntax" do
|
194
|
+
gemfile = Appraisal::Gemfile.new
|
195
|
+
|
196
|
+
gemfile.path "../path" do
|
197
|
+
group :development, :test do
|
198
|
+
gem "one"
|
199
|
+
end
|
200
|
+
platforms :jruby do
|
201
|
+
gem "two"
|
202
|
+
end
|
203
|
+
git "git://example.com/repo.git" do
|
204
|
+
gem "three"
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
209
|
+
path "../../path" do
|
210
|
+
git "git://example.com/repo.git" do
|
211
|
+
gem "three"
|
212
|
+
end
|
213
|
+
|
214
|
+
group :development, :test do
|
215
|
+
gem "one"
|
216
|
+
end
|
217
|
+
|
218
|
+
platforms :jruby do
|
219
|
+
gem "two"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
GEMFILE
|
223
|
+
end
|
224
|
+
|
94
225
|
context "excess new line" do
|
95
226
|
context "no contents" do
|
96
227
|
it "shows empty string" do
|
@@ -123,21 +254,21 @@ describe Appraisal::Gemfile do
|
|
123
254
|
context "in :path option" do
|
124
255
|
it "handles dot path" do
|
125
256
|
gemfile = Appraisal::Gemfile.new
|
126
|
-
gemfile.gem "bacon", path
|
257
|
+
gemfile.gem "bacon", :path => "."
|
127
258
|
|
128
259
|
expect(gemfile.to_s).to eq %(gem "bacon", :path => "../")
|
129
260
|
end
|
130
261
|
|
131
262
|
it "handles relative path" do
|
132
263
|
gemfile = Appraisal::Gemfile.new
|
133
|
-
gemfile.gem "bacon", path
|
264
|
+
gemfile.gem "bacon", :path => "../bacon"
|
134
265
|
|
135
266
|
expect(gemfile.to_s).to eq %(gem "bacon", :path => "../../bacon")
|
136
267
|
end
|
137
268
|
|
138
269
|
it "handles absolute path" do
|
139
270
|
gemfile = Appraisal::Gemfile.new
|
140
|
-
gemfile.gem "bacon", path
|
271
|
+
gemfile.gem "bacon", :path => "/tmp"
|
141
272
|
|
142
273
|
expect(gemfile.to_s).to eq %(gem "bacon", :path => "/tmp")
|
143
274
|
end
|
@@ -146,28 +277,28 @@ describe Appraisal::Gemfile do
|
|
146
277
|
context "in :git option" do
|
147
278
|
it "handles dot git path" do
|
148
279
|
gemfile = Appraisal::Gemfile.new
|
149
|
-
gemfile.gem "bacon", git
|
280
|
+
gemfile.gem "bacon", :git => "."
|
150
281
|
|
151
282
|
expect(gemfile.to_s).to eq %(gem "bacon", :git => "../")
|
152
283
|
end
|
153
284
|
|
154
285
|
it "handles relative git path" do
|
155
286
|
gemfile = Appraisal::Gemfile.new
|
156
|
-
gemfile.gem "bacon", git
|
287
|
+
gemfile.gem "bacon", :git => "../bacon"
|
157
288
|
|
158
289
|
expect(gemfile.to_s).to eq %(gem "bacon", :git => "../../bacon")
|
159
290
|
end
|
160
291
|
|
161
292
|
it "handles absolute git path" do
|
162
293
|
gemfile = Appraisal::Gemfile.new
|
163
|
-
gemfile.gem "bacon", git
|
294
|
+
gemfile.gem "bacon", :git => "/tmp"
|
164
295
|
|
165
296
|
expect(gemfile.to_s).to eq %(gem "bacon", :git => "/tmp")
|
166
297
|
end
|
167
298
|
|
168
299
|
it "handles git uri" do
|
169
300
|
gemfile = Appraisal::Gemfile.new
|
170
|
-
gemfile.gem "bacon", git
|
301
|
+
gemfile.gem "bacon", :git => "git@github.com:bacon/bacon.git"
|
171
302
|
|
172
303
|
expect(gemfile.to_s).
|
173
304
|
to eq %(gem "bacon", :git => "git@github.com:bacon/bacon.git")
|
@@ -279,7 +410,7 @@ describe Appraisal::Gemfile do
|
|
279
410
|
context "in gemspec directive" do
|
280
411
|
it "handles gemspec path" do
|
281
412
|
gemfile = Appraisal::Gemfile.new
|
282
|
-
gemfile.gemspec path
|
413
|
+
gemfile.gemspec :path => "."
|
283
414
|
|
284
415
|
expect(gemfile.to_s).to eq %(gemspec :path => "../")
|
285
416
|
end
|
@@ -4,17 +4,18 @@ require 'appraisal/utils'
|
|
4
4
|
describe Appraisal::Utils do
|
5
5
|
describe '.format_string' do
|
6
6
|
it 'prints out a nice looking hash without a brackets' do
|
7
|
-
hash = { :foo => 'bar'
|
7
|
+
hash = { :foo => 'bar' }
|
8
|
+
expect(Appraisal::Utils.format_string(hash)).to eq(':foo => "bar"')
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
hash = { 'baz' => { :ball => 'boo' }}
|
11
|
+
expect(Appraisal::Utils.format_string(hash)).
|
12
|
+
to eq('"baz" => { :ball => "boo" }')
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
describe '.format_arguments' do
|
16
17
|
it 'prints out arguments without enclosing square brackets' do
|
17
|
-
arguments = [:foo, bar
|
18
|
+
arguments = [:foo, { :bar => { :baz => 'ball' }}]
|
18
19
|
|
19
20
|
expect(Appraisal::Utils.format_arguments(arguments)).to eq(
|
20
21
|
':foo, :bar => { :baz => "ball" }'
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
|
-
|
4
|
-
|
3
|
+
require "./spec/support/acceptance_test_helpers"
|
4
|
+
require "./spec/support/stream_helpers"
|
5
5
|
|
6
6
|
PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
|
7
7
|
TMP_GEM_ROOT = File.join(PROJECT_ROOT, "tmp", "gems")
|
@@ -14,4 +14,8 @@ RSpec.configure do |config|
|
|
14
14
|
end
|
15
15
|
|
16
16
|
config.include AcceptanceTestHelpers, :type => :acceptance
|
17
|
+
|
18
|
+
config.before :suite do
|
19
|
+
FileUtils.rm_rf TMP_GEM_ROOT
|
20
|
+
end
|
17
21
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'rspec/expectations/expectation_target'
|
2
2
|
require 'active_support/core_ext/string/strip'
|
3
|
+
require 'active_support/core_ext/string/filters'
|
3
4
|
require 'active_support/concern'
|
4
5
|
require 'appraisal/utils'
|
5
|
-
|
6
|
+
require "./spec/support/dependency_helpers"
|
6
7
|
|
7
8
|
module AcceptanceTestHelpers
|
8
9
|
extend ActiveSupport::Concern
|
@@ -14,15 +15,7 @@ module AcceptanceTestHelpers
|
|
14
15
|
included do
|
15
16
|
metadata[:type] = :acceptance
|
16
17
|
|
17
|
-
before :
|
18
|
-
build_default_dummy_gems
|
19
|
-
end
|
20
|
-
|
21
|
-
after :all do
|
22
|
-
cleanup_gem_home
|
23
|
-
end
|
24
|
-
|
25
|
-
before parallel: true do
|
18
|
+
before :parallel => true do
|
26
19
|
unless Appraisal::Utils.support_parallel_installation?
|
27
20
|
pending 'This Bundler version does not support --jobs flag.'
|
28
21
|
end
|
@@ -32,6 +25,8 @@ module AcceptanceTestHelpers
|
|
32
25
|
cleanup_artifacts
|
33
26
|
save_environment_variables
|
34
27
|
unset_bundler_environment_variables
|
28
|
+
build_default_dummy_gems
|
29
|
+
ensure_bundler_is_available
|
35
30
|
add_binstub_path
|
36
31
|
build_default_gemfile
|
37
32
|
end
|
@@ -115,28 +110,39 @@ module AcceptanceTestHelpers
|
|
115
110
|
FileUtils.rm_rf current_directory
|
116
111
|
end
|
117
112
|
|
118
|
-
def cleanup_gem_home
|
119
|
-
FileUtils.rm_rf TMP_GEM_ROOT
|
120
|
-
end
|
121
|
-
|
122
113
|
def build_default_dummy_gems
|
123
|
-
FileUtils.rm_rf(TMP_GEM_ROOT)
|
124
114
|
FileUtils.mkdir_p(TMP_GEM_ROOT)
|
125
115
|
|
126
116
|
build_gem 'dummy', '1.0.0'
|
127
117
|
build_gem 'dummy', '1.1.0'
|
128
118
|
end
|
129
119
|
|
120
|
+
def ensure_bundler_is_available
|
121
|
+
run "bundle -v 2>&1", false
|
122
|
+
|
123
|
+
if $?.exitstatus != 0
|
124
|
+
puts <<-WARNING.squish.strip_heredoc
|
125
|
+
Reinstall Bundler to #{TMP_GEM_ROOT} as `BUNDLE_DISABLE_SHARED_GEMS`
|
126
|
+
is enabled.
|
127
|
+
WARNING
|
128
|
+
|
129
|
+
run "gem install bundler --install-dir '#{TMP_GEM_ROOT}'"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
130
133
|
def build_default_gemfile
|
131
134
|
build_gemfile <<-Gemfile
|
132
135
|
source 'https://rubygems.org'
|
133
136
|
|
134
137
|
gem 'appraisal', :path => '#{PROJECT_ROOT}'
|
138
|
+
|
139
|
+
if RUBY_VERSION < "1.9"
|
140
|
+
gem "i18n", "~> 0.6.0"
|
141
|
+
gem "activesupport", "~> 3.2.21"
|
142
|
+
end
|
135
143
|
Gemfile
|
136
144
|
|
137
|
-
|
138
|
-
`bundle install --binstubs --local`
|
139
|
-
end
|
145
|
+
run "bundle install --binstubs --local"
|
140
146
|
end
|
141
147
|
|
142
148
|
def in_test_directory(&block)
|