appraisal2 3.0.2 โ†’ 3.0.3

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: '00238b4f449b722f44616a03423e66d0ac258b612305696715a0b174536cb811'
4
- data.tar.gz: 3b3ae4af7322b1af5cec9b2785570fc080bbd5f3a183b86130a6ce1f675a5f26
3
+ metadata.gz: 38e4b948b8ba5dab6352772163578d58d651417961a164d95e2988d4f6de2d62
4
+ data.tar.gz: 14be4128e1b3eb79d1687a8be4d14c98760f0859031f63593eaf9cd91b153ff8
5
5
  SHA512:
6
- metadata.gz: 117cf9b62c2493baa3f0f03f199a4730e21be9c441e07289e80749d3a229b3b7bba541f5691e21049a38c239e7be4ff8596f92aba65584893ed3281ae99e7175
7
- data.tar.gz: ea442654a6fef207430453eab13d29bf725cfd0befa694e984c2272f4c70ae84e11644beaaa0c919a5cdd6506f6aeefe7db95994a16bea74dc0288d6bb8724a0
6
+ metadata.gz: e0a974f20045c122df9a0fea7589ce6b0f725b45db2975baa3346d89a98917a10215c94d790ed9094af20bb4327fbfb97d1f55335bcf15eca1239e4c76db62dc
7
+ data.tar.gz: 977bd13d0ccd10e7fd6e94b749270a44cb954c160a3cf94ea05928657eddb263d23ce8196943b971e83a58b0072e550e4557336d3b9748031f50b3c860166790
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -19,6 +19,43 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
19
19
 
20
20
  ### Security
21
21
 
22
+ ## [3.0.3] - 2026-02-07
23
+
24
+ - TAG: [v3.0.3][3.0.3t]
25
+ - COVERAGE: 89.67% -- 703/784 lines in 27 files
26
+ - BRANCH COVERAGE: 83.45% -- 121/145 branches in 27 files
27
+ - 43.03% documented
28
+
29
+ ### Added
30
+
31
+ - New CLI specs for testing named appraisal commands with options
32
+ - Shared RSpec contexts for mocking gem managers (`BundlerAdapter` and `OreAdapter`) to facilitate faster unit testing
33
+
34
+ ### Changed
35
+
36
+ - Improved documentation for using `install` and `update` commands with named appraisals and options
37
+ - Added examples showing correct command order: `appraisal <NAME> install --gem-manager=ore`
38
+ - Enhanced "Using Ore with Appraisal2" section with named appraisal examples
39
+ - Refactored `OreAdapter` to use the `Appraisal::Command` abstraction, unifying command execution across gem managers
40
+ - Enhanced `Appraisal::Command` with a `:skip_bundle_exec` option to support standalone executables like `ore`. When this option is enabled, `Command` now also skips `Bundler.with_original_env` wrapping and `ensure_bundler_is_available` checks, avoiding unnecessary Bundler overhead.
41
+ - Significantly optimized unit tests in `cli_spec.rb` and `appraisal_spec.rb` by using gem manager mocks, reducing execution time from seconds to milliseconds
42
+
43
+ ### Fixed
44
+
45
+ - Improved robustness of acceptance tests in isolated environments, especially on Ruby HEAD.
46
+ - Updated `setup_gem_path_for_local_install` to correctly include `TMP_GEM_ROOT` and more reliably detect the parent project's `vendor/bundle` gem directory.
47
+ - Added a fallback to remote installation in `build_default_gemfile` if `bundle install --local` fails, preventing test failures when dependencies are missing from the local cache.
48
+ - Improved robustness against Bundler installation failures in CI, especially on Ruby HEAD.
49
+ - `Appraisal::Command` and acceptance tests now only attempt to install Bundler if no version is currently available, avoiding unnecessary and potentially failing version-specific installations.
50
+ - Removed aggressive Bundler version matching and "downgrading" logic that stripped prerelease suffixes.
51
+ - **BREAKING BUG FIX**: Fixed CLI to properly handle `install` and `update` commands when targeting a specific appraisal with options
52
+ - Previously `appraisal <NAME> install --gem-manager=ore` would incorrectly try to run the Unix `install` command
53
+ - Now correctly invokes the appraisal install/update methods with proper option parsing
54
+ - Fixes error: `/usr/bin/install: unrecognized option '--gem-manager=ore'`
55
+ - Fixed argument parsing in CLI where repeated values could be mis-parsed as gem names instead of option values (e.g., `appraisal <NAME> update ore -g ore`).
56
+ - Improved shell-escaping handling in `Appraisal::Command` and updated acceptance tests to match the more robust output
57
+ - Standardized on `clean_name` (underscores) for gemfile paths across the test suite for consistency
58
+
22
59
  ## [3.0.2] - 2026-02-06
23
60
 
24
61
  - TAG: [v3.0.2][3.0.2t]
@@ -105,7 +142,9 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
105
142
  - code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
106
143
  - other minor fixes and improvements
107
144
 
108
- [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.2...HEAD
145
+ [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.3...HEAD
146
+ [3.0.3]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.2...v3.0.3
147
+ [3.0.3t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.3
109
148
  [3.0.2]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.1...v3.0.2
110
149
  [3.0.2t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.2
111
150
  [3.0.1]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.0...v3.0.1
data/LICENSE.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  The MIT License (MIT)
2
2
 
3
3
  Copyright (c) 2010 - 2013 Joe Ferris and thoughtbot, inc.
4
- Copyright (c) 2024 - 2025 Peter H. Boling (Galtzo.com)
4
+ Copyright (c) 2024 - 2026 Peter H. Boling (Galtzo.com)
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  - You, possibly
15
15
 
16
- [![Version][๐Ÿ‘ฝversioni]][๐Ÿ‘ฝversion] [![License: MIT][๐Ÿ“„license-img]][๐Ÿ“„license-ref] [![Downloads Rank][๐Ÿ‘ฝdl-ranki]][๐Ÿ‘ฝdl-rank] [![Open Source Helpers][๐Ÿ‘ฝoss-helpi]][๐Ÿ‘ฝoss-help] [![Depfu][๐Ÿ”‘depfuiโ™ป๏ธ]][๐Ÿ”‘depfu] [![Coveralls Test Coverage][๐Ÿ”‘coveralls-img]][๐Ÿ”‘coveralls] [![QLTY Test Coverage][๐Ÿ”‘qlty-covi]][๐Ÿ”‘qlty-cov] [![QLTY Maintainability][๐Ÿ”‘qlty-mnti]][๐Ÿ”‘qlty-mnt] [![CI Heads][๐ŸšŽ3-hd-wfi]][๐ŸšŽ3-hd-wf] [![CI Runtime Dependencies @ HEAD][๐ŸšŽ12-crh-wfi]][๐ŸšŽ12-crh-wf] [![CI Current][๐ŸšŽ11-c-wfi]][๐ŸšŽ11-c-wf] [![Deps Locked][๐ŸšŽ13-๐Ÿ”’๏ธ-wfi]][๐ŸšŽ13-๐Ÿ”’๏ธ-wf] [![Deps Unlocked][๐ŸšŽ14-๐Ÿ”“๏ธ-wfi]][๐ŸšŽ14-๐Ÿ”“๏ธ-wf] [![CI Test Coverage][๐ŸšŽ2-cov-wfi]][๐ŸšŽ2-cov-wf] [![CI Style][๐ŸšŽ5-st-wfi]][๐ŸšŽ5-st-wf]
16
+ [![Version][๐Ÿ‘ฝversioni]][๐Ÿ‘ฝversion] [![License: MIT][๐Ÿ“„license-img]][๐Ÿ“„license-ref] [![Downloads Rank][๐Ÿ‘ฝdl-ranki]][๐Ÿ‘ฝdl-rank] [![Open Source Helpers][๐Ÿ‘ฝoss-helpi]][๐Ÿ‘ฝoss-help] [![Coveralls Test Coverage][๐Ÿ”‘coveralls-img]][๐Ÿ”‘coveralls] [![QLTY Test Coverage][๐Ÿ”‘qlty-covi]][๐Ÿ”‘qlty-cov] [![QLTY Maintainability][๐Ÿ”‘qlty-mnti]][๐Ÿ”‘qlty-mnt] [![CI Heads][๐ŸšŽ3-hd-wfi]][๐ŸšŽ3-hd-wf] [![CI Runtime Dependencies @ HEAD][๐ŸšŽ12-crh-wfi]][๐ŸšŽ12-crh-wf] [![CI Current][๐ŸšŽ11-c-wfi]][๐ŸšŽ11-c-wf] [![CI Truffle Ruby][๐ŸšŽ9-t-wfi]][๐ŸšŽ9-t-wf] [![Deps Locked][๐ŸšŽ13-๐Ÿ”’๏ธ-wfi]][๐ŸšŽ13-๐Ÿ”’๏ธ-wf] [![Deps Unlocked][๐ŸšŽ14-๐Ÿ”“๏ธ-wfi]][๐ŸšŽ14-๐Ÿ”“๏ธ-wf] [![CI Legacy][๐ŸšŽ4-r3.4-wfi]][๐ŸšŽ4-r3.4-wf] [![CI Legacy][๐ŸšŽ4-r3.3-wfi]][๐ŸšŽ4-r3.3-wf] [![CI Legacy][๐ŸšŽ4-r3.2-wfi]][๐ŸšŽ4-r3.2-wf] [![CI Legacy][๐ŸšŽ4-r3.1-wfi]][๐ŸšŽ4-r3.1-wf] [![CI Legacy][๐ŸšŽ4-r3.0-wfi]][๐ŸšŽ4-r3.0-wf] [![CI Legacy][๐ŸšŽ4-r2.7-wfi]][๐ŸšŽ4-r2.7-wf] [![CI Legacy][๐ŸšŽ4-r2.6-wfi]][๐ŸšŽ4-r2.6-wf] [![CI Legacy][๐ŸšŽ4-r2.5-wfi]][๐ŸšŽ4-r2.5-wf] [![CI Legacy][๐ŸšŽ4-r2.4-wfi]][๐ŸšŽ4-r2.4-wf] [![CI Legacy][๐ŸšŽ4-r2.3-wfi]][๐ŸšŽ4-r2.3-wf] [![CI Test Coverage][๐ŸšŽ2-cov-wfi]][๐ŸšŽ2-cov-wf] [![CI Style][๐ŸšŽ5-st-wfi]][๐ŸšŽ5-st-wf]
17
17
 
18
18
  ---
19
19
 
@@ -54,7 +54,7 @@ Appraisal2 adds:
54
54
  | Tokens to Remember | [![Gem name][โ›ณ๏ธname-img]][โ›ณ๏ธgem-name] [![Gem namespace][โ›ณ๏ธnamespace-img]][โ›ณ๏ธgem-namespace] |
55
55
  |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
56
56
  | Works with JRuby | [![JRuby 9.4 Compat][๐Ÿ’Žjruby-9.4i]][๐ŸšŽ10-j9.4-wf] [![JRuby 10.0 Compat][๐Ÿ’Žjruby-c-i]][๐ŸšŽ11-c-wf] [![JRuby HEAD Compat][๐Ÿ’Žjruby-headi]][๐ŸšŽ3-hd-wf] |
57
- | Works with Truffle Ruby | [![Truffle Ruby 24.1 Compat][๐Ÿ’Žtruby-c-i]][๐ŸšŽ11-c-wf] |
57
+ | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][๐Ÿ’Žtruby-22.3i] ![Truffle Ruby 23.1 Compat][๐Ÿ’Žtruby-23.1i] <br/> [![Truffle Ruby 24.2 Compat][๐Ÿ’Žtruby-24.2i]][๐ŸšŽ9-t-wf] [![Truffle Ruby 25.0 Compat][๐Ÿ’Žtruby-25.0i]][๐ŸšŽ9-t-wf] [![Truffle Ruby 33.0 Compat][๐Ÿ’Žtruby-c-i]][๐ŸšŽ11-c-wf] |
58
58
  | Works with MRI Ruby 4 | [![Ruby 4.0 Compat][๐Ÿ’Žruby-c-i]][๐ŸšŽ11-c-wf] [![Ruby HEAD Compat][๐Ÿ’Žruby-headi]][๐ŸšŽ3-hd-wf] |
59
59
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][๐Ÿ’Žruby-3.0i]][๐ŸšŽ4-r3.0-wf] [![Ruby 3.1 Compat][๐Ÿ’Žruby-3.1i]][๐ŸšŽ4-r3.1-wf] [![Ruby 3.2 Compat][๐Ÿ’Žruby-3.2i]][๐ŸšŽ4-r3.2-wf] [![Ruby 3.3 Compat][๐Ÿ’Žruby-3.3i]][๐ŸšŽ4-r3.3-wf] [![Ruby 3.4 Compat][๐Ÿ’Žruby-3.4i]][๐ŸšŽ4-r3.4-wf] |
60
60
  | Works with MRI Ruby 2 | ![Ruby 2.0 Compat][๐Ÿ’Žruby-2.0i] ![Ruby 2.1 Compat][๐Ÿ’Žruby-2.1i] ![Ruby 2.2 Compat][๐Ÿ’Žruby-2.2i] <br> [![Ruby 2.3 Compat][๐Ÿ’Žruby-2.3i]][๐ŸšŽ1-r2.3-wf] [![Ruby 2.4 Compat][๐Ÿ’Žruby-2.4i]][๐ŸšŽ1-r2.4-wf] [![Ruby 2.5 Compat][๐Ÿ’Žruby-2.5i]][๐ŸšŽ1-r2.5-wf] [![Ruby 2.6 Compat][๐Ÿ’Žruby-2.6i]][๐ŸšŽ1-r2.6-wf] [![Ruby 2.7 Compat][๐Ÿ’Žruby-2.7i]][๐ŸšŽ1-r2.7-wf] |
@@ -158,21 +158,21 @@ to commit the \[main\] `Gemfile.lock` for **both** apps **and** gems. It does th
158
158
 
159
159
  Having so many different use cases means it can be helpful to others to see how you have done your implementation. If you are willing to spend the time documenting, please send a PR to update this table with another Appraisal2-using project, linking to the specific workflows people can check to see how it is done!
160
160
 
161
- | # | gem | locked / unlocked deps | analysis / services | SemVer / HEAD deps | Rubies | os |
162
- |---|-------------------------------------------------------------------------------|----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----|
163
- | 1 | [omniauth-identity][1-gh]<br>[![Star][1-โญ๏ธi]][1-gh]<br>[![Rank][1-๐Ÿ”ขi]][1-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][1-๐Ÿ”’๏ธi]][1-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][1-un๐Ÿ”’๏ธi]][1-un๐Ÿ”’๏ธ] | [![Style][1-asโš™๏ธi]][1-asโš™๏ธ]<br>[![Coverage][1-acโš™๏ธi]][1-acโš™๏ธ]<br>[![Svcs][1-scโš™๏ธi]][1-scโš™๏ธ]<br>[![L-Svcs][1-slโš™๏ธi]][1-slโš™๏ธ]<br>[![S-Svcs][1-ssโš™๏ธi]][1-ssโš™๏ธ]<br>[![U-Svcs][1-suโš™๏ธi]][1-suโš™๏ธ]<br>[![A-Svcs][1-saโš™๏ธi]][1-saโš™๏ธ]<br>[![J-Svcs][1-sjโš™๏ธi]][1-sjโš™๏ธ]<br>[![AJ-Svcs][1-sajโš™๏ธi]][1-sajโš™๏ธ] | [![Current][1-โฐi]][1-โฐ]<br>[![Deps@HEAD][1-๐Ÿ‘Ÿi]][1-๐Ÿ‘Ÿ] | [![Supported][1-๐Ÿ‘ดi]][1-๐Ÿ‘ด]<br>[![Unsupported][1-u๐Ÿ‘ดi]][1-u๐Ÿ‘ด]<br>[![Legacy][1-l๐Ÿ‘ดi]][1-l๐Ÿ‘ด]<br>[![Ancient][1-a๐Ÿ‘ดi]][1-a๐Ÿ‘ด]<br>[![JRuby][1-ji]][1-j]<br>[![JRuby Ancient][1-ja๐Ÿ‘ดi]][1-ja๐Ÿ‘ด]<br>[![Head][1-๐Ÿ—ฃ๏ธi]][1-๐Ÿ—ฃ๏ธ] | โŒ |
164
- | 2 | [rspec-stubbed_env][2-gh]<br>[![Star][2-โญ๏ธi]][2-gh]<br>[![Rank][2-๐Ÿ”ขi]][2-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][2-๐Ÿ”’๏ธi]][2-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][2-un๐Ÿ”’๏ธi]][2-un๐Ÿ”’๏ธ] | [![Style][2-asโš™๏ธi]][2-asโš™๏ธ]<br>[![Coverage][2-acโš™๏ธi]][2-acโš™๏ธ] | [![Current][2-โฐi]][2-โฐ] | [![Supported][2-๐Ÿ‘ดi]][2-๐Ÿ‘ด]<br>[![Unsupported][2-u๐Ÿ‘ดi]][2-u๐Ÿ‘ด]<br>[![Legacy][2-l๐Ÿ‘ดi]][2-l๐Ÿ‘ด]<br>[![Ancient][2-a๐Ÿ‘ดi]][2-a๐Ÿ‘ด]<br>[![JRuby][2-ji]][2-j]<br>[![Truffle][2-ti]][2-t]<br>[![Head][2-๐Ÿ—ฃ๏ธi]][2-๐Ÿ—ฃ๏ธ] | โŒ |
165
- | 3 | [silent_stream][3-gh]<br>[![Star][3-โญ๏ธi]][3-gh]<br>[![Rank][3-๐Ÿ”ขi]][3-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][3-๐Ÿ”’๏ธi]][3-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][3-un๐Ÿ”’๏ธi]][3-un๐Ÿ”’๏ธ] | [![Style][3-asโš™๏ธi]][3-asโš™๏ธ]<br>[![Coverage][3-acโš™๏ธi]][3-acโš™๏ธ] | [![Current][3-โฐi]][3-โฐ] | [![Supported][3-๐Ÿ‘ดi]][3-๐Ÿ‘ด]<br>[![Unsupported][3-u๐Ÿ‘ดi]][3-u๐Ÿ‘ด]<br>[![Legacy][3-l๐Ÿ‘ดi]][3-l๐Ÿ‘ด]<br>[![Ancient][3-a๐Ÿ‘ดi]][3-a๐Ÿ‘ด]<br>[![JRuby][3-ji]][3-j]<br>[![Truffle][3-ti]][3-t]<br>[![Head][3-๐Ÿ—ฃ๏ธi]][3-๐Ÿ—ฃ๏ธ] | โŒ |
166
- | 4 | [oauth2][4-gh]<br>[![Star][4-โญ๏ธi]][4-gh]<br>[![Rank][4-๐Ÿ”ขi]][4-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][4-๐Ÿ”’๏ธi]][4-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][4-un๐Ÿ”’๏ธi]][4-un๐Ÿ”’๏ธ] | [![Style][4-asโš™๏ธi]][4-asโš™๏ธ]<br>[![Coverage][4-acโš™๏ธi]][4-acโš™๏ธ]<br>[![Svcs][4-scโš™๏ธi]][4-scโš™๏ธ]<br>[![L-Svcs][4-slโš™๏ธi]][4-slโš™๏ธ]<br>[![S-Svcs][4-ssโš™๏ธi]][4-ssโš™๏ธ]<br>[![U-Svcs][4-suโš™๏ธi]][4-suโš™๏ธ]<br>[![A-Svcs][4-saโš™๏ธi]][4-saโš™๏ธ]<br>[![J-Svcs][4-sjโš™๏ธi]][4-sjโš™๏ธ]<br>[![AJ-Svcs][4-sajโš™๏ธi]][4-sajโš™๏ธ] | [![Current][4-โฐi]][4-โฐ]<br>[![Deps@HEAD][4-๐Ÿ‘Ÿi]][4-๐Ÿ‘Ÿ] | [![Supported][4-๐Ÿ‘ดi]][4-๐Ÿ‘ด]<br>[![Unsupported][4-u๐Ÿ‘ดi]][4-u๐Ÿ‘ด]<br>[![Legacy][4-l๐Ÿ‘ดi]][4-l๐Ÿ‘ด]<br>[![Ancient][4-a๐Ÿ‘ดi]][4-a๐Ÿ‘ด]<br>[![JRuby][4-ji]][4-j]<br>[![JRuby Ancient][4-ja๐Ÿ‘ดi]][4-ja๐Ÿ‘ด]<br>[![Head][4-๐Ÿ—ฃ๏ธi]][4-๐Ÿ—ฃ๏ธ] | โŒ |
161
+ | # | gem | locked / unlocked deps | analysis / services | SemVer / HEAD deps | Rubies | os |
162
+ |---|-------------------------------------------------------------------------------|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------|
163
+ | 1 | [omniauth-identity][1-gh]<br>[![Star][1-โญ๏ธi]][1-gh]<br>[![Rank][1-๐Ÿ”ขi]][1-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][1-๐Ÿ”’๏ธi]][1-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][1-un๐Ÿ”’๏ธi]][1-un๐Ÿ”’๏ธ] | [![Style][1-asโš™๏ธi]][1-asโš™๏ธ]<br>[![Coverage][1-acโš™๏ธi]][1-acโš™๏ธ]<br>[![Svcs][1-scโš™๏ธi]][1-scโš™๏ธ]<br>[![L-Svcs][1-slโš™๏ธi]][1-slโš™๏ธ]<br>[![S-Svcs][1-ssโš™๏ธi]][1-ssโš™๏ธ]<br>[![U-Svcs][1-suโš™๏ธi]][1-suโš™๏ธ]<br>[![A-Svcs][1-saโš™๏ธi]][1-saโš™๏ธ]<br>[![J-Svcs][1-sjโš™๏ธi]][1-sjโš™๏ธ]<br>[![AJ-Svcs][1-sajโš™๏ธi]][1-sajโš™๏ธ] | [![Current][1-โฐi]][1-โฐ]<br>[![Deps@HEAD][1-๐Ÿ‘Ÿi]][1-๐Ÿ‘Ÿ] | [![Supported][1-๐Ÿ‘ดi]][1-๐Ÿ‘ด]<br>[![Unsupported][1-u๐Ÿ‘ดi]][1-u๐Ÿ‘ด]<br>[![Legacy][1-l๐Ÿ‘ดi]][1-l๐Ÿ‘ด]<br>[![Ancient][1-a๐Ÿ‘ดi]][1-a๐Ÿ‘ด]<br>[![JRuby][1-ji]][1-j]<br>[![JRuby Ancient][1-ja๐Ÿ‘ดi]][1-ja๐Ÿ‘ด]<br>[![Head][1-๐Ÿ—ฃ๏ธi]][1-๐Ÿ—ฃ๏ธ] | โŒ |
164
+ | 2 | [rspec-stubbed_env][2-gh]<br>[![Star][2-โญ๏ธi]][2-gh]<br>[![Rank][2-๐Ÿ”ขi]][2-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][2-๐Ÿ”’๏ธi]][2-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][2-un๐Ÿ”’๏ธi]][2-un๐Ÿ”’๏ธ] | [![Style][2-asโš™๏ธi]][2-asโš™๏ธ]<br>[![Coverage][2-acโš™๏ธi]][2-acโš™๏ธ] | [![Current][2-โฐi]][2-โฐ] | [![Supported][2-๐Ÿ‘ดi]][2-๐Ÿ‘ด]<br>[![Unsupported][2-u๐Ÿ‘ดi]][2-u๐Ÿ‘ด]<br>[![Legacy][2-l๐Ÿ‘ดi]][2-l๐Ÿ‘ด]<br>[![Ancient][2-a๐Ÿ‘ดi]][2-a๐Ÿ‘ด]<br>[![JRuby][2-ji]][2-j]<br>[![Truffle][2-ti]][2-t]<br>[![Head][2-๐Ÿ—ฃ๏ธi]][2-๐Ÿ—ฃ๏ธ] | โŒ |
165
+ | 3 | [silent_stream][3-gh]<br>[![Star][3-โญ๏ธi]][3-gh]<br>[![Rank][3-๐Ÿ”ขi]][3-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][3-๐Ÿ”’๏ธi]][3-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][3-un๐Ÿ”’๏ธi]][3-un๐Ÿ”’๏ธ] | [![Style][3-asโš™๏ธi]][3-asโš™๏ธ]<br>[![Coverage][3-acโš™๏ธi]][3-acโš™๏ธ] | [![Current][3-โฐi]][3-โฐ] | [![Supported][3-๐Ÿ‘ดi]][3-๐Ÿ‘ด]<br>[![Unsupported][3-u๐Ÿ‘ดi]][3-u๐Ÿ‘ด]<br>[![Legacy][3-l๐Ÿ‘ดi]][3-l๐Ÿ‘ด]<br>[![Ancient][3-a๐Ÿ‘ดi]][3-a๐Ÿ‘ด]<br>[![JRuby][3-ji]][3-j]<br>[![Truffle][3-ti]][3-t]<br>[![Head][3-๐Ÿ—ฃ๏ธi]][3-๐Ÿ—ฃ๏ธ] | โŒ |
166
+ | 4 | [oauth2][4-gh]<br>[![Star][4-โญ๏ธi]][4-gh]<br>[![Rank][4-๐Ÿ”ขi]][4-๐Ÿงฐ] | [![๐Ÿ”’๏ธ][4-๐Ÿ”’๏ธi]][4-๐Ÿ”’๏ธ]<br>[![un๐Ÿ”’๏ธ][4-un๐Ÿ”’๏ธi]][4-un๐Ÿ”’๏ธ] | [![Style][4-asโš™๏ธi]][4-asโš™๏ธ]<br>[![Coverage][4-acโš™๏ธi]][4-acโš™๏ธ] | [![Current][4-โฐi]][4-โฐ]<br>[![Deps@HEAD][4-๐Ÿ‘Ÿi]][4-๐Ÿ‘Ÿ] | [![Supported][4-๐Ÿ‘ดi]][4-๐Ÿ‘ด]<br>[![Unsupported][4-u๐Ÿ‘ดi]][4-u๐Ÿ‘ด]<br>[![Legacy][4-l๐Ÿ‘ดi]][4-l๐Ÿ‘ด]<br>[![Ancient][4-a๐Ÿ‘ดi]][4-a๐Ÿ‘ด]<br>[![JRuby][4-ji]][4-j]<br>[![Head][4-๐Ÿ—ฃ๏ธi]][4-๐Ÿ—ฃ๏ธ] | [![Windows][5-win๏ธi]][5-win๏ธ]<br>[![MacOS][5-mac๏ธi]][5-mac๏ธ] |
167
167
 
168
168
  [1-gh]: https://github.com/omniauth/omniauth-identity
169
169
  [1-๐Ÿงฐ]: https://www.ruby-toolbox.com/projects/omniauth-identity
170
170
  [1-โญ๏ธi]: https://img.shields.io/github/stars/omniauth/omniauth-identity
171
171
  [1-๐Ÿ”ขi]: https://img.shields.io/gem/rd/omniauth-identity.svg
172
- [1-๐Ÿ”’๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/deps_locked.yml
173
- [1-๐Ÿ”’๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/deps_locked.yml/badge.svg
174
- [1-un๐Ÿ”’๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/deps_unlocked.yml
175
- [1-un๐Ÿ”’๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/deps_unlocked.yml/badge.svg
172
+ [1-๐Ÿ”’๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/locked_deps.yml
173
+ [1-๐Ÿ”’๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/locked_deps.yml/badge.svg
174
+ [1-un๐Ÿ”’๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/unlocked_deps.yml
175
+ [1-un๐Ÿ”’๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/unlocked_deps.yml/badge.svg
176
176
  [1-asโš™๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/style.yml
177
177
  [1-asโš™๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/style.yml/badge.svg
178
178
  [1-acโš™๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/coverage.yml
@@ -244,10 +244,10 @@ Having so many different use cases means it can be helpful to others to see how
244
244
  [3-๐Ÿงฐ]: https://www.ruby-toolbox.com/projects/silent_stream
245
245
  [3-โญ๏ธi]: https://img.shields.io/github/stars/pboling/silent_stream
246
246
  [3-๐Ÿ”ขi]: https://img.shields.io/gem/rd/silent_stream.svg
247
- [3-๐Ÿ”’๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/deps_locked.yml
248
- [3-๐Ÿ”’๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/deps_locked.yml/badge.svg
249
- [3-un๐Ÿ”’๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/deps_unlocked.yml
250
- [3-un๐Ÿ”’๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/deps_unlocked.yml/badge.svg
247
+ [3-๐Ÿ”’๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/locked_deps.yml
248
+ [3-๐Ÿ”’๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/locked_deps.yml/badge.svg
249
+ [3-un๐Ÿ”’๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/unlocked_deps.yml
250
+ [3-un๐Ÿ”’๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/unlocked_deps.yml/badge.svg
251
251
  [3-asโš™๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/style.yml
252
252
  [3-asโš™๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/style.yml/badge.svg
253
253
  [3-acโš™๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/coverage.yml
@@ -273,34 +273,20 @@ Having so many different use cases means it can be helpful to others to see how
273
273
  [4-๐Ÿงฐ]: https://www.ruby-toolbox.com/projects/oauth2
274
274
  [4-โญ๏ธi]: https://img.shields.io/github/stars/ruby-oauth/oauth2
275
275
  [4-๐Ÿ”ขi]: https://img.shields.io/gem/rd/oauth2.svg
276
- [4-๐Ÿ”’๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/deps_locked.yml
277
- [4-๐Ÿ”’๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/deps_locked.yml/badge.svg
278
- [4-un๐Ÿ”’๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/deps_unlocked.yml
279
- [4-un๐Ÿ”’๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/deps_unlocked.yml/badge.svg
276
+ [4-๐Ÿ”’๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/locked_deps.yml
277
+ [4-๐Ÿ”’๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/locked_deps.yml/badge.svg
278
+ [4-un๐Ÿ”’๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/unlocked_deps.yml
279
+ [4-un๐Ÿ”’๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/unlocked_deps.yml/badge.svg
280
280
  [4-asโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/style.yml
281
281
  [4-asโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/style.yml/badge.svg
282
282
  [4-acโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/coverage.yml
283
283
  [4-acโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/coverage.yml/badge.svg
284
- [4-scโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/current-svc-adapters.yml
285
- [4-scโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/current-svc-adapters.yml/badge.svg
286
- [4-slโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/legacy-svc-adapters.yml
287
- [4-slโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/legacy-svc-adapters.yml/badge.svg
288
- [4-ssโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/supported-svc-adapters.yml
289
- [4-ssโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/supported-svc-adapters.yml/badge.svg
290
- [4-suโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/unsupported-svc-adapters.yml
291
- [4-suโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/unsupported-svc-adapters.yml/badge.svg
292
- [4-saโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/ancient-svc-adapters.yml
293
- [4-saโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/ancient-svc-adapters.yml/badge.svg
294
- [4-sjโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby-svc-adapters.yml
295
- [4-sjโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-svc-adapters.yml/badge.svg
296
- [4-sajโš™๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby-ancient-svc-adapters.yml
297
- [4-sajโš™๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-ancient-svc-adapters.yml/badge.svg
298
284
  [4-โฐ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/current.yml
299
285
  [4-โฐi]: https://github.com/ruby-oauth/oauth2/actions/workflows/current.yml/badge.svg
300
286
  [4-j]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby.yml
301
287
  [4-ji]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby.yml/badge.svg
302
- [4-๐Ÿ‘Ÿ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/current-runtime-heads.yml
303
- [4-๐Ÿ‘Ÿi]: https://github.com/ruby-oauth/oauth2/actions/workflows/current-runtime-heads.yml/badge.svg
288
+ [4-๐Ÿ‘Ÿ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/dep-heads.yml
289
+ [4-๐Ÿ‘Ÿi]: https://github.com/ruby-oauth/oauth2/actions/workflows/dep-heads.yml/badge.svg
304
290
  [4-๐Ÿ‘ด]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/supported.yml
305
291
  [4-๐Ÿ‘ดi]: https://github.com/ruby-oauth/oauth2/actions/workflows/supported.yml/badge.svg
306
292
  [4-u๐Ÿ‘ด]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/unsupported.yml
@@ -309,10 +295,12 @@ Having so many different use cases means it can be helpful to others to see how
309
295
  [4-l๐Ÿ‘ดi]: https://github.com/ruby-oauth/oauth2/actions/workflows/legacy.yml/badge.svg
310
296
  [4-a๐Ÿ‘ด]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/ancient.yml
311
297
  [4-a๐Ÿ‘ดi]: https://github.com/ruby-oauth/oauth2/actions/workflows/ancient.yml/badge.svg
312
- [4-ja๐Ÿ‘ด]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/jruby-ancient.yml
313
- [4-ja๐Ÿ‘ดi]: https://github.com/ruby-oauth/oauth2/actions/workflows/jruby-ancient.yml/badge.svg
314
298
  [4-๐Ÿ—ฃ๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/heads.yml
315
299
  [4-๐Ÿ—ฃ๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/heads.yml/badge.svg
300
+ [5-win๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/windows.yml
301
+ [5-win๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/windows.yml/badge.svg
302
+ [5-mac๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/macos.yml
303
+ [5-mac๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/macos.yml/badge.svg
316
304
 
317
305
  ## โš’๏ธ Basic Usage
318
306
 
@@ -366,7 +354,10 @@ appraisal version # Display the version and exit
366
354
 
367
355
  ### Command Options
368
356
 
369
- The `install` and `update` commands support several options:
357
+ The `install` and `update` **built-in commands** support several options:
358
+
359
+ **Important:** These options apply **only** to Appraisal's `install` and `update` commands.
360
+ They do **not** apply when running external commands like `bundle install` or `bundle update`.
370
361
 
371
362
  | Option | Description |
372
363
  |--------|-------------|
@@ -377,6 +368,63 @@ The `install` and `update` commands support several options:
377
368
  | `--full-index` | Run bundle install with the full-index argument |
378
369
  | `--path` | Install gems in the specified directory |
379
370
 
371
+ ### Using Commands with Named Appraisals
372
+
373
+ #### Using Appraisal's built-in commands with named appraisals
374
+
375
+ When using Appraisal's `install` or `update` commands with a specific appraisal name,
376
+ place the appraisal name first, then the command, then any options:
377
+
378
+ ```bash
379
+ # โœ… Correct order: appraisal <NAME> <COMMAND> [OPTIONS]
380
+ bundle exec appraisal rails-7 install --gem-manager=ore
381
+ bundle exec appraisal rails-7 update rails --gem-manager=ore
382
+ bundle exec appraisal rails-7 install --jobs=4
383
+
384
+ # โŒ Wrong order (won't work)
385
+ bundle exec appraisal install rails-7 --gem-manager=ore # Wrong order
386
+ ```
387
+
388
+ More examples with Appraisal's built-in commands:
389
+
390
+ ```bash
391
+ # Install dependencies for a specific appraisal
392
+ bundle exec appraisal rails-7 install
393
+
394
+ # Install with options
395
+ bundle exec appraisal rails-7 install --gem-manager=ore --jobs=4
396
+
397
+ # Update all gems in a specific appraisal
398
+ bundle exec appraisal rails-7 update
399
+
400
+ # Update specific gems in a specific appraisal
401
+ bundle exec appraisal rails-7 update rails rack
402
+ bundle exec appraisal rails-7 update rails rack --gem-manager=ore
403
+ ```
404
+
405
+ #### Running external commands with named appraisals
406
+
407
+ For running external commands (like `rake test`, `rspec`, etc.) with a specific appraisal,
408
+ the structure is the same: appraisal name first, then the command:
409
+
410
+ ```bash
411
+ # Run any external command with a specific appraisal's dependencies
412
+ bundle exec appraisal <APPRAISAL_NAME> <COMMAND>
413
+
414
+ # Examples:
415
+ bundle exec appraisal rails-7 rake test
416
+ bundle exec appraisal rails-7 rspec
417
+ bundle exec appraisal rails-7 rubocop
418
+
419
+ # Note: External commands do NOT support appraisal options like --gem-manager
420
+ # This doesn't work and will fail:
421
+ bundle exec appraisal rails-7 bundle install --gem-manager=ore # โŒ Wrong
422
+ ```
423
+
424
+ **Key difference:**
425
+ - `bundle exec appraisal rails-7 install --gem-manager=ore` โœ… โ†’ Uses **Appraisal's** install command with ORE
426
+ - `bundle exec appraisal rails-7 bundle install --gem-manager=ore` โŒ โ†’ Tries to run external **bundle** command (which doesn't recognize `--gem-manager`)
427
+
380
428
  ## ๐Ÿฆ€ Using Ore (Alternative Gem Manager)
381
429
 
382
430
  Appraisal2 supports [ORE](https://github.com/contriboss/ore-light) as an alternative to Bundler
@@ -398,22 +446,50 @@ curl -fsSL https://raw.githubusercontent.com/contriboss/ore-light/master/scripts
398
446
 
399
447
  ### Using Ore with Appraisal2
400
448
 
401
- To use ORE instead of bundler, pass the `--gem-manager=ore` option:
449
+ The `--gem-manager=ore` option works **only** with Appraisal's built-in `install` and `update` commands.
450
+ It does **NOT** work with external commands like `bundle install`.
451
+
452
+ #### โœ… Using --gem-manager with Appraisal's install/update commands
453
+
454
+ To use ORE instead of bundler for dependency installation, pass the `--gem-manager=ore` option:
402
455
 
403
456
  ```bash
404
- # Install dependencies using ORE
457
+ # Install dependencies for ALL appraisals using ORE
405
458
  bundle exec appraisal install --gem-manager=ore
406
459
 
407
- # Update dependencies using ORE
460
+ # Update dependencies for ALL appraisals using ORE
408
461
  bundle exec appraisal update --gem-manager=ore
462
+
463
+ # Install dependencies for a SPECIFIC appraisal using ORE
464
+ bundle exec appraisal <APPRAISAL_NAME> install --gem-manager=ore
465
+
466
+ # Update dependencies for a SPECIFIC appraisal using ORE
467
+ bundle exec appraisal <APPRAISAL_NAME> update <GEMS> --gem-manager=ore
409
468
  ```
410
469
 
411
470
  You can also use the short form:
412
471
 
413
472
  ```bash
414
473
  bundle exec appraisal install -g ore
474
+ bundle exec appraisal <APPRAISAL_NAME> install -g ore
415
475
  ```
416
476
 
477
+ #### โŒ Do NOT use --gem-manager with external commands
478
+
479
+ The `--gem-manager` option **cannot** be used when running external commands like `bundle install`:
480
+
481
+ ```bash
482
+ # โŒ WRONG - Don't try to pass --gem-manager to external commands
483
+ bundle exec appraisal coverage bundle install --gem-manager=ore
484
+
485
+ # โœ… RIGHT - Use appraisal's install command instead
486
+ bundle exec appraisal coverage install --gem-manager=ore
487
+ ```
488
+
489
+ The difference:
490
+ - `bundle exec appraisal coverage install --gem-manager=ore` โ†’ Uses Appraisal's install command with ORE
491
+ - `bundle exec appraisal coverage bundle install --gem-manager=ore` โ†’ Tries to run external `bundle install` (which doesn't recognize `--gem-manager`)
492
+
417
493
  ### Ore-Specific Options
418
494
 
419
495
  When using ORE, some options are translated to ORE's equivalents:
@@ -432,16 +508,29 @@ When using ORE, some options are translated to ORE's equivalents:
432
508
  # Generate appraisal gemfiles
433
509
  bundle exec appraisal generate
434
510
 
435
- # Install dependencies using ORE (faster than bundler)
511
+ # Install dependencies for ALL appraisals using ORE (faster than bundler)
436
512
  bundle exec appraisal install --gem-manager=ore --jobs=4
437
513
 
438
- # Run tests against all appraisals
514
+ # Install dependencies for a SPECIFIC appraisal using ORE
515
+ bundle exec appraisal rails-7 install --gem-manager=ore --jobs=4
516
+
517
+ # Run tests against all appraisals (uses dependencies from appraisal gemfiles)
439
518
  bundle exec appraisal rspec
440
519
 
441
- # Update a specific gem using ORE
520
+ # Run tests against a specific appraisal (uses that appraisal's dependencies)
521
+ bundle exec appraisal rails-7 rspec
522
+
523
+ # Update a specific gem in ALL appraisals using ORE
442
524
  bundle exec appraisal update rack --gem-manager=ore
525
+
526
+ # Update a specific gem in ONE appraisal using ORE
527
+ bundle exec appraisal rails-7 update rack --gem-manager=ore
443
528
  ```
444
529
 
530
+ **Note:** When running tests or other external commands, the dependencies are already
531
+ installed from the appraisal's gemfile. You don't need to (and can't) pass `--gem-manager`
532
+ to external commandsโ€”it only works with Appraisal's built-in `install` and `update` commands.
533
+
445
534
  ### When to Use Ore
446
535
 
447
536
  Ore can be particularly beneficial when:
@@ -453,6 +542,40 @@ Ore can be particularly beneficial when:
453
542
  Note that ORE must be installed separately and available in your PATH.
454
543
  If you specify ORE and it is not available, appraisal2 will raise an error.
455
544
 
545
+ ### Troubleshooting ORE/Gem Manager Issues
546
+
547
+ #### Error: "Unknown switches --gem-manager=ore"
548
+
549
+ If you see an error like:
550
+ ```
551
+ Unknown switches("--gem-manager=ore")
552
+ ```
553
+
554
+ This usually means you're trying to pass `--gem-manager` to an external command instead of
555
+ Appraisal's built-in command.
556
+
557
+ โŒ **Wrong:**
558
+ ```bash
559
+ bundle exec appraisal coverage bundle install --gem-manager=ore
560
+ # Error: "Unknown switches --gem-manager=ore"
561
+ # The --gem-manager flag is being passed to the external 'bundle install' command,
562
+ # which doesn't recognize it.
563
+ ```
564
+
565
+ โœ… **Correct:**
566
+ ```bash
567
+ bundle exec appraisal coverage install --gem-manager=ore
568
+ # Correct: Uses Appraisal's install command with ORE gem manager
569
+ ```
570
+
571
+ **Key point:** The `--gem-manager` option **only works** with Appraisal's built-in
572
+ `install` and `update` commands. It cannot be used with external commands like
573
+ `bundle install`, `bundle update`, or `bundle exec rake/rspec`.
574
+
575
+ If you need to install dependencies using ORE:
576
+ 1. Run `bundle exec appraisal <NAME> install --gem-manager=ore`
577
+ 2. Then run your tests: `bundle exec appraisal <NAME> rspec`
578
+
456
579
  Under the hood
457
580
  --------------
458
581
 
@@ -688,6 +811,8 @@ See [CONTRIBUTING.md][๐Ÿคcontributing].
688
811
 
689
812
  ### Code Coverage
690
813
 
814
+ [![Coverage Graph][๐Ÿ”‘codecov-gโ™ป๏ธ]][๐Ÿ”‘codecov]
815
+
691
816
  [![Coveralls Test Coverage][๐Ÿ”‘coveralls-img]][๐Ÿ”‘coveralls]
692
817
 
693
818
  [![QLTY Test Coverage][๐Ÿ”‘qlty-covi]][๐Ÿ”‘qlty-cov]
@@ -760,7 +885,7 @@ See [LICENSE.txt][๐Ÿ“„license] for the official [Copyright Notice][๐Ÿ“„copyright
760
885
 
761
886
  <ul>
762
887
  <li>
763
- Copyright (c) 2024-2025 Peter H.ย Boling, of
888
+ Copyright (c) 2024 - 2026 Peter H.ย Boling, of
764
889
  <a href="https://discord.gg/3qme4XHNKN">
765
890
  Galtzo.com
766
891
  <picture>
@@ -768,7 +893,7 @@ See [LICENSE.txt][๐Ÿ“„license] for the official [Copyright Notice][๐Ÿ“„copyright
768
893
  </picture>
769
894
  </a>, and Appraisal2 contributors
770
895
  </li>
771
- <li>Copyright (c) 2010-2013 Joe Ferris and thoughtbot, inc.</li>
896
+ <li>Copyright (c) 2010 - 2013 Joe Ferris and thoughtbot, inc.</li>
772
897
  </ul>
773
898
 
774
899
  ## ๐Ÿค‘ One more thing
@@ -865,8 +990,6 @@ P.S. If you need help๏ธ or want to say thanks, ๐Ÿ‘‡ Join the Discord.
865
990
  [๐Ÿ”‘codecoviโ™ป๏ธ]: https://codecov.io/gh/appraisal-rb/appraisal2/branch/main/graph/badge.svg?token=0X5VEW9USD
866
991
  [๐Ÿ”‘coveralls]: https://coveralls.io/github/appraisal-rb/appraisal2?branch=main
867
992
  [๐Ÿ”‘coveralls-img]: https://coveralls.io/repos/github/appraisal-rb/appraisal2/badge.svg?branch=main
868
- [๐Ÿ”‘depfu]: https://depfu.com/github/appraisal-rb/appraisal2?project_id=67033
869
- [๐Ÿ”‘depfuiโ™ป๏ธ]: https://badges.depfu.com/badges/b5344eec8b60c9e72bd9145ff53cd07b/count.svg
870
993
  [๐Ÿ–codeQL]: https://github.com/appraisal-rb/appraisal2/security/code-scanning
871
994
  [๐Ÿ–codeQL-img]: https://github.com/appraisal-rb/appraisal2/actions/workflows/codeql-analysis.yml/badge.svg
872
995
  [๐ŸšŽ1-r2.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-3.yml
@@ -883,6 +1006,16 @@ P.S. If you need help๏ธ or want to say thanks, ๐Ÿ‘‡ Join the Discord.
883
1006
  [๐ŸšŽ2-cov-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/coverage.yml/badge.svg
884
1007
  [๐ŸšŽ3-hd-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/heads.yml
885
1008
  [๐ŸšŽ3-hd-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/heads.yml/badge.svg
1009
+ [๐ŸšŽ4-r2.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-3.yml
1010
+ [๐ŸšŽ4-r2.3-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-3.yml/badge.svg
1011
+ [๐ŸšŽ4-r2.4-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-4.yml
1012
+ [๐ŸšŽ4-r2.4-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-4.yml/badge.svg
1013
+ [๐ŸšŽ4-r2.5-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-5.yml
1014
+ [๐ŸšŽ4-r2.5-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-5.yml/badge.svg
1015
+ [๐ŸšŽ4-r2.6-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-6.yml
1016
+ [๐ŸšŽ4-r2.6-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-6.yml/badge.svg
1017
+ [๐ŸšŽ4-r2.7-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-7.yml
1018
+ [๐ŸšŽ4-r2.7-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-7.yml/badge.svg
886
1019
  [๐ŸšŽ4-r3.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-0.yml
887
1020
  [๐ŸšŽ4-r3.0-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-0.yml/badge.svg
888
1021
  [๐ŸšŽ4-r3.1-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-1.yml
@@ -895,6 +1028,8 @@ P.S. If you need help๏ธ or want to say thanks, ๐Ÿ‘‡ Join the Discord.
895
1028
  [๐ŸšŽ4-r3.4-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-4.yml/badge.svg
896
1029
  [๐ŸšŽ5-st-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/style.yml
897
1030
  [๐ŸšŽ5-st-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/style.yml/badge.svg
1031
+ [๐ŸšŽ9-t-wf]: https://github.com/galtzo-floss/simple_column-scopes/actions/workflows/truffle.yml
1032
+ [๐ŸšŽ9-t-wfi]: https://github.com/galtzo-floss/simple_column-scopes/actions/workflows/truffle.yml/badge.svg
898
1033
  [๐ŸšŽ10-j9.4-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9-4.yml
899
1034
  [๐ŸšŽ10-j9.4-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9-4.yml/badge.svg
900
1035
  [๐ŸšŽ11-c-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current.yml
@@ -919,8 +1054,13 @@ P.S. If you need help๏ธ or want to say thanks, ๐Ÿ‘‡ Join the Discord.
919
1054
  [๐Ÿ’Žruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
920
1055
  [๐Ÿ’Žruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
921
1056
  [๐Ÿ’Žruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
1057
+ [๐Ÿ’Žruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
922
1058
  [๐Ÿ’Žruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
923
1059
  [๐Ÿ’Žruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
1060
+ [๐Ÿ’Žtruby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
1061
+ [๐Ÿ’Žtruby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
1062
+ [๐Ÿ’Žtruby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
1063
+ [๐Ÿ’Žtruby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
924
1064
  [๐Ÿ’Žtruby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
925
1065
  [๐Ÿ’Žtruby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
926
1066
  [๐Ÿ’Žjruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
@@ -952,7 +1092,7 @@ P.S. If you need help๏ธ or want to say thanks, ๐Ÿ‘‡ Join the Discord.
952
1092
  [๐Ÿ“Œgitmoji]:https://gitmoji.dev
953
1093
  [๐Ÿ“Œgitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20๐Ÿ˜œ%20๐Ÿ˜-34495e.svg?style=flat-square
954
1094
  [๐Ÿงฎkloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
955
- [๐Ÿงฎkloc-img]: https://img.shields.io/badge/KLOC-0.782-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1095
+ [๐Ÿงฎkloc-img]: https://img.shields.io/badge/KLOC-0.784-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
956
1096
  [๐Ÿ”security]: SECURITY.md
957
1097
  [๐Ÿ”security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
958
1098
  [๐Ÿ“„copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -968,17 +1108,3 @@ P.S. If you need help๏ธ or want to say thanks, ๐Ÿ‘‡ Join the Discord.
968
1108
  [๐Ÿ’Žrlts]: https://github.com/rubocop-lts/rubocop-lts
969
1109
  [๐Ÿ’Žrlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
970
1110
  [๐Ÿ’Žd-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
971
-
972
- <details>
973
- <summary>
974
- Disabled Badges
975
- </summary>
976
-
977
- Badges for failing services.
978
- Bug reports filed.
979
- Once fixed, these should look much nicer.
980
-
981
- [![CodeCov Test Coverage][๐Ÿ”‘codecoviโ™ป๏ธ]][๐Ÿ”‘codecov]
982
- [![Coverage Graph][๐Ÿ”‘codecov-gโ™ป๏ธ]][๐Ÿ”‘codecov]
983
-
984
- </details>
@@ -84,7 +84,9 @@ module Appraisal
84
84
  manager.install(options)
85
85
  end
86
86
 
87
- def update(gems = [], gem_manager: nil)
87
+ def update(gems = [], options = {})
88
+ gem_manager = options[:gem_manager] || options["gem_manager"] ||
89
+ options[:"gem-manager"] || options["gem-manager"]
88
90
  manager = GemManager::Factory.create(gemfile_path, project_root, :manager => gem_manager)
89
91
  manager.update(gems)
90
92
  end
data/lib/appraisal/cli.rb CHANGED
@@ -104,8 +104,9 @@ module Appraisal
104
104
  invoke(:generate, [], {})
105
105
 
106
106
  gem_manager = options["gem-manager"] || options[:gem_manager]
107
+ update_options = gem_manager ? {:gem_manager => gem_manager} : {}
107
108
  AppraisalFile.each do |appraisal|
108
- appraisal.update(gems, :gem_manager => gem_manager)
109
+ appraisal.update(gems, update_options)
109
110
  end
110
111
  end
111
112
 
@@ -127,7 +128,40 @@ module Appraisal
127
128
  end
128
129
 
129
130
  if matching_appraisal
130
- Command.new(args, :gemfile => matching_appraisal.gemfile_path).run
131
+ # If no arguments were passed to method_missing, check ARGV
132
+ # This handles cases where Thor doesn't pass arguments
133
+ actual_args = (args.empty? && ARGV.any?) ? ARGV.dup : args
134
+
135
+ # Check if the first argument is a Thor command (install or update)
136
+ if actual_args.first == "install"
137
+ # Extract Thor options from the remaining arguments
138
+ # Filter out the command name and pass options to install
139
+ filtered_args = actual_args[1..-1] || []
140
+ # Parse the options ourselves since Thor isn't parsing them here
141
+ parsed_options = parse_external_options(filtered_args)
142
+
143
+ # Also include the class-level gem_manager option if provided
144
+ # Thor consumes class_option before calling method_missing, so check both places
145
+ gem_manager = options["gem-manager"] || options[:gem_manager]
146
+ parsed_options[:gem_manager] = gem_manager if gem_manager && !parsed_options.key?(:gem_manager)
147
+
148
+ matching_appraisal.write_gemfile
149
+ matching_appraisal.install(parsed_options)
150
+ matching_appraisal.relativize
151
+ elsif actual_args.first == "update"
152
+ # Extract gems and options
153
+ filtered_args = actual_args[1..-1] || []
154
+ gems, parsed_options = extract_gems_and_options(filtered_args)
155
+
156
+ # Also include the class-level gem_manager option if provided
157
+ gem_manager = options["gem-manager"] || options[:gem_manager]
158
+ parsed_options[:gem_manager] = gem_manager if gem_manager && !parsed_options.key?(:gem_manager)
159
+
160
+ matching_appraisal.update(gems, parsed_options)
161
+ else
162
+ # Run as an external command
163
+ Command.new(actual_args, :gemfile => matching_appraisal.gemfile_path).run
164
+ end
131
165
  else
132
166
  AppraisalFile.each do |appraisal|
133
167
  Command.new(ARGV, :gemfile => appraisal.gemfile_path).run
@@ -135,6 +169,72 @@ module Appraisal
135
169
  end
136
170
  end
137
171
 
172
+ def parse_external_options(args)
173
+ options = {}
174
+ skip_next = false
175
+
176
+ args.each_with_index do |arg, index|
177
+ if skip_next
178
+ skip_next = false
179
+ next
180
+ end
181
+
182
+ case arg
183
+ when /^--gem-manager=(.+)$/
184
+ options[:gem_manager] = Regexp.last_match(1)
185
+ when /^-g$/
186
+ # Next arg should be the value
187
+ options[:gem_manager] = args[index + 1]
188
+ skip_next = true
189
+ when /^--jobs=(\d+)$/
190
+ options[:jobs] = Regexp.last_match(1).to_i
191
+ when /^-j(\d+)$/
192
+ options[:jobs] = Regexp.last_match(1).to_i
193
+ when /^--retry=(\d+)$/
194
+ options[:retry] = Regexp.last_match(1).to_i
195
+ when /^--without=(.+)$/
196
+ options[:without] = Regexp.last_match(1)
197
+ when /^--path=(.+)$/
198
+ options[:path] = Regexp.last_match(1)
199
+ when /^--full-index$/
200
+ options[:full_index] = true
201
+ end
202
+ end
203
+ options
204
+ end
205
+
206
+ def extract_gems_and_options(args)
207
+ gems = []
208
+ options = {}
209
+ skip_next = false
210
+
211
+ args.each_with_index do |arg, index|
212
+ if skip_next
213
+ skip_next = false
214
+ next
215
+ end
216
+
217
+ case arg
218
+ when /^--gem-manager=(.+)$/
219
+ options[:gem_manager] = Regexp.last_match(1)
220
+ when /^-g$/
221
+ # Next arg should be the value
222
+ options[:gem_manager] = args[index + 1]
223
+ skip_next = true
224
+ when /^-/
225
+ # Other options are not gems, but we don't handle them all here
226
+ # For now, just skip them to be safe if they start with -
227
+ # Actually, the original code only handled -g specifically.
228
+ # If we see another option we don't know, it's probably not a gem name.
229
+ # But Thor usually handles them. Here we are in method_missing.
230
+ else
231
+ gems << arg
232
+ end
233
+ end
234
+
235
+ [gems, options]
236
+ end
237
+
138
238
  def respond_to_missing?(name, include_private = false)
139
239
  appraisals = AppraisalFile.new.appraisals
140
240
  appraisals.any? { |appraisal| appraisal.name == name.to_s } || super
@@ -10,41 +10,50 @@ module Appraisal
10
10
  def initialize(command, options = {})
11
11
  @gemfile = options[:gemfile]
12
12
  @env = options.fetch(:env, {})
13
- @command = command_starting_with_bundle(command)
13
+ @skip_bundle_exec = options.fetch(:skip_bundle_exec, false)
14
+ @command = @skip_bundle_exec ? command : command_starting_with_bundle(command)
14
15
  end
15
16
 
16
17
  def run
17
18
  run_env = test_environment.merge(env)
18
19
 
19
- Bundler.with_original_env do
20
- ensure_bundler_is_available
21
- announce
22
-
23
- ENV["BUNDLE_GEMFILE"] = gemfile
24
- ENV["APPRAISAL_INITIALIZED"] = "1"
25
- run_env.each_pair do |key, value|
26
- ENV[key] = value
20
+ if @skip_bundle_exec
21
+ execute(run_env)
22
+ else
23
+ Bundler.with_original_env do
24
+ ensure_bundler_is_available
25
+ execute(run_env)
27
26
  end
28
-
29
- exit(1) unless Kernel.system(command_as_string)
30
27
  end
31
28
  end
32
29
 
33
30
  private
34
31
 
35
- def ensure_bundler_is_available
36
- version = Utils.bundler_version
37
- return if system(%(gem list --silent -i bundler -v #{version}))
32
+ def execute(run_env)
33
+ announce
38
34
 
39
- puts ">> Reinstall Bundler into #{ENV["GEM_HOME"]}"
35
+ ENV["BUNDLE_GEMFILE"] = gemfile
36
+ ENV["APPRAISAL_INITIALIZED"] = "1"
37
+ run_env.each_pair do |key, value|
38
+ ENV[key] = value
39
+ end
40
40
 
41
- return if system("gem install bundler --version #{version}")
41
+ exit(1) unless Kernel.system(command_as_string)
42
+ end
43
+
44
+ def ensure_bundler_is_available
45
+ # Check if any version of bundler is available
46
+ return if system(%(gem list --silent -i bundler))
47
+
48
+ puts ">> Bundler not found, attempting to install..."
49
+ # If that fails, try to install the latest stable version
50
+ return if system("gem install bundler")
42
51
 
43
52
  puts
44
53
  puts <<-ERROR.rstrip
45
54
  Bundler installation failed.
46
55
  Please try running:
47
- `GEM_HOME="#{ENV["GEM_HOME"]}" gem install bundler --version #{version}`
56
+ `gem install bundler`
48
57
  manually.
49
58
  ERROR
50
59
  exit(1)
@@ -69,8 +78,10 @@ manually.
69
78
  def command_starting_with_bundle(original_command)
70
79
  if command_starts_with_bundle?(original_command)
71
80
  original_command
72
- else
81
+ elsif original_command.is_a?(Array)
73
82
  %w[bundle exec] + original_command
83
+ else
84
+ "bundle exec #{original_command}"
74
85
  end
75
86
  end
76
87
 
@@ -84,19 +84,13 @@ module Appraisal
84
84
  end
85
85
 
86
86
  def run_ore_command(command)
87
- puts ">> BUNDLE_GEMFILE=#{gemfile_path} #{command.join(" ")}"
88
-
89
87
  # Ore resolves path dependencies relative to the current working directory,
90
88
  # not relative to the gemfile location. We need to cd to the gemfile's
91
89
  # directory so that relative paths like "../appraisal2" resolve correctly.
92
90
  gemfile_dir = File.dirname(gemfile_path)
93
91
 
94
- Bundler.with_original_env do
95
- ENV["BUNDLE_GEMFILE"] = gemfile_path
96
- ENV["APPRAISAL_INITIALIZED"] = "1"
97
- Dir.chdir(gemfile_dir) do
98
- exit(1) unless Kernel.system(*command)
99
- end
92
+ Dir.chdir(gemfile_dir) do
93
+ Command.new(command, :gemfile => gemfile_path, :skip_bundle_exec => true).run
100
94
  end
101
95
  end
102
96
  end
@@ -64,7 +64,10 @@ module Appraisal
64
64
  end
65
65
 
66
66
  def bundler_version
67
- Gem::Specification.detect { |spec| spec.name == "bundler" }.version.to_s
67
+ spec = Gem::Specification.detect { |s| s.name == "bundler" }
68
+ return "2.4.22" unless spec # Fallback for very old systems
69
+
70
+ spec.version.to_s
68
71
  end
69
72
  end
70
73
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Appraisal
4
4
  module Version
5
- VERSION = "3.0.2"
5
+ VERSION = "3.0.3"
6
6
  end
7
7
  VERSION = Version::VERSION # Traditional constant location
8
8
  end
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.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -172,7 +172,7 @@ dependencies:
172
172
  version: '1.0'
173
173
  - - ">="
174
174
  - !ruby/object:Gem::Version
175
- version: 1.0.9
175
+ version: 1.0.10
176
176
  type: :development
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
@@ -182,7 +182,7 @@ dependencies:
182
182
  version: '1.0'
183
183
  - - ">="
184
184
  - !ruby/object:Gem::Version
185
- version: 1.0.9
185
+ version: 1.0.10
186
186
  - !ruby/object:Gem::Dependency
187
187
  name: rspec
188
188
  requirement: !ruby/object:Gem::Requirement
@@ -240,7 +240,7 @@ dependencies:
240
240
  version: '0.1'
241
241
  - - ">="
242
242
  - !ruby/object:Gem::Version
243
- version: 0.1.19
243
+ version: 0.1.20
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
@@ -250,7 +250,7 @@ dependencies:
250
250
  version: '0.1'
251
251
  - - ">="
252
252
  - !ruby/object:Gem::Version
253
- version: 0.1.19
253
+ version: 0.1.20
254
254
  - !ruby/object:Gem::Dependency
255
255
  name: rspec-stubbed_env
256
256
  requirement: !ruby/object:Gem::Requirement
@@ -400,10 +400,10 @@ licenses:
400
400
  - MIT
401
401
  metadata:
402
402
  homepage_uri: https://appraisal2.galtzo.com/
403
- source_code_uri: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.2
404
- changelog_uri: https://gitlab.com/appraisal-rb/appraisal2/-/blob/v3.0.2/CHANGELOG.md
403
+ source_code_uri: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.3
404
+ changelog_uri: https://gitlab.com/appraisal-rb/appraisal2/-/blob/v3.0.3/CHANGELOG.md
405
405
  bug_tracker_uri: https://gitlab.com/appraisal-rb/appraisal2/-/issues
406
- documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.0.2
406
+ documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.0.3
407
407
  wiki_uri: https://gitlab.com/appraisal-rb/appraisal2/-/wiki
408
408
  funding_uri: https://github.com/sponsors/pboling
409
409
  news_uri: https://www.railsbling.com/tags/appraisal2
metadata.gz.sig CHANGED
Binary file