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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +40 -1
- data/LICENSE.txt +1 -1
- data/README.md +190 -64
- data/lib/appraisal/appraisal.rb +3 -1
- data/lib/appraisal/cli.rb +102 -2
- data/lib/appraisal/command.rb +29 -18
- data/lib/appraisal/gem_manager/ore_adapter.rb +2 -8
- data/lib/appraisal/utils.rb +4 -1
- data/lib/appraisal/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +8 -8
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 38e4b948b8ba5dab6352772163578d58d651417961a164d95e2988d4f6de2d62
|
|
4
|
+
data.tar.gz: 14be4128e1b3eb79d1687a8be4d14c98760f0859031f63593eaf9cd91b153ff8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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 -
|
|
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] [![
|
|
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
|
|
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
|
|
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โ๏ธ]
|
|
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โ๏ธ]
|
|
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โ๏ธ]
|
|
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/
|
|
173
|
-
[1-๐๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
174
|
-
[1-un๐๏ธ]: https://github.com/omniauth/omniauth-identity/blob/main/.github/workflows/
|
|
175
|
-
[1-un๐๏ธi]: https://github.com/omniauth/omniauth-identity/actions/workflows/
|
|
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/
|
|
248
|
-
[3-๐๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/
|
|
249
|
-
[3-un๐๏ธ]: https://github.com/pboling/silent_stream/blob/master/.github/workflows/
|
|
250
|
-
[3-un๐๏ธi]: https://github.com/pboling/silent_stream/actions/workflows/
|
|
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/
|
|
277
|
-
[4-๐๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/
|
|
278
|
-
[4-un๐๏ธ]: https://github.com/ruby-oauth/oauth2/blob/main/.github/workflows/
|
|
279
|
-
[4-un๐๏ธi]: https://github.com/ruby-oauth/oauth2/actions/workflows/
|
|
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/
|
|
303
|
-
[4-๐i]: https://github.com/ruby-oauth/oauth2/actions/workflows/
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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-
|
|
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.
|
|
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>
|
data/lib/appraisal/appraisal.rb
CHANGED
|
@@ -84,7 +84,9 @@ module Appraisal
|
|
|
84
84
|
manager.install(options)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
def update(gems = [],
|
|
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,
|
|
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
|
-
|
|
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
|
data/lib/appraisal/command.rb
CHANGED
|
@@ -10,41 +10,50 @@ module Appraisal
|
|
|
10
10
|
def initialize(command, options = {})
|
|
11
11
|
@gemfile = options[:gemfile]
|
|
12
12
|
@env = options.fetch(:env, {})
|
|
13
|
-
@
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
36
|
-
|
|
37
|
-
return if system(%(gem list --silent -i bundler -v #{version}))
|
|
32
|
+
def execute(run_env)
|
|
33
|
+
announce
|
|
38
34
|
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
`
|
|
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
|
-
|
|
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
|
-
|
|
95
|
-
|
|
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
|
data/lib/appraisal/utils.rb
CHANGED
|
@@ -64,7 +64,10 @@ module Appraisal
|
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def bundler_version
|
|
67
|
-
Gem::Specification.detect { |
|
|
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
|
data/lib/appraisal/version.rb
CHANGED
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
404
|
-
changelog_uri: https://gitlab.com/appraisal-rb/appraisal2/-/blob/v3.0.
|
|
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.
|
|
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
|