appraisal 2.5.0 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/dynamic-security.yml +19 -0
- data/.github/workflows/main.yml +55 -0
- data/.gitignore +1 -0
- data/Gemfile +5 -0
- data/README.md +14 -5
- data/Rakefile +8 -6
- data/SECURITY.md +20 -0
- data/appraisal.gemspec +14 -17
- data/bin/bundle +109 -0
- data/bin/rspec +27 -0
- data/{bin → exe}/appraisal +6 -4
- data/lib/appraisal/appraisal.rb +20 -17
- data/lib/appraisal/appraisal_file.rb +8 -6
- data/lib/appraisal/bundler_dsl.rb +17 -13
- data/lib/appraisal/cli.rb +49 -43
- data/lib/appraisal/command.rb +3 -1
- data/lib/appraisal/conditional.rb +4 -0
- data/lib/appraisal/customize.rb +22 -2
- data/lib/appraisal/dependency.rb +4 -2
- data/lib/appraisal/dependency_list.rb +4 -2
- data/lib/appraisal/errors.rb +2 -0
- data/lib/appraisal/gemfile.rb +2 -0
- data/lib/appraisal/gemspec.rb +5 -3
- data/lib/appraisal/git.rb +3 -1
- data/lib/appraisal/group.rb +7 -5
- data/lib/appraisal/path.rb +3 -1
- data/lib/appraisal/platform.rb +7 -5
- data/lib/appraisal/source.rb +7 -5
- data/lib/appraisal/task.rb +8 -6
- data/lib/appraisal/utils.rb +6 -7
- data/lib/appraisal/version.rb +3 -1
- data/lib/appraisal.rb +4 -2
- data/spec/acceptance/appraisals_file_bundler_dsl_compatibility_spec.rb +55 -24
- data/spec/acceptance/bundle_with_custom_path_spec.rb +26 -20
- data/spec/acceptance/bundle_without_spec.rb +10 -10
- data/spec/acceptance/cli/clean_spec.rb +13 -11
- data/spec/acceptance/cli/generate_spec.rb +14 -12
- data/spec/acceptance/cli/help_spec.rb +15 -13
- data/spec/acceptance/cli/install_spec.rb +33 -47
- data/spec/acceptance/cli/list_spec.rb +11 -9
- data/spec/acceptance/cli/run_spec.rb +26 -24
- data/spec/acceptance/cli/update_spec.rb +20 -18
- data/spec/acceptance/cli/version_spec.rb +3 -1
- data/spec/acceptance/cli/with_no_arguments_spec.rb +10 -8
- data/spec/acceptance/gemfile_dsl_compatibility_spec.rb +38 -36
- data/spec/acceptance/gemspec_spec.rb +26 -24
- data/spec/appraisal/appraisal_file_spec.rb +66 -4
- data/spec/appraisal/appraisal_spec.rb +20 -23
- data/spec/appraisal/customize_spec.rb +133 -11
- data/spec/appraisal/dependency_list_spec.rb +3 -1
- data/spec/appraisal/gemfile_spec.rb +39 -38
- data/spec/appraisal/utils_spec.rb +21 -28
- data/spec/spec_helper.rb +14 -6
- data/spec/support/acceptance_test_helpers.rb +31 -24
- data/spec/support/dependency_helpers.rb +29 -15
- data/spec/support/stream_helpers.rb +2 -0
- metadata +10 -34
- data/.rspec +0 -1
@@ -1,27 +1,29 @@
|
|
1
|
-
|
2
|
-
require 'appraisal/gemfile'
|
3
|
-
require 'active_support/core_ext/string/strip'
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
3
|
+
require "spec_helper"
|
4
|
+
require "appraisal/gemfile"
|
5
|
+
require "active_support/core_ext/string/strip"
|
6
|
+
|
7
|
+
RSpec.describe Appraisal::Gemfile do
|
6
8
|
include StreamHelpers
|
7
9
|
|
8
10
|
it "supports gemfiles without sources" do
|
9
11
|
gemfile = Appraisal::Gemfile.new
|
10
|
-
expect(gemfile.to_s.strip).to eq
|
12
|
+
expect(gemfile.to_s.strip).to eq ""
|
11
13
|
end
|
12
14
|
|
13
15
|
it "supports multiple sources" do
|
14
16
|
gemfile = Appraisal::Gemfile.new
|
15
17
|
gemfile.source "one"
|
16
18
|
gemfile.source "two"
|
17
|
-
expect(gemfile.to_s.strip).to eq %
|
19
|
+
expect(gemfile.to_s.strip).to eq %(source "one"\nsource "two")
|
18
20
|
end
|
19
21
|
|
20
22
|
it "ignores duplicate sources" do
|
21
23
|
gemfile = Appraisal::Gemfile.new
|
22
24
|
gemfile.source "one"
|
23
25
|
gemfile.source "one"
|
24
|
-
expect(gemfile.to_s.strip).to eq %
|
26
|
+
expect(gemfile.to_s.strip).to eq %(source "one")
|
25
27
|
end
|
26
28
|
|
27
29
|
it "preserves dependency order" do
|
@@ -35,10 +37,10 @@ describe Appraisal::Gemfile do
|
|
35
37
|
it "supports symbol sources" do
|
36
38
|
gemfile = Appraisal::Gemfile.new
|
37
39
|
gemfile.source :one
|
38
|
-
expect(gemfile.to_s.strip).to eq %
|
40
|
+
expect(gemfile.to_s.strip).to eq %(source :one)
|
39
41
|
end
|
40
42
|
|
41
|
-
it
|
43
|
+
it "supports group syntax" do
|
42
44
|
gemfile = Appraisal::Gemfile.new
|
43
45
|
|
44
46
|
gemfile.group :development, :test do
|
@@ -84,7 +86,7 @@ describe Appraisal::Gemfile do
|
|
84
86
|
GEMFILE
|
85
87
|
end
|
86
88
|
|
87
|
-
it
|
89
|
+
it "supports platform syntax" do
|
88
90
|
gemfile = Appraisal::Gemfile.new
|
89
91
|
|
90
92
|
gemfile.platform :jruby do
|
@@ -226,7 +228,7 @@ describe Appraisal::Gemfile do
|
|
226
228
|
context "no contents" do
|
227
229
|
it "shows empty string" do
|
228
230
|
gemfile = Appraisal::Gemfile.new
|
229
|
-
expect(gemfile.to_s).to eq
|
231
|
+
expect(gemfile.to_s).to eq ""
|
230
232
|
end
|
231
233
|
end
|
232
234
|
|
@@ -251,26 +253,26 @@ describe Appraisal::Gemfile do
|
|
251
253
|
end
|
252
254
|
|
253
255
|
context "relative path handling" do
|
254
|
-
before { stub_const(
|
256
|
+
before { stub_const("RUBY_VERSION", "2.3.0") }
|
255
257
|
|
256
258
|
context "in :path option" do
|
257
259
|
it "handles dot path" do
|
258
260
|
gemfile = Appraisal::Gemfile.new
|
259
|
-
gemfile.gem "bacon", :
|
261
|
+
gemfile.gem "bacon", path: "."
|
260
262
|
|
261
263
|
expect(gemfile.to_s).to eq %(gem "bacon", path: "../")
|
262
264
|
end
|
263
265
|
|
264
266
|
it "handles relative path" do
|
265
267
|
gemfile = Appraisal::Gemfile.new
|
266
|
-
gemfile.gem "bacon", :
|
268
|
+
gemfile.gem "bacon", path: "../bacon"
|
267
269
|
|
268
270
|
expect(gemfile.to_s).to eq %(gem "bacon", path: "../../bacon")
|
269
271
|
end
|
270
272
|
|
271
273
|
it "handles absolute path" do
|
272
274
|
gemfile = Appraisal::Gemfile.new
|
273
|
-
gemfile.gem "bacon", :
|
275
|
+
gemfile.gem "bacon", path: "/tmp"
|
274
276
|
|
275
277
|
expect(gemfile.to_s).to eq %(gem "bacon", path: "/tmp")
|
276
278
|
end
|
@@ -279,31 +281,30 @@ describe Appraisal::Gemfile do
|
|
279
281
|
context "in :git option" do
|
280
282
|
it "handles dot git path" do
|
281
283
|
gemfile = Appraisal::Gemfile.new
|
282
|
-
gemfile.gem "bacon", :
|
284
|
+
gemfile.gem "bacon", git: "."
|
283
285
|
|
284
286
|
expect(gemfile.to_s).to eq %(gem "bacon", git: "../")
|
285
287
|
end
|
286
288
|
|
287
289
|
it "handles relative git path" do
|
288
290
|
gemfile = Appraisal::Gemfile.new
|
289
|
-
gemfile.gem "bacon", :
|
291
|
+
gemfile.gem "bacon", git: "../bacon"
|
290
292
|
|
291
293
|
expect(gemfile.to_s).to eq %(gem "bacon", git: "../../bacon")
|
292
294
|
end
|
293
295
|
|
294
296
|
it "handles absolute git path" do
|
295
297
|
gemfile = Appraisal::Gemfile.new
|
296
|
-
gemfile.gem "bacon", :
|
298
|
+
gemfile.gem "bacon", git: "/tmp"
|
297
299
|
|
298
300
|
expect(gemfile.to_s).to eq %(gem "bacon", git: "/tmp")
|
299
301
|
end
|
300
302
|
|
301
303
|
it "handles git uri" do
|
302
304
|
gemfile = Appraisal::Gemfile.new
|
303
|
-
gemfile.gem "bacon", :
|
305
|
+
gemfile.gem "bacon", git: "git@github.com:bacon/bacon.git"
|
304
306
|
|
305
|
-
expect(gemfile.to_s).
|
306
|
-
to eq %(gem "bacon", git: "git@github.com:bacon/bacon.git")
|
307
|
+
expect(gemfile.to_s).to eq %(gem "bacon", git: "git@github.com:bacon/bacon.git")
|
307
308
|
end
|
308
309
|
end
|
309
310
|
|
@@ -315,11 +316,11 @@ describe Appraisal::Gemfile do
|
|
315
316
|
gem "bacon"
|
316
317
|
end
|
317
318
|
|
318
|
-
expect(gemfile.to_s).to eq <<-
|
319
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
319
320
|
path "../" do
|
320
321
|
gem "bacon"
|
321
322
|
end
|
322
|
-
|
323
|
+
GEMFILE
|
323
324
|
end
|
324
325
|
|
325
326
|
it "handles relative path" do
|
@@ -329,11 +330,11 @@ describe Appraisal::Gemfile do
|
|
329
330
|
gem "bacon"
|
330
331
|
end
|
331
332
|
|
332
|
-
expect(gemfile.to_s).to eq <<-
|
333
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
333
334
|
path "../../bacon" do
|
334
335
|
gem "bacon"
|
335
336
|
end
|
336
|
-
|
337
|
+
GEMFILE
|
337
338
|
end
|
338
339
|
|
339
340
|
it "handles absolute path" do
|
@@ -343,11 +344,11 @@ describe Appraisal::Gemfile do
|
|
343
344
|
gem "bacon"
|
344
345
|
end
|
345
346
|
|
346
|
-
expect(gemfile.to_s).to eq <<-
|
347
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
347
348
|
path "/tmp" do
|
348
349
|
gem "bacon"
|
349
350
|
end
|
350
|
-
|
351
|
+
GEMFILE
|
351
352
|
end
|
352
353
|
end
|
353
354
|
|
@@ -359,11 +360,11 @@ describe Appraisal::Gemfile do
|
|
359
360
|
gem "bacon"
|
360
361
|
end
|
361
362
|
|
362
|
-
expect(gemfile.to_s).to eq <<-
|
363
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
363
364
|
git "../" do
|
364
365
|
gem "bacon"
|
365
366
|
end
|
366
|
-
|
367
|
+
GEMFILE
|
367
368
|
end
|
368
369
|
|
369
370
|
it "handles relative git path" do
|
@@ -373,11 +374,11 @@ describe Appraisal::Gemfile do
|
|
373
374
|
gem "bacon"
|
374
375
|
end
|
375
376
|
|
376
|
-
expect(gemfile.to_s).to eq <<-
|
377
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
377
378
|
git "../../bacon" do
|
378
379
|
gem "bacon"
|
379
380
|
end
|
380
|
-
|
381
|
+
GEMFILE
|
381
382
|
end
|
382
383
|
|
383
384
|
it "handles absolute git path" do
|
@@ -387,11 +388,11 @@ describe Appraisal::Gemfile do
|
|
387
388
|
gem "bacon"
|
388
389
|
end
|
389
390
|
|
390
|
-
expect(gemfile.to_s).to eq <<-
|
391
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
391
392
|
git "/tmp" do
|
392
393
|
gem "bacon"
|
393
394
|
end
|
394
|
-
|
395
|
+
GEMFILE
|
395
396
|
end
|
396
397
|
|
397
398
|
it "handles git uri" do
|
@@ -401,18 +402,18 @@ describe Appraisal::Gemfile do
|
|
401
402
|
gem "bacon"
|
402
403
|
end
|
403
404
|
|
404
|
-
expect(gemfile.to_s).to eq <<-
|
405
|
+
expect(gemfile.to_s).to eq <<-GEMFILE.strip_heredoc.strip
|
405
406
|
git "git@github.com:bacon/bacon.git" do
|
406
407
|
gem "bacon"
|
407
408
|
end
|
408
|
-
|
409
|
+
GEMFILE
|
409
410
|
end
|
410
411
|
end
|
411
412
|
|
412
413
|
context "in gemspec directive" do
|
413
414
|
it "handles gemspec path" do
|
414
415
|
gemfile = Appraisal::Gemfile.new
|
415
|
-
gemfile.gemspec :
|
416
|
+
gemfile.gemspec path: "."
|
416
417
|
|
417
418
|
expect(gemfile.to_s).to eq %(gemspec path: "../")
|
418
419
|
end
|
@@ -420,12 +421,12 @@ describe Appraisal::Gemfile do
|
|
420
421
|
end
|
421
422
|
|
422
423
|
context "git_source support" do
|
423
|
-
before { stub_const(
|
424
|
+
before { stub_const("RUBY_VERSION", "2.3.0") }
|
424
425
|
|
425
426
|
it "stores git_source declaration and apply it as git option" do
|
426
427
|
gemfile = Appraisal::Gemfile.new
|
427
428
|
gemfile.git_source(:custom_source) { |repo| "path/#{repo}" }
|
428
|
-
gemfile.gem "bacon", :
|
429
|
+
gemfile.gem "bacon", custom_source: "bacon_pancake"
|
429
430
|
|
430
431
|
expect(gemfile.to_s).to eq %(gem "bacon", git: "../path/bacon_pancake")
|
431
432
|
end
|
@@ -1,34 +1,32 @@
|
|
1
|
-
|
2
|
-
require 'appraisal/utils'
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
require "spec_helper"
|
4
|
+
require "appraisal/utils"
|
5
|
+
|
6
|
+
RSpec.describe Appraisal::Utils do
|
7
|
+
describe ".format_string" do
|
6
8
|
it "prints out a nice looking hash without brackets with new syntax" do
|
7
|
-
hash = { :
|
9
|
+
hash = { foo: "bar" }
|
8
10
|
expect(Appraisal::Utils.format_string(hash)).to eq('foo: "bar"')
|
9
11
|
|
10
|
-
hash = {
|
11
|
-
expect(Appraisal::Utils.format_string(hash)).
|
12
|
-
to eq('"baz" => { ball: "boo" }')
|
12
|
+
hash = { "baz" => { ball: "boo" } }
|
13
|
+
expect(Appraisal::Utils.format_string(hash)).to eq('"baz" => { ball: "boo" }')
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
describe
|
17
|
-
before { stub_const(
|
17
|
+
describe ".format_arguments" do
|
18
|
+
before { stub_const("RUBY_VERSION", "2.3.0") }
|
18
19
|
|
19
|
-
it
|
20
|
-
arguments = [:foo, { :
|
20
|
+
it "prints out arguments without enclosing square brackets" do
|
21
|
+
arguments = [:foo, { bar: { baz: "ball" } }]
|
21
22
|
|
22
|
-
expect(Appraisal::Utils.format_arguments(arguments)).to eq(
|
23
|
-
':foo, bar: { baz: "ball" }'
|
24
|
-
)
|
23
|
+
expect(Appraisal::Utils.format_arguments(arguments)).to eq(':foo, bar: { baz: "ball" }')
|
25
24
|
end
|
26
25
|
|
27
26
|
it "returns nil if arguments is empty" do
|
28
27
|
arguments = []
|
29
28
|
|
30
|
-
expect(Appraisal::Utils.format_arguments(arguments)).
|
31
|
-
to eq(nil)
|
29
|
+
expect(Appraisal::Utils.format_arguments(arguments)).to eq(nil)
|
32
30
|
end
|
33
31
|
end
|
34
32
|
|
@@ -45,25 +43,20 @@ describe Appraisal::Utils do
|
|
45
43
|
expect(Appraisal::Utils.prefix_path("/tmp")).to eq "/tmp"
|
46
44
|
end
|
47
45
|
|
48
|
-
it "strips out './' from path"
|
49
|
-
expect(Appraisal::Utils.prefix_path("./tmp/./appraisal././")).
|
50
|
-
to eq "../tmp/appraisal./"
|
46
|
+
it "strips out './' from path" do
|
47
|
+
expect(Appraisal::Utils.prefix_path("./tmp/./appraisal././")).to eq "../tmp/appraisal./"
|
51
48
|
end
|
52
49
|
|
53
50
|
it "does not prefix Git uri" do
|
54
|
-
expect(Appraisal::Utils.prefix_path("git@github.com:bacon/bacon.git")).
|
55
|
-
|
56
|
-
expect(Appraisal::Utils.prefix_path("
|
57
|
-
to eq "git://github.com/bacon/bacon.git"
|
58
|
-
expect(
|
59
|
-
Appraisal::Utils.prefix_path("https://github.com/bacon/bacon.git")
|
60
|
-
).to eq("https://github.com/bacon/bacon.git")
|
51
|
+
expect(Appraisal::Utils.prefix_path("git@github.com:bacon/bacon.git")).to eq "git@github.com:bacon/bacon.git"
|
52
|
+
expect(Appraisal::Utils.prefix_path("git://github.com/bacon/bacon.git")).to eq "git://github.com/bacon/bacon.git"
|
53
|
+
expect(Appraisal::Utils.prefix_path("https://github.com/bacon/bacon.git")).to eq("https://github.com/bacon/bacon.git")
|
61
54
|
end
|
62
55
|
end
|
63
56
|
|
64
57
|
describe ".bundler_version" do
|
65
58
|
it "returns the bundler version" do
|
66
|
-
bundler = double("Bundler", :
|
59
|
+
bundler = double("Bundler", name: "bundler", version: "a.b.c")
|
67
60
|
allow(Gem::Specification).to receive(:detect).and_return(bundler)
|
68
61
|
|
69
62
|
version = Appraisal::Utils.bundler_version
|
data/spec/spec_helper.rb
CHANGED
@@ -1,22 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "bundler/setup"
|
3
5
|
require "./spec/support/acceptance_test_helpers"
|
4
6
|
require "./spec/support/stream_helpers"
|
5
7
|
|
6
|
-
PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__),
|
7
|
-
TMP_GEM_ROOT = File.join(PROJECT_ROOT, "tmp", "
|
8
|
+
PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), "..")).freeze
|
9
|
+
TMP_GEM_ROOT = File.join(PROJECT_ROOT, "tmp", "bundler")
|
10
|
+
TMP_GEM_BUILD = File.join(PROJECT_ROOT, "tmp", "build")
|
8
11
|
ENV["APPRAISAL_UNDER_TEST"] = "1"
|
9
12
|
|
10
13
|
RSpec.configure do |config|
|
11
14
|
config.raise_errors_for_deprecations!
|
12
15
|
|
13
|
-
config.define_derived_metadata(:
|
16
|
+
config.define_derived_metadata(file_path: %r{spec\/acceptance\/}) do |metadata|
|
14
17
|
metadata[:type] = :acceptance
|
15
18
|
end
|
16
19
|
|
17
|
-
config.include AcceptanceTestHelpers, :
|
20
|
+
config.include AcceptanceTestHelpers, type: :acceptance
|
21
|
+
|
22
|
+
# disable monkey patching
|
23
|
+
# see: https://relishapp.com/rspec/rspec-core/v/3-8/docs/configuration/zero-monkey-patching-mode
|
24
|
+
config.disable_monkey_patching!
|
18
25
|
|
19
26
|
config.before :suite do
|
20
27
|
FileUtils.rm_rf TMP_GEM_ROOT
|
28
|
+
FileUtils.rm_rf TMP_GEM_BUILD
|
21
29
|
end
|
22
30
|
end
|
@@ -1,23 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rspec/expectations/expectation_target"
|
4
|
+
require "active_support/core_ext/string/strip"
|
5
|
+
require "active_support/core_ext/string/filters"
|
6
|
+
require "active_support/concern"
|
7
|
+
require "appraisal/utils"
|
6
8
|
require "./spec/support/dependency_helpers"
|
7
9
|
|
8
10
|
module AcceptanceTestHelpers
|
9
11
|
extend ActiveSupport::Concern
|
10
12
|
include DependencyHelpers
|
11
13
|
|
12
|
-
BUNDLER_ENVIRONMENT_VARIABLES = %w
|
13
|
-
|
14
|
+
BUNDLER_ENVIRONMENT_VARIABLES = %w[
|
15
|
+
RUBYOPT
|
16
|
+
BUNDLE_PATH
|
17
|
+
BUNDLE_BIN_PATH
|
18
|
+
BUNDLE_GEMFILE
|
19
|
+
BUNDLER_SETUP
|
20
|
+
].freeze
|
14
21
|
|
15
22
|
included do
|
16
23
|
metadata[:type] = :acceptance
|
17
24
|
|
18
|
-
before :
|
25
|
+
before parallel: true do
|
19
26
|
unless Appraisal::Utils.support_parallel_installation?
|
20
|
-
pending
|
27
|
+
pending "This Bundler version does not support --jobs flag."
|
21
28
|
end
|
22
29
|
end
|
23
30
|
|
@@ -39,7 +46,7 @@ module AcceptanceTestHelpers
|
|
39
46
|
def save_environment_variables
|
40
47
|
@original_environment_variables = {}
|
41
48
|
|
42
|
-
(BUNDLER_ENVIRONMENT_VARIABLES + %w
|
49
|
+
(BUNDLER_ENVIRONMENT_VARIABLES + %w[PATH]).each do |key|
|
43
50
|
@original_environment_variables[key] = ENV[key]
|
44
51
|
end
|
45
52
|
end
|
@@ -51,7 +58,7 @@ module AcceptanceTestHelpers
|
|
51
58
|
end
|
52
59
|
|
53
60
|
def add_binstub_path
|
54
|
-
ENV[
|
61
|
+
ENV["PATH"] = "bin:#{ENV['PATH']}"
|
55
62
|
end
|
56
63
|
|
57
64
|
def restore_environment_variables
|
@@ -61,28 +68,28 @@ module AcceptanceTestHelpers
|
|
61
68
|
end
|
62
69
|
|
63
70
|
def build_appraisal_file(content)
|
64
|
-
write_file
|
71
|
+
write_file "Appraisals", content.strip_heredoc
|
65
72
|
end
|
66
73
|
|
67
74
|
def build_gemfile(content)
|
68
|
-
write_file
|
75
|
+
write_file "Gemfile", content.strip_heredoc
|
69
76
|
end
|
70
77
|
|
71
78
|
def add_gemspec_to_gemfile
|
72
79
|
in_test_directory do
|
73
|
-
File.open(
|
80
|
+
File.open("Gemfile", "a") { |file| file.puts "gemspec" }
|
74
81
|
end
|
75
82
|
end
|
76
83
|
|
77
84
|
def build_gemspec
|
78
|
-
write_file "stage.gemspec", <<-
|
85
|
+
write_file "stage.gemspec", <<-GEMSPEC
|
79
86
|
Gem::Specification.new do |s|
|
80
87
|
s.name = 'stage'
|
81
88
|
s.version = '0.1'
|
82
89
|
s.summary = 'Awesome Gem!'
|
83
90
|
s.authors = "Appraisal"
|
84
91
|
end
|
85
|
-
|
92
|
+
GEMSPEC
|
86
93
|
end
|
87
94
|
|
88
95
|
def content_of(path)
|
@@ -102,11 +109,11 @@ module AcceptanceTestHelpers
|
|
102
109
|
private
|
103
110
|
|
104
111
|
def current_directory
|
105
|
-
File.expand_path(
|
112
|
+
File.expand_path("tmp/stage")
|
106
113
|
end
|
107
114
|
|
108
115
|
def write_file(filename, content)
|
109
|
-
in_test_directory { File.open(filename,
|
116
|
+
in_test_directory { File.open(filename, "w") { |file| file.puts content } }
|
110
117
|
end
|
111
118
|
|
112
119
|
def cleanup_artifacts
|
@@ -116,8 +123,8 @@ module AcceptanceTestHelpers
|
|
116
123
|
def build_default_dummy_gems
|
117
124
|
FileUtils.mkdir_p(TMP_GEM_ROOT)
|
118
125
|
|
119
|
-
build_gem
|
120
|
-
build_gem
|
126
|
+
build_gem "dummy", "1.0.0"
|
127
|
+
build_gem "dummy", "1.1.0"
|
121
128
|
end
|
122
129
|
|
123
130
|
def ensure_bundler_is_available
|
@@ -135,11 +142,11 @@ module AcceptanceTestHelpers
|
|
135
142
|
end
|
136
143
|
|
137
144
|
def build_default_gemfile
|
138
|
-
build_gemfile <<-
|
145
|
+
build_gemfile <<-GEMFILE
|
139
146
|
source 'https://rubygems.org'
|
140
147
|
|
141
148
|
gem 'appraisal', :path => '#{PROJECT_ROOT}'
|
142
|
-
|
149
|
+
GEMFILE
|
143
150
|
|
144
151
|
run "bundle install --local"
|
145
152
|
run "bundle binstubs --all"
|
@@ -160,10 +167,10 @@ module AcceptanceTestHelpers
|
|
160
167
|
end
|
161
168
|
|
162
169
|
if raise_on_error && exitstatus != 0
|
163
|
-
raise RuntimeError, <<-
|
170
|
+
raise RuntimeError, <<-ERROR_MESSAGE.strip_heredoc
|
164
171
|
Command #{command.inspect} exited with status #{exitstatus}. Output:
|
165
172
|
#{output.gsub(/^/, ' ')}
|
166
|
-
|
173
|
+
ERROR_MESSAGE
|
167
174
|
end
|
168
175
|
end
|
169
176
|
end
|
@@ -1,32 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DependencyHelpers
|
2
|
-
def build_gem(gem_name, version =
|
3
|
-
ENV[
|
4
|
+
def build_gem(gem_name, version = "1.0.0")
|
5
|
+
ENV["GEM_HOME"] = TMP_GEM_ROOT
|
4
6
|
|
5
|
-
unless File.exist? "
|
6
|
-
FileUtils.mkdir_p "
|
7
|
+
unless File.exist? "#{TMP_GEM_ROOT}/gems/#{gem_name}-#{version}"
|
8
|
+
FileUtils.mkdir_p "#{TMP_GEM_BUILD}/#{gem_name}/lib"
|
7
9
|
|
8
|
-
FileUtils.cd "
|
10
|
+
FileUtils.cd "#{TMP_GEM_BUILD}/#{gem_name}" do
|
9
11
|
gemspec = "#{gem_name}.gemspec"
|
10
12
|
lib_file = "lib/#{gem_name}.rb"
|
11
13
|
|
12
|
-
File.open gemspec,
|
13
|
-
file.puts <<-
|
14
|
+
File.open gemspec, "w" do |file|
|
15
|
+
file.puts <<-GEMSPEC
|
14
16
|
Gem::Specification.new do |s|
|
15
17
|
s.name = #{gem_name.inspect}
|
16
18
|
s.version = #{version.inspect}
|
17
19
|
s.authors = 'Mr. Smith'
|
18
20
|
s.summary = 'summary'
|
19
21
|
s.files = #{lib_file.inspect}
|
22
|
+
s.license = 'MIT'
|
23
|
+
s.homepage = 'http://github.com/thoughtbot/#{gem_name}'
|
24
|
+
s.required_ruby_version = '>= 2.3.0'
|
20
25
|
end
|
21
|
-
|
26
|
+
GEMSPEC
|
22
27
|
end
|
23
28
|
|
24
|
-
File.open lib_file,
|
29
|
+
File.open lib_file, "w" do |file|
|
25
30
|
file.puts "$#{gem_name}_version = '#{version}'"
|
26
31
|
end
|
27
32
|
|
28
|
-
|
29
|
-
|
33
|
+
redirect = ENV["VERBOSE"] ? "" : "2>&1"
|
34
|
+
|
35
|
+
puts "building gem: #{gem_name} #{version}" if ENV["VERBOSE"]
|
36
|
+
`gem build #{gemspec} #{redirect}`
|
37
|
+
|
38
|
+
puts "installing gem: #{gem_name} #{version}" if ENV["VERBOSE"]
|
39
|
+
`gem install -lN #{gem_name}-#{version}.gem -v #{version} #{redirect}`
|
40
|
+
|
41
|
+
puts "" if ENV["VERBOSE"]
|
30
42
|
end
|
31
43
|
end
|
32
44
|
end
|
@@ -35,21 +47,23 @@ module DependencyHelpers
|
|
35
47
|
gems.each { |gem| build_gem(gem) }
|
36
48
|
end
|
37
49
|
|
38
|
-
def build_git_gem(gem_name, version =
|
50
|
+
def build_git_gem(gem_name, version = "1.0.0")
|
51
|
+
puts "building git gem: #{gem_name} #{version}" if ENV["VERBOSE"]
|
39
52
|
build_gem gem_name, version
|
40
53
|
|
41
|
-
Dir.chdir "
|
42
|
-
`git init
|
54
|
+
Dir.chdir "#{TMP_GEM_BUILD}/#{gem_name}" do
|
55
|
+
`git init . --initial-branch=master`
|
43
56
|
`git config user.email "appraisal@thoughtbot.com"`
|
44
57
|
`git config user.name "Appraisal"`
|
45
58
|
`git add .`
|
46
|
-
`git commit
|
59
|
+
`git commit --all --no-verify --message "initial commit"`
|
47
60
|
end
|
48
61
|
|
49
62
|
# Cleanup Bundler cache path manually for now
|
50
63
|
git_cache_path = File.join(ENV["GEM_HOME"], "cache", "bundler", "git")
|
51
64
|
|
52
65
|
Dir[File.join(git_cache_path, "#{gem_name}-*")].each do |path|
|
66
|
+
puts "deleting: #{path}" if ENV["VERBOSE"]
|
53
67
|
FileUtils.rm_r(path)
|
54
68
|
end
|
55
69
|
end
|