appraisal2 3.2.4 → 3.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 282e4c4c5f5924f155874de3d9c29e56539aff43b465151e7023a85cfb48e6b7
4
- data.tar.gz: 8c4fe95d65a50245f29b9532639d5c49b8341d6e2544c94ff1fc1e662349e329
3
+ metadata.gz: 7a26d2202708e32af2da2d53d842bb1bb4851952c910224fb1421ea413a45b39
4
+ data.tar.gz: 90699344060c6428e2ccbe5b92d18a2c5a59212983645d5c681a5b54548b0bb1
5
5
  SHA512:
6
- metadata.gz: 7e0d2d9ed6c9931839add3a64602c11309f4a8b73043187f9d08cb5b895d32bb04111f3d42ee97c02b818bd74e2ab20cafaa473ac7f3f7ebfe7769ff986b939d
7
- data.tar.gz: 43616e89da1e0d46318355fc9bbcec31b2cffdf587c0321f7ffc7559feee031dd86be5d19e9cb771eebdb947d4c87aca81dfc8da223d8235400db2ecb19d87ce
6
+ metadata.gz: 6b6a0fdb63d6f631cabd7da39a96c3b4270b841dfb37446e88d0d5d32472c71a4c16e89295e03e4d35ba328ab9f7e82850bfb37e4a258a481ec985cf1cb06570
7
+ data.tar.gz: 40c7a6358aa69bf922f1a0e3ff38d90421b18553143a574ec1bd8d882859e581c5597d91efc7361a4212415974a09258ff5acd2c3b85ae4d4f9a0803ebf71c62
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,44 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.2.5] - 2026-09-29
34
+
35
+ - TAG: [v3.2.5][3.2.5t]
36
+ - COVERAGE: 91.00% -- 940/1033 lines in 29 files
37
+ - BRANCH COVERAGE: 79.07% -- 204/258 branches in 29 files
38
+ - 43.78% documented
39
+
40
+ ### Added
41
+
42
+ - kettle-jem-template-20260913-001 - Templating now also surfaces a review
43
+ entry in `dependency_conflicts.resolve` when a direct development
44
+ dependency doesn't support one or more of this project's declared
45
+ `engines:` and has no template-managed modular home (e.g. `sqlite3` on
46
+ `jruby`). Review each entry and pick a resolution per the project's own
47
+ engine support needs.
48
+
49
+ ### Changed
50
+
51
+ - [kc] kettle-jem/prepare: updated 60 project files:
52
+ - dependencies (60)
53
+ - [kc] kettle-jem/template: updated 73 project files:
54
+ - code and tests (7)
55
+ - dependencies (2)
56
+ - other (4)
57
+ - workflows (60)
58
+
59
+ ### Fixed
60
+
61
+ - Use argument-vector execution for internal Bundler and RubyGems probes so locked appraisals work on Windows.
62
+
63
+ - Launch locked Bundler subprocesses with argument-safe invocation on Windows.
64
+
65
+ - Run acceptance subprocesses with argument-safe, platform-independent environment handling.
66
+
67
+ - Keep Bundler check, install, and path configuration commands as argument vectors on Windows.
68
+
69
+ - Skip the style-only RuboCop toolchain in the Ruby 3.2 appraisal bundle.
70
+
33
71
  ## [3.2.4] - 2026-09-11
34
72
 
35
73
  - TAG: [v3.2.4][3.2.4t]
@@ -641,7 +679,9 @@ Please file a bug if you notice a violation of semantic versioning.
641
679
  - code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
642
680
  - other minor fixes and improvements
643
681
 
644
- [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.4...HEAD
682
+ [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.5...HEAD
683
+ [3.2.5]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.4...v3.2.5
684
+ [3.2.5t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.2.5
645
685
  [3.2.4]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.3...v3.2.4
646
686
  [3.2.4t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.2.4
647
687
  [3.2.3]: https://github.com/appraisal-rb/appraisal2/compare/v3.2.2...v3.2.3
data/README.md CHANGED
@@ -779,7 +779,7 @@ Thanks for RTFM. ☺️
779
779
  [📌gitmoji]: https://gitmoji.dev
780
780
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
781
781
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
782
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.007-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
782
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.033-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
783
783
  [🔐security]: https://github.com/appraisal-rb/appraisal2/blob/main/SECURITY.md
784
784
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
785
785
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -41,6 +41,7 @@ module Appraisal
41
41
  @gemfile = options[:gemfile]
42
42
  @env = options.fetch(:env, {})
43
43
  @skip_bundle_exec = options.fetch(:skip_bundle_exec, false)
44
+ @allow_failure = options[:allow_failure] || false
44
45
  @command = @skip_bundle_exec ? command : command_starting_with_bundle(command)
45
46
  end
46
47
 
@@ -138,7 +139,15 @@ module Appraisal
138
139
  end
139
140
  process_env["APPRAISAL_INITIALIZED"] = "1"
140
141
 
141
- exit(1) unless Kernel.system(process_env, command_text)
142
+ succeeded = if command.is_a?(Array)
143
+ Kernel.system(process_env, *command_arguments(bundler_version))
144
+ else
145
+ Kernel.system(process_env, command_text)
146
+ end
147
+ return succeeded if @allow_failure
148
+
149
+ exit(1) unless succeeded
150
+ succeeded
142
151
  end
143
152
 
144
153
  def ensure_bundler_is_available(process_env)
@@ -149,14 +158,14 @@ module Appraisal
149
158
  # Ruby engines, Bundler may be available through the active app bundle
150
159
  # while a manually scrubbed RubyGems spec lookup cannot see it through the
151
160
  # current GEM_HOME/GEM_PATH.
152
- return if system(process_env, "bundle -v > /dev/null 2>&1")
161
+ return if system_command(process_env, ["bundle", "-v"])
153
162
 
154
163
  # Check if any version of bundler is available through RubyGems.
155
- return if system(rubygems_env, bundler_available_command)
164
+ return if system_command(rubygems_env, bundler_available_command)
156
165
 
157
166
  puts ">> Bundler not found, attempting to install..."
158
167
  # If that fails, try to install the latest stable version
159
- return if system(rubygems_env, "ruby --disable=gems -S gem install bundler")
168
+ return if system_command(rubygems_env, ruby_gem_command("install", "bundler"))
160
169
 
161
170
  puts
162
171
  puts <<-ERROR.rstrip
@@ -174,10 +183,13 @@ manually.
174
183
 
175
184
  rubygems_env = rubygems_command_env(process_env)
176
185
 
177
- return if system(rubygems_env, bundler_available_command(locked_version))
186
+ return if system_command(rubygems_env, bundler_available_command(locked_version))
178
187
 
179
188
  puts ">> Bundler #{locked_version} not found, attempting to install..."
180
- return if system(rubygems_env, "ruby --disable=gems -S gem install bundler -v #{Shellwords.escape(locked_version)} --no-document")
189
+ return if system_command(
190
+ rubygems_env,
191
+ ruby_gem_command("install", "bundler", "-v", locked_version, "--no-document")
192
+ )
181
193
 
182
194
  puts
183
195
  puts <<-ERROR.rstrip
@@ -228,7 +240,19 @@ manually.
228
240
  specs = Gem::Specification.find_all_by_name("bundler"#{requirement})
229
241
  exit(specs.empty? ? 1 : 0)
230
242
  RUBY
231
- "ruby --disable=gems -e #{Shellwords.escape(code)}"
243
+ [RbConfig.ruby, "--disable=gems", "-e", code]
244
+ end
245
+
246
+ def ruby_gem_command(*arguments)
247
+ [RbConfig.ruby, "--disable=gems", "-S", "gem", *arguments]
248
+ end
249
+
250
+ def system_command(environment, command)
251
+ if command.is_a?(Array)
252
+ system(environment, *command)
253
+ else
254
+ system(environment, command)
255
+ end
232
256
  end
233
257
 
234
258
  def announce(command_text = command_as_string)
@@ -269,10 +293,23 @@ manually.
269
293
  end
270
294
 
271
295
  def versioned_bundler_command(version)
272
- script = %(gem "bundler", #{version.inspect}; load Gem.bin_path("bundler", "bundle"))
296
+ script = %(require "rubygems"; Gem::Specification.find_by_name("bundler", #{version.inspect}).activate; load Gem.bin_path("bundler", "bundle"))
273
297
  Shellwords.join([RbConfig.ruby, "-e", script])
274
298
  end
275
299
 
300
+ def command_arguments(bundler_version)
301
+ return command unless bundler_version
302
+
303
+ script = %(require "rubygems"; Gem::Specification.find_by_name("bundler", #{bundler_version.inspect}).activate; load Gem.bin_path("bundler", "bundle"))
304
+ command.flat_map do |argument|
305
+ if argument == "bundle"
306
+ [RbConfig.ruby, "-e", script]
307
+ else
308
+ [argument]
309
+ end
310
+ end
311
+ end
312
+
276
313
  def test_environment
277
314
  return {} unless ENV["APPRAISAL_UNDER_TEST"] == "1"
278
315
 
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "shellwords"
4
-
5
3
  require "appraisal/utils"
4
+ require "set"
6
5
 
7
6
  require_relative "base"
8
7
 
@@ -22,20 +21,19 @@ module Appraisal
22
21
  end
23
22
 
24
23
  def install(options = {})
25
- commands = [install_command(options).join(" ")]
24
+ env = install_environment(options)
25
+ command_options = {:env => env, :gemfile => gemfile_path}
26
26
 
27
- # Only run check command if not using --without option
28
- if options["without"].nil? || options["without"].empty?
29
- commands.unshift(check_command.join(" "))
27
+ if options["path"]
28
+ Command.new(path_config_command(options["path"]), :gemfile => gemfile_path).run
30
29
  end
31
30
 
32
- command = commands.join(" || ")
33
- command = path_config_command(options["path"], command) if options["path"]
34
- env = install_environment(options)
35
- command_options = {:gemfile => gemfile_path}
36
- command_options[:env] = env unless env.empty?
31
+ unless install_options_require_execution?(options)
32
+ check_options = command_options.merge(:allow_failure => true)
33
+ return if Command.new(check_command, check_options).run
34
+ end
37
35
 
38
- Command.new(command, command_options).run
36
+ Command.new(install_command(options), command_options).run
39
37
  end
40
38
 
41
39
  def update(gems = [])
@@ -45,13 +43,23 @@ module Appraisal
45
43
  private
46
44
 
47
45
  def check_command
48
- gemfile_option = "--gemfile='#{gemfile_path}'"
49
- ["bundle", "check", gemfile_option]
46
+ ["bundle", "check", "--gemfile", gemfile_path]
47
+ end
48
+
49
+ def install_options_require_execution?(options)
50
+ return true if options["path"]
51
+ return true if options["without"] && !options["without"].empty?
52
+ return true if options["full-index"]
53
+ return true if options.key?("jobs") && options["jobs"] != 1
54
+ return true if options.key?("retry") && options["retry"] != 1
55
+
56
+ false
50
57
  end
51
58
 
52
59
  def install_command(options = {})
53
- gemfile_option = "--gemfile='#{gemfile_path}'"
54
- ["bundle", "install", gemfile_option, bundle_options(options)].compact
60
+ command = ["bundle", "install", "--gemfile", gemfile_path]
61
+ bundle_options(options).each { |argument| command.push(argument) }
62
+ command
55
63
  end
56
64
 
57
65
  def update_command(gems)
@@ -84,15 +92,16 @@ module Appraisal
84
92
  full_options.delete("path")
85
93
 
86
94
  full_options.each do |flag, val|
87
- options_strings << "--#{flag} #{val}"
95
+ option_value = val.is_a?(Set) ? val.to_a.join(" ") : String(val)
96
+ options_strings.push("--#{flag}", option_value)
88
97
  end
89
98
 
90
- options_strings.join(" ") if options_strings != []
99
+ options_strings
91
100
  end
92
101
 
93
- def path_config_command(path, command)
102
+ def path_config_command(path)
94
103
  relative_path = project_root.join(path)
95
- "bundle config set --local path #{Shellwords.escape(relative_path.to_s)} && (#{command})"
104
+ ["bundle", "config", "set", "--local", "path", relative_path.to_s]
96
105
  end
97
106
 
98
107
  def install_environment(options)
@@ -4,7 +4,7 @@ module Appraisal
4
4
  # Version namespace for this gem.
5
5
  module Version
6
6
  # Current gem version.
7
- VERSION = "3.2.4"
7
+ VERSION = "3.2.5"
8
8
  end
9
9
  # Current gem version exposed at the traditional constant location.
10
10
  VERSION = Version::VERSION # Traditional Constant Location
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appraisal2
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.4
4
+ version: 3.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Ferris
@@ -125,7 +125,7 @@ dependencies:
125
125
  version: '3.1'
126
126
  - - ">="
127
127
  - !ruby/object:Gem::Version
128
- version: 3.1.0
128
+ version: 3.1.5
129
129
  type: :development
130
130
  prerelease: false
131
131
  version_requirements: !ruby/object:Gem::Requirement
@@ -135,7 +135,7 @@ dependencies:
135
135
  version: '3.1'
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 3.1.0
138
+ version: 3.1.5
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: bundler-audit
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -199,7 +199,7 @@ dependencies:
199
199
  version: '2.0'
200
200
  - - ">="
201
201
  - !ruby/object:Gem::Version
202
- version: 2.0.21
202
+ version: 2.0.23
203
203
  type: :development
204
204
  prerelease: false
205
205
  version_requirements: !ruby/object:Gem::Requirement
@@ -209,7 +209,7 @@ dependencies:
209
209
  version: '2.0'
210
210
  - - ">="
211
211
  - !ruby/object:Gem::Version
212
- version: 2.0.21
212
+ version: 2.0.23
213
213
  - !ruby/object:Gem::Dependency
214
214
  name: turbo_tests2
215
215
  requirement: !ruby/object:Gem::Requirement
@@ -219,7 +219,7 @@ dependencies:
219
219
  version: '3.2'
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
- version: 3.2.7
222
+ version: 3.2.12
223
223
  type: :development
224
224
  prerelease: false
225
225
  version_requirements: !ruby/object:Gem::Requirement
@@ -229,7 +229,7 @@ dependencies:
229
229
  version: '3.2'
230
230
  - - ">="
231
231
  - !ruby/object:Gem::Version
232
- version: 3.2.7
232
+ version: 3.2.12
233
233
  - !ruby/object:Gem::Dependency
234
234
  name: ruby-progressbar
235
235
  requirement: !ruby/object:Gem::Requirement
@@ -253,7 +253,7 @@ dependencies:
253
253
  version: '1.0'
254
254
  - - ">="
255
255
  - !ruby/object:Gem::Version
256
- version: 1.0.8
256
+ version: 1.0.9
257
257
  type: :development
258
258
  prerelease: false
259
259
  version_requirements: !ruby/object:Gem::Requirement
@@ -263,7 +263,7 @@ dependencies:
263
263
  version: '1.0'
264
264
  - - ">="
265
265
  - !ruby/object:Gem::Version
266
- version: 1.0.8
266
+ version: 1.0.9
267
267
  - !ruby/object:Gem::Dependency
268
268
  name: gitmoji-regex
269
269
  requirement: !ruby/object:Gem::Requirement
@@ -273,7 +273,7 @@ dependencies:
273
273
  version: '2.0'
274
274
  - - ">="
275
275
  - !ruby/object:Gem::Version
276
- version: 2.0.12
276
+ version: 2.0.13
277
277
  type: :development
278
278
  prerelease: false
279
279
  version_requirements: !ruby/object:Gem::Requirement
@@ -283,7 +283,7 @@ dependencies:
283
283
  version: '2.0'
284
284
  - - ">="
285
285
  - !ruby/object:Gem::Version
286
- version: 2.0.12
286
+ version: 2.0.13
287
287
  - !ruby/object:Gem::Dependency
288
288
  name: activesupport
289
289
  requirement: !ruby/object:Gem::Requirement
@@ -454,10 +454,10 @@ licenses:
454
454
  - MIT
455
455
  metadata:
456
456
  homepage_uri: https://appraisal2.galtzo.com
457
- source_code_uri: https://github.com/appraisal-rb/appraisal2/tree/v3.2.4
458
- changelog_uri: https://github.com/appraisal-rb/appraisal2/blob/v3.2.4/CHANGELOG.md
457
+ source_code_uri: https://github.com/appraisal-rb/appraisal2/tree/v3.2.5
458
+ changelog_uri: https://github.com/appraisal-rb/appraisal2/blob/v3.2.5/CHANGELOG.md
459
459
  bug_tracker_uri: https://github.com/appraisal-rb/appraisal2/issues
460
- documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.2.4
460
+ documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.2.5
461
461
  funding_uri: https://github.com/sponsors/pboling
462
462
  wiki_uri: https://github.com/appraisal-rb/appraisal2/wiki
463
463
  news_uri: https://www.railsbling.com/tags/appraisal2
@@ -487,7 +487,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
487
487
  - !ruby/object:Gem::Version
488
488
  version: '0'
489
489
  requirements: []
490
- rubygems_version: 4.0.17
490
+ rubygems_version: 4.0.20
491
491
  specification_version: 4
492
492
  summary: "\U0001F50D️ Find out what your Ruby gems are worth"
493
493
  test_files: []
metadata.gz.sig CHANGED
Binary file