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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91cd28f94201740fdcc34e58200fec87442a99144b1b4c1b909d818b12f8e644
|
4
|
+
data.tar.gz: 7e61989365c22a32cea85d0cd01a7b27056a9daa2eeae452a6dede92537caf0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 442f8a5bad710daee1497ea947a19a5d0378c99b7e76977932cad75291229c02141d0df4eac179c3ced5e142afea8e75a9189116a09d1d2a8374f3ec435de7e3
|
7
|
+
data.tar.gz: 3cfe5371dc2a941f71cb16407f0ba804b33b5ec94c4faf94185527e11e36e0a10dcaecab1477515bc4f255c4fe82e7863830a53115586ab614d08e7f2f5429d2
|
@@ -0,0 +1,19 @@
|
|
1
|
+
name: update-security
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
paths:
|
6
|
+
- SECURITY.md
|
7
|
+
branches:
|
8
|
+
- main
|
9
|
+
workflow_dispatch:
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
update-security:
|
13
|
+
permissions:
|
14
|
+
contents: write
|
15
|
+
pull-requests: write
|
16
|
+
pages: write
|
17
|
+
uses: thoughtbot/templates/.github/workflows/dynamic-security.yaml@main
|
18
|
+
secrets:
|
19
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
---
|
2
|
+
name: Tests
|
3
|
+
|
4
|
+
on:
|
5
|
+
push:
|
6
|
+
branches:
|
7
|
+
- '**'
|
8
|
+
pull_request:
|
9
|
+
branches:
|
10
|
+
- '**'
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
test:
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
|
16
|
+
strategy:
|
17
|
+
fail-fast: false
|
18
|
+
matrix:
|
19
|
+
ruby:
|
20
|
+
- '3.3'
|
21
|
+
- '3.2'
|
22
|
+
- '3.1'
|
23
|
+
- '3.0'
|
24
|
+
- 'head'
|
25
|
+
- jruby
|
26
|
+
- jruby-head
|
27
|
+
- truffleruby
|
28
|
+
- truffleruby-head
|
29
|
+
|
30
|
+
steps:
|
31
|
+
- uses: actions/checkout@v4
|
32
|
+
|
33
|
+
- name: Setup Ruby
|
34
|
+
uses: ruby/setup-ruby@v1
|
35
|
+
with:
|
36
|
+
ruby-version: ${{ matrix.ruby }}
|
37
|
+
|
38
|
+
- name: Update bundler
|
39
|
+
env:
|
40
|
+
RUBY_VERSION: ${{ matrix.ruby }}
|
41
|
+
run: |
|
42
|
+
case ${RUBY_VERSION} in
|
43
|
+
truffleruby|truffleruby-head)
|
44
|
+
gem install bundler -v 2.5.18
|
45
|
+
;;
|
46
|
+
|
47
|
+
*)
|
48
|
+
gem update --system
|
49
|
+
;;
|
50
|
+
esac
|
51
|
+
|
52
|
+
bundle install
|
53
|
+
|
54
|
+
- name: Run tests
|
55
|
+
run: bin/rspec
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -136,7 +136,7 @@ appraise 'rails-5' do
|
|
136
136
|
gem 'rails', '~> 5.2'
|
137
137
|
|
138
138
|
group :test do
|
139
|
-
remove_gem
|
139
|
+
remove_gem 'test_after_commit'
|
140
140
|
end
|
141
141
|
end
|
142
142
|
```
|
@@ -159,6 +159,15 @@ customizations include:
|
|
159
159
|
- heading: a string that by default adds "# This file was generated by Appraisal" to the top of each Gemfile, (the string will be commented for you)
|
160
160
|
- single_quotes: a boolean that controls if strings are single quoted in each Gemfile, defaults to false
|
161
161
|
|
162
|
+
You can also provide variables for substitution in the heading, based on each appraisal. Currently supported variables:
|
163
|
+
- `%{appraisal}`: Becomes the name of each appraisal, e.g. `rails-3`
|
164
|
+
- `%{gemfile}`: Becomes the filename of each gemfile, e.g. `rails-3.gemfile`
|
165
|
+
- `%{gemfile_path}`: Becomes the full path of each gemfile, e.g. `/path/to/project/gemfiles/rails-3.gemfile`
|
166
|
+
- `%{lockfile}`: Becomes the filename of each lockfile, e.g. `rails-3.gemfile.lock`
|
167
|
+
- `%{lockfile_path}`: Becomes the full path of each lockfile, e.g. `/path/to/project/gemfiles/rails-3.gemfile.lock`
|
168
|
+
- `%{relative_gemfile_path}`: Becomes the relative path of each gemfile, e.g. `gemfiles/rails-3.gemfile`
|
169
|
+
- `%{relative_lockfile_path}`: Becomes the relative path of each lockfile, e.g. `gemfiles/rails-3.gemfile.lock`
|
170
|
+
|
162
171
|
### Example Usage
|
163
172
|
|
164
173
|
**Appraisals**
|
@@ -169,8 +178,8 @@ customize_gemfiles do
|
|
169
178
|
heading: <<~HEADING
|
170
179
|
frozen_string_literal: true
|
171
180
|
|
172
|
-
|
173
|
-
See the conventions at https://example.com/
|
181
|
+
`%{gemfile}` has been generated by Appraisal, do NOT modify it or `%{lockfile}` directly!
|
182
|
+
Make the changes to the "%{appraisal}" block in `Appraisals` instead. See the conventions at https://example.com/
|
174
183
|
HEADING
|
175
184
|
}
|
176
185
|
end
|
@@ -184,8 +193,8 @@ Using the `Appraisals` file defined above, this is what the resulting `Gemfile`
|
|
184
193
|
```ruby
|
185
194
|
# frozen_string_literal: true
|
186
195
|
|
187
|
-
#
|
188
|
-
# See the conventions at https://example.com/
|
196
|
+
# `rails-3.gemfile` has been generated by Appraisal, do NOT modify it or `rails-3.gemfile.lock` directly!
|
197
|
+
# Make the changes to the "rails-3" block in `Appraisals` instead. See the conventions at https://example.com/
|
189
198
|
|
190
199
|
gem 'rails', '3.2.14'
|
191
200
|
```
|
data/Rakefile
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "bundler/gem_tasks"
|
5
|
+
require "rspec/core/rake_task"
|
4
6
|
|
5
7
|
RSpec::Core::RakeTask.new do |t|
|
6
|
-
t.pattern =
|
8
|
+
t.pattern = "spec/**/*_spec.rb"
|
7
9
|
t.ruby_opts = %w[-w]
|
8
10
|
t.verbose = false
|
9
11
|
end
|
10
12
|
|
11
|
-
desc
|
12
|
-
task :
|
13
|
+
desc "Default: run the rspec examples"
|
14
|
+
task default: [:spec]
|
data/SECURITY.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
<!-- START /templates/security.md -->
|
2
|
+
# Security Policy
|
3
|
+
|
4
|
+
## Supported Versions
|
5
|
+
|
6
|
+
Only the the latest version of this project is supported at a given time. If
|
7
|
+
you find a security issue with an older version, please try updating to the
|
8
|
+
latest version first.
|
9
|
+
|
10
|
+
If for some reason you can't update to the latest version, please let us know
|
11
|
+
your reasons so that we can have a better understanding of your situation.
|
12
|
+
|
13
|
+
## Reporting a Vulnerability
|
14
|
+
|
15
|
+
For security inquiries or vulnerability reports, visit
|
16
|
+
<https://thoughtbot.com/security>.
|
17
|
+
|
18
|
+
If you have any suggestions to improve this policy, visit <https://thoughtbot.com/security>.
|
19
|
+
|
20
|
+
<!-- END /templates/security.md -->
|
data/appraisal.gemspec
CHANGED
@@ -1,29 +1,26 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/appraisal/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name =
|
6
|
+
s.name = "appraisal"
|
7
7
|
s.version = Appraisal::VERSION.dup
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = [
|
10
|
-
s.email = [
|
11
|
-
s.homepage =
|
12
|
-
s.summary =
|
9
|
+
s.authors = ["Joe Ferris", "Prem Sichanugrist"]
|
10
|
+
s.email = ["jferris@thoughtbot.com", "prem@thoughtbot.com"]
|
11
|
+
s.homepage = "http://github.com/thoughtbot/appraisal"
|
12
|
+
s.summary = "Find out what your Ruby gems are worth"
|
13
13
|
s.description = 'Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals."'
|
14
|
-
s.license =
|
14
|
+
s.license = "MIT"
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files --
|
19
|
-
s.
|
18
|
+
s.executables = `git ls-files -- exe/*`.split("\n").map { |f| File.basename(f) }
|
19
|
+
s.bindir = "exe"
|
20
20
|
|
21
21
|
s.required_ruby_version = ">= 2.3.0"
|
22
22
|
|
23
|
-
s.
|
24
|
-
s.
|
25
|
-
s.
|
26
|
-
|
27
|
-
s.add_development_dependency("activesupport", ">= 3.2.21")
|
28
|
-
s.add_development_dependency('rspec', '~> 3.0')
|
23
|
+
s.add_dependency("rake")
|
24
|
+
s.add_dependency("bundler")
|
25
|
+
s.add_dependency("thor", ">= 0.14.0")
|
29
26
|
end
|
data/bin/bundle
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'bundle' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
require "rubygems"
|
12
|
+
|
13
|
+
m = Module.new do
|
14
|
+
module_function
|
15
|
+
|
16
|
+
def invoked_as_script?
|
17
|
+
File.expand_path($0) == File.expand_path(__FILE__)
|
18
|
+
end
|
19
|
+
|
20
|
+
def env_var_version
|
21
|
+
ENV["BUNDLER_VERSION"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def cli_arg_version
|
25
|
+
return unless invoked_as_script? # don't want to hijack other binstubs
|
26
|
+
return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
|
27
|
+
bundler_version = nil
|
28
|
+
update_index = nil
|
29
|
+
ARGV.each_with_index do |a, i|
|
30
|
+
if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN)
|
31
|
+
bundler_version = a
|
32
|
+
end
|
33
|
+
next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
|
34
|
+
bundler_version = $1
|
35
|
+
update_index = i
|
36
|
+
end
|
37
|
+
bundler_version
|
38
|
+
end
|
39
|
+
|
40
|
+
def gemfile
|
41
|
+
gemfile = ENV["BUNDLE_GEMFILE"]
|
42
|
+
return gemfile if gemfile && !gemfile.empty?
|
43
|
+
|
44
|
+
File.expand_path("../Gemfile", __dir__)
|
45
|
+
end
|
46
|
+
|
47
|
+
def lockfile
|
48
|
+
lockfile =
|
49
|
+
case File.basename(gemfile)
|
50
|
+
when "gems.rb" then gemfile.sub(/\.rb$/, ".locked")
|
51
|
+
else "#{gemfile}.lock"
|
52
|
+
end
|
53
|
+
File.expand_path(lockfile)
|
54
|
+
end
|
55
|
+
|
56
|
+
def lockfile_version
|
57
|
+
return unless File.file?(lockfile)
|
58
|
+
lockfile_contents = File.read(lockfile)
|
59
|
+
return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
|
60
|
+
Regexp.last_match(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def bundler_requirement
|
64
|
+
@bundler_requirement ||=
|
65
|
+
env_var_version ||
|
66
|
+
cli_arg_version ||
|
67
|
+
bundler_requirement_for(lockfile_version)
|
68
|
+
end
|
69
|
+
|
70
|
+
def bundler_requirement_for(version)
|
71
|
+
return "#{Gem::Requirement.default}.a" unless version
|
72
|
+
|
73
|
+
bundler_gem_version = Gem::Version.new(version)
|
74
|
+
|
75
|
+
bundler_gem_version.approximate_recommendation
|
76
|
+
end
|
77
|
+
|
78
|
+
def load_bundler!
|
79
|
+
ENV["BUNDLE_GEMFILE"] ||= gemfile
|
80
|
+
|
81
|
+
activate_bundler
|
82
|
+
end
|
83
|
+
|
84
|
+
def activate_bundler
|
85
|
+
gem_error = activation_error_handling do
|
86
|
+
gem "bundler", bundler_requirement
|
87
|
+
end
|
88
|
+
return if gem_error.nil?
|
89
|
+
require_error = activation_error_handling do
|
90
|
+
require "bundler/version"
|
91
|
+
end
|
92
|
+
return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
|
93
|
+
warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
|
94
|
+
exit 42
|
95
|
+
end
|
96
|
+
|
97
|
+
def activation_error_handling
|
98
|
+
yield
|
99
|
+
nil
|
100
|
+
rescue StandardError, LoadError => e
|
101
|
+
e
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
m.load_bundler!
|
106
|
+
|
107
|
+
if m.invoked_as_script?
|
108
|
+
load Gem.bin_path("bundler", "bundle")
|
109
|
+
end
|
data/bin/rspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# This file was generated by Bundler.
|
6
|
+
#
|
7
|
+
# The application 'rspec' is installed as part of a gem, and
|
8
|
+
# this file is here to facilitate running it.
|
9
|
+
#
|
10
|
+
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
12
|
+
|
13
|
+
bundle_binstub = File.expand_path("bundle", __dir__)
|
14
|
+
|
15
|
+
if File.file?(bundle_binstub)
|
16
|
+
if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
|
17
|
+
load(bundle_binstub)
|
18
|
+
else
|
19
|
+
abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
|
20
|
+
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require "rubygems"
|
25
|
+
require "bundler/setup"
|
26
|
+
|
27
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/{bin → exe}/appraisal
RENAMED
@@ -1,8 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
require
|
5
|
-
require
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler/setup"
|
6
|
+
require "appraisal"
|
7
|
+
require "appraisal/cli"
|
6
8
|
|
7
9
|
begin
|
8
10
|
Appraisal::CLI.start
|
data/lib/appraisal/appraisal.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "appraisal/gemfile"
|
4
|
+
require "appraisal/command"
|
3
5
|
require "appraisal/customize"
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
6
|
+
require "appraisal/utils"
|
7
|
+
require "fileutils"
|
8
|
+
require "pathname"
|
7
9
|
|
8
10
|
module Appraisal
|
9
11
|
# Represents one appraisal and its dependencies
|
@@ -63,7 +65,8 @@ module Appraisal
|
|
63
65
|
|
64
66
|
def write_gemfile
|
65
67
|
File.open(gemfile_path, "w") do |file|
|
66
|
-
signature =
|
68
|
+
signature =
|
69
|
+
Customize.heading(self) || "This file was generated by Appraisal"
|
67
70
|
file.puts([comment_lines(signature), quoted_gemfile].join("\n\n"))
|
68
71
|
end
|
69
72
|
end
|
@@ -78,15 +81,15 @@ module Appraisal
|
|
78
81
|
command = commands.join(" || ")
|
79
82
|
|
80
83
|
if Bundler.settings[:path]
|
81
|
-
env = {
|
82
|
-
Command.new(command, :
|
84
|
+
env = { "BUNDLE_DISABLE_SHARED_GEMS" => "1" }
|
85
|
+
Command.new(command, env: env).run
|
83
86
|
else
|
84
87
|
Command.new(command).run
|
85
88
|
end
|
86
89
|
end
|
87
90
|
|
88
91
|
def update(gems = [])
|
89
|
-
Command.new(update_command(gems), :
|
92
|
+
Command.new(update_command(gems), gemfile: gemfile_path).run
|
90
93
|
end
|
91
94
|
|
92
95
|
def gemfile_path
|
@@ -106,10 +109,10 @@ module Appraisal
|
|
106
109
|
relative_path = current_directory.relative_path_from(gemfile_root).cleanpath
|
107
110
|
lockfile_content = File.read(lockfile_path)
|
108
111
|
|
109
|
-
File.open(lockfile_path,
|
112
|
+
File.open(lockfile_path, "w") do |file|
|
110
113
|
file.write lockfile_content.gsub(
|
111
114
|
/ #{current_directory}/,
|
112
|
-
" #{relative_path}"
|
115
|
+
" #{relative_path}"
|
113
116
|
)
|
114
117
|
end
|
115
118
|
end
|
@@ -118,16 +121,16 @@ module Appraisal
|
|
118
121
|
|
119
122
|
def check_command
|
120
123
|
gemfile_option = "--gemfile='#{gemfile_path}'"
|
121
|
-
[
|
124
|
+
["bundle", "check", gemfile_option]
|
122
125
|
end
|
123
126
|
|
124
127
|
def install_command(options = {})
|
125
128
|
gemfile_option = "--gemfile='#{gemfile_path}'"
|
126
|
-
[
|
129
|
+
["bundle", "install", gemfile_option, bundle_options(options)].compact
|
127
130
|
end
|
128
131
|
|
129
132
|
def update_command(gems)
|
130
|
-
[
|
133
|
+
["bundle", "update", *gems].compact
|
131
134
|
end
|
132
135
|
|
133
136
|
def gemfile_root
|
@@ -147,7 +150,7 @@ module Appraisal
|
|
147
150
|
end
|
148
151
|
|
149
152
|
def clean_name
|
150
|
-
name.gsub(/[^\w\.]/,
|
153
|
+
name.gsub(/[^\w\.]/, "_")
|
151
154
|
end
|
152
155
|
|
153
156
|
def bundle_options(options)
|
@@ -158,8 +161,8 @@ module Appraisal
|
|
158
161
|
if Utils.support_parallel_installation?
|
159
162
|
options_strings << "--jobs=#{jobs}"
|
160
163
|
else
|
161
|
-
warn
|
162
|
-
|
164
|
+
warn "Your current version of Bundler does not support parallel installation. Please " +
|
165
|
+
"upgrade Bundler to version >= 1.4.0, or invoke `appraisal` without `--jobs` option."
|
163
166
|
end
|
164
167
|
end
|
165
168
|
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "appraisal/appraisal"
|
2
4
|
require "appraisal/customize"
|
3
|
-
require
|
4
|
-
require
|
5
|
+
require "appraisal/errors"
|
6
|
+
require "appraisal/gemfile"
|
5
7
|
|
6
8
|
module Appraisal
|
7
9
|
# Loads and parses Appraisals file
|
@@ -15,7 +17,7 @@ module Appraisal
|
|
15
17
|
def initialize
|
16
18
|
@appraisals = []
|
17
19
|
@gemfile = Gemfile.new
|
18
|
-
@gemfile.load(ENV[
|
20
|
+
@gemfile.load(ENV["BUNDLE_GEMFILE"] || "Gemfile")
|
19
21
|
|
20
22
|
if File.exist? path
|
21
23
|
run IO.read(path)
|
@@ -35,7 +37,7 @@ module Appraisal
|
|
35
37
|
end
|
36
38
|
|
37
39
|
def customize_gemfiles(&_block)
|
38
|
-
Customize.new(yield)
|
40
|
+
Customize.new(**yield)
|
39
41
|
end
|
40
42
|
|
41
43
|
private
|
@@ -45,7 +47,7 @@ module Appraisal
|
|
45
47
|
end
|
46
48
|
|
47
49
|
def path
|
48
|
-
|
50
|
+
"Appraisals"
|
49
51
|
end
|
50
52
|
end
|
51
53
|
end
|
@@ -1,22 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "appraisal/dependency_list"
|
2
4
|
|
3
5
|
module Appraisal
|
4
6
|
class BundlerDSL
|
5
7
|
attr_reader :dependencies
|
6
8
|
|
7
|
-
PARTS = %w
|
8
|
-
platforms source_blocks install_if gemspec
|
9
|
+
PARTS = %w[source ruby_version gits paths dependencies groups
|
10
|
+
platforms source_blocks install_if gemspec]
|
9
11
|
|
10
12
|
def initialize
|
11
13
|
@sources = []
|
12
14
|
@ruby_version = nil
|
13
15
|
@dependencies = DependencyList.new
|
14
16
|
@gemspecs = []
|
15
|
-
@groups =
|
16
|
-
@platforms =
|
17
|
-
@gits =
|
18
|
-
@paths =
|
19
|
-
@source_blocks =
|
17
|
+
@groups = {}
|
18
|
+
@platforms = {}
|
19
|
+
@gits = {}
|
20
|
+
@paths = {}
|
21
|
+
@source_blocks = {}
|
20
22
|
@git_sources = {}
|
21
23
|
@install_if = {}
|
22
24
|
end
|
@@ -80,11 +82,11 @@ module Appraisal
|
|
80
82
|
end
|
81
83
|
|
82
84
|
def to_s
|
83
|
-
Utils.join_parts
|
85
|
+
Utils.join_parts(PARTS.map { |part| send("#{part}_entry") })
|
84
86
|
end
|
85
87
|
|
86
88
|
def for_dup
|
87
|
-
Utils.join_parts
|
89
|
+
Utils.join_parts(PARTS.map { |part| send("#{part}_entry_for_dup") })
|
88
90
|
end
|
89
91
|
|
90
92
|
def gemspec(options = {})
|
@@ -108,8 +110,11 @@ module Appraisal
|
|
108
110
|
alias_method :source_entry_for_dup, :source_entry
|
109
111
|
|
110
112
|
def ruby_version_entry
|
111
|
-
|
112
|
-
|
113
|
+
return unless @ruby_version
|
114
|
+
|
115
|
+
case @ruby_version
|
116
|
+
when String then "ruby #{@ruby_version.inspect}"
|
117
|
+
else "ruby(#{@ruby_version.inspect})"
|
113
118
|
end
|
114
119
|
end
|
115
120
|
|
@@ -131,8 +136,7 @@ module Appraisal
|
|
131
136
|
@dependencies.for_dup
|
132
137
|
end
|
133
138
|
|
134
|
-
%i[gits paths platforms groups source_blocks install_if].
|
135
|
-
each do |method_name|
|
139
|
+
%i[gits paths platforms groups source_blocks install_if].each do |method_name|
|
136
140
|
class_eval <<-METHODS, __FILE__, __LINE__
|
137
141
|
private
|
138
142
|
|