appraisal2 3.0.2 โ 3.0.4
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 +55 -1
- data/LICENSE.txt +1 -1
- data/README.md +313 -101
- 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 +1 -14
- 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: 657fa1768676719d9a8441f09b221912257be8dccf42b3a118ec73ef6f875a58
|
|
4
|
+
data.tar.gz: 856abbb177d9eb34a844d7c73bc57e34a82724df7f2ff402637d2be9bd3600b1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 221e7aa5366ab1fdce598217adf2d5f4ff3e71f3c600fce0f35c632ae2974bd81b6b9d7a726ddc64b0e5d787d72a879e9e40248d444f88fd3aa45b1fd96f85db
|
|
7
|
+
data.tar.gz: c39aa79557bb57fc08769f3b0fd67967ba3c173e68d8783e61554ee2203da5c88174c9f7c39020ab850bafa23986980019d9c1fb437d4f202038628e70a0ef41
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -19,6 +19,56 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
19
19
|
|
|
20
20
|
### Security
|
|
21
21
|
|
|
22
|
+
## [3.0.4] - 2026-02-10
|
|
23
|
+
|
|
24
|
+
- TAG: [v3.0.4][3.0.4t]
|
|
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
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- Documentation cleanup
|
|
32
|
+
- Fixed typos in docs
|
|
33
|
+
|
|
34
|
+
## [3.0.3] - 2026-02-07
|
|
35
|
+
|
|
36
|
+
- TAG: [v3.0.3][3.0.3t]
|
|
37
|
+
- COVERAGE: 89.67% -- 703/784 lines in 27 files
|
|
38
|
+
- BRANCH COVERAGE: 83.45% -- 121/145 branches in 27 files
|
|
39
|
+
- 43.03% documented
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
|
|
43
|
+
- New CLI specs for testing named appraisal commands with options
|
|
44
|
+
- Shared RSpec contexts for mocking gem managers (`BundlerAdapter` and `OreAdapter`) to facilitate faster unit testing
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- Improved documentation for using `install` and `update` commands with named appraisals and options
|
|
49
|
+
- Added examples showing correct command order: `appraisal <NAME> install --gem-manager=ore`
|
|
50
|
+
- Enhanced "Using Ore with Appraisal2" section with named appraisal examples
|
|
51
|
+
- Refactored `OreAdapter` to use the `Appraisal::Command` abstraction, unifying command execution across gem managers
|
|
52
|
+
- 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.
|
|
53
|
+
- Significantly optimized unit tests in `cli_spec.rb` and `appraisal_spec.rb` by using gem manager mocks, reducing execution time from seconds to milliseconds
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Removed `Dir.chdir` into `gemfiles/` directory before running `ore` commands.
|
|
58
|
+
- Improved robustness of acceptance tests in isolated environments, especially on Ruby HEAD.
|
|
59
|
+
- 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.
|
|
60
|
+
- 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.
|
|
61
|
+
- Improved robustness against Bundler installation failures in CI, especially on Ruby HEAD.
|
|
62
|
+
- `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.
|
|
63
|
+
- Removed aggressive Bundler version matching and "downgrading" logic that stripped prerelease suffixes.
|
|
64
|
+
- **BREAKING BUG FIX**: Fixed CLI to properly handle `install` and `update` commands when targeting a specific appraisal with options
|
|
65
|
+
- Previously `appraisal <NAME> install --gem-manager=ore` would incorrectly try to run the Unix `install` command
|
|
66
|
+
- Now correctly invokes the appraisal install/update methods with proper option parsing
|
|
67
|
+
- Fixes error: `/usr/bin/install: unrecognized option '--gem-manager=ore'`
|
|
68
|
+
- 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`).
|
|
69
|
+
- Improved shell-escaping handling in `Appraisal::Command` and updated acceptance tests to match the more robust output
|
|
70
|
+
- Standardized on `clean_name` (underscores) for gemfile paths across the test suite for consistency
|
|
71
|
+
|
|
22
72
|
## [3.0.2] - 2026-02-06
|
|
23
73
|
|
|
24
74
|
- TAG: [v3.0.2][3.0.2t]
|
|
@@ -105,7 +155,11 @@ Versioning: [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
105
155
|
- code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
|
|
106
156
|
- other minor fixes and improvements
|
|
107
157
|
|
|
108
|
-
[Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.
|
|
158
|
+
[Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.4...HEAD
|
|
159
|
+
[3.0.4]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.3...v3.0.4
|
|
160
|
+
[3.0.4t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.4
|
|
161
|
+
[3.0.3]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.2...v3.0.3
|
|
162
|
+
[3.0.3t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.3
|
|
109
163
|
[3.0.2]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.1...v3.0.2
|
|
110
164
|
[3.0.2t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.0.2
|
|
111
165
|
[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] [![CodeCov Test Coverage][๐codecoviโป๏ธ]][๐codecov] [![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] [![CI JRuby][๐10-j-wfi]][๐10-j-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
|
|
|
@@ -53,8 +53,8 @@ Appraisal2 adds:
|
|
|
53
53
|
|
|
54
54
|
| Tokens to Remember | [![Gem name][โณ๏ธname-img]][โณ๏ธgem-name] [![Gem namespace][โณ๏ธnamespace-img]][โณ๏ธgem-namespace] |
|
|
55
55
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
56
|
-
| Works with JRuby | [![JRuby 9.4 Compat][๐jruby-9.4i]][๐10-
|
|
57
|
-
| Works with Truffle Ruby | [![Truffle Ruby
|
|
56
|
+
| Works with JRuby | [![JRuby 9.4 Compat][๐jruby-9.4i]][๐10-j-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 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
|
|
475
|
+
```
|
|
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
|
|
415
487
|
```
|
|
416
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
|
|
|
@@ -668,6 +791,63 @@ test:
|
|
|
668
791
|
Notice that we are running an rspec suite. You can customize your testing
|
|
669
792
|
command in the `override` section and use your favourite one.
|
|
670
793
|
|
|
794
|
+
## ๐ฆท FLOSS Funding
|
|
795
|
+
|
|
796
|
+
While appraisal-rb tools are free (libre) software, the project would benefit immensely from some funding.
|
|
797
|
+
Raising a monthly budget of... "dollars" would make the project more sustainable.
|
|
798
|
+
|
|
799
|
+
We welcome both individual and corporate sponsors\! We also offer a
|
|
800
|
+
wide array of funding channels to account for your preferences
|
|
801
|
+
(although currently [Open Collective][๐osc] is our preferred funding platform).
|
|
802
|
+
|
|
803
|
+
**If you're working in a company that's making significant use of appraisal-rb tools we'd
|
|
804
|
+
appreciate it if you suggest to your company to become a appraisal-rb sponsor.**
|
|
805
|
+
|
|
806
|
+
You can support the development of appraisal-rb tools via
|
|
807
|
+
[GitHub Sponsors][๐sponsor],
|
|
808
|
+
[Liberapay][โณliberapay],
|
|
809
|
+
[PayPal][๐paypal],
|
|
810
|
+
[Open Collective][๐osc]
|
|
811
|
+
and [Tidelift][๐๏ธentsup-tidelift].
|
|
812
|
+
|
|
813
|
+
| ๐ NOTE |
|
|
814
|
+
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
815
|
+
| If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
|
|
816
|
+
|
|
817
|
+
### Open Collective for Individuals
|
|
818
|
+
|
|
819
|
+
Support us with a monthly donation and help us continue our activities. \[[Become a backer][๐osc-backers]\]
|
|
820
|
+
|
|
821
|
+
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
822
|
+
|
|
823
|
+
<!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
|
|
824
|
+
No backers yet. Be the first!
|
|
825
|
+
<!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
|
|
826
|
+
|
|
827
|
+
### Open Collective for Organizations
|
|
828
|
+
|
|
829
|
+
Become a sponsor and get your logo on our README on GitHub with a link to your site. \[[Become a sponsor][๐osc-sponsors]\]
|
|
830
|
+
|
|
831
|
+
NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
|
|
832
|
+
|
|
833
|
+
<!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
|
|
834
|
+
No sponsors yet. Be the first!
|
|
835
|
+
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
836
|
+
|
|
837
|
+
[kettle-readme-backers]: https://github.com/appraisal-rb/appraisal2/blob/main/exe/kettle-readme-backers
|
|
838
|
+
|
|
839
|
+
### Another way to support open-source
|
|
840
|
+
|
|
841
|
+
Iโm driven by a passion to foster a thriving open-source community โ a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. Iโm reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 ๐ chickens, 2 ๐ถ dogs, 3 ๐ฐ rabbits, 8 ๐โ cats).
|
|
842
|
+
|
|
843
|
+
If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
|
|
844
|
+
|
|
845
|
+
Iโm developing a new library, [floss\_funding][๐floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
|
|
846
|
+
|
|
847
|
+
**[Floss-Funding.dev][๐floss-funding.dev]: ๐๏ธ No network calls. ๐๏ธ No tracking. ๐๏ธ No oversight. ๐๏ธ Minimal crypto hashing. ๐ก Easily disabled nags**
|
|
848
|
+
|
|
849
|
+
[![OpenCollective Backers][๐osc-backers-i]][๐osc-backers] [![OpenCollective Sponsors][๐osc-sponsors-i]][๐osc-sponsors] [![Sponsor Me on Github][๐sponsor-img]][๐sponsor] [![Liberapay Goal Progress][โณliberapay-img]][โณliberapay] [![Donate on PayPal][๐paypal-img]][๐paypal] [![Buy me a coffee][๐buyme-small-img]][๐buyme] [![Donate on Polar][๐polar-img]][๐polar] [![Donate to my FLOSS efforts at ko-fi.com][๐kofi-img]][๐kofi] [![Donate to my FLOSS efforts using Patreon][๐patreon-img]][๐patreon]
|
|
850
|
+
|
|
671
851
|
## ๐ Security
|
|
672
852
|
|
|
673
853
|
See [SECURITY.md][๐security].
|
|
@@ -688,6 +868,8 @@ See [CONTRIBUTING.md][๐คcontributing].
|
|
|
688
868
|
|
|
689
869
|
### Code Coverage
|
|
690
870
|
|
|
871
|
+
[![Coverage Graph][๐codecov-gโป๏ธ]][๐codecov]
|
|
872
|
+
|
|
691
873
|
[![Coveralls Test Coverage][๐coveralls-img]][๐coveralls]
|
|
692
874
|
|
|
693
875
|
[![QLTY Test Coverage][๐qlty-covi]][๐qlty-cov]
|
|
@@ -703,7 +885,10 @@ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][
|
|
|
703
885
|
|
|
704
886
|
Made with [contributors-img][๐contrib-rocks].
|
|
705
887
|
|
|
706
|
-
|
|
888
|
+
Also see GitLab Contributors: <https://gitlab.com/appraisal-rb/appraisal2/-/graphs/main>
|
|
889
|
+
|
|
890
|
+
<details>
|
|
891
|
+
<summary>โญ๏ธ Star History</summary>
|
|
707
892
|
|
|
708
893
|
<a href="https://star-history.com/#appraisal-rb/appraisal2&Date">
|
|
709
894
|
<picture>
|
|
@@ -713,6 +898,8 @@ Made with [contributors-img][๐contrib-rocks].
|
|
|
713
898
|
</picture>
|
|
714
899
|
</a>
|
|
715
900
|
|
|
901
|
+
</details>
|
|
902
|
+
|
|
716
903
|
## ๐ Versioning
|
|
717
904
|
|
|
718
905
|
This Library adheres to [![Semantic Versioning 2.0.0][๐semver-img]][๐semver].
|
|
@@ -721,32 +908,32 @@ Specifically, if a minor or patch version is released that breaks backward compa
|
|
|
721
908
|
a new version should be immediately released that restores compatibility.
|
|
722
909
|
Breaking changes to the public API will only be introduced with new major versions.
|
|
723
910
|
|
|
724
|
-
|
|
911
|
+
> dropping support for a platform is both obviously and objectively a breaking change <br/>
|
|
912
|
+
> โJordan Harband ([@ljharb](https://github.com/ljharb), maintainer of SemVer) [in SemVer issue 716][๐semver-breaking]
|
|
913
|
+
|
|
914
|
+
I understand that policy doesn't work universally ("exceptions to every rule\!"),
|
|
915
|
+
but it is the policy here.
|
|
916
|
+
As such, in many cases it is good to specify a dependency on this library using
|
|
917
|
+
the [Pessimistic Version Constraint][๐pvc] with two digits of precision.
|
|
725
918
|
|
|
726
|
-
|
|
919
|
+
For example:
|
|
727
920
|
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
921
|
+
```ruby
|
|
922
|
+
spec.add_dependency("appraisal2", "~> 3.0")
|
|
923
|
+
```
|
|
731
924
|
|
|
732
|
-
>
|
|
925
|
+
<details markdown="1">
|
|
926
|
+
<summary>๐ Is "Platform Support" part of the public API? More details inside.</summary>
|
|
733
927
|
|
|
734
|
-
|
|
928
|
+
SemVer should, IMO, but doesn't explicitly, say that dropping support for specific Platforms
|
|
929
|
+
is a *breaking change* to an API, and for that reason the bike shedding is endless.
|
|
735
930
|
|
|
736
931
|
To get a better understanding of how SemVer is intended to work over a project's lifetime,
|
|
737
932
|
read this article from the creator of SemVer:
|
|
738
933
|
|
|
739
934
|
- ["Major Version Numbers are Not Sacred"][๐major-versions-not-sacred]
|
|
740
935
|
|
|
741
|
-
|
|
742
|
-
you can (and should) specify a dependency on these libraries using
|
|
743
|
-
the [Pessimistic Version Constraint][๐pvc] with two digits of precision.
|
|
744
|
-
|
|
745
|
-
For example:
|
|
746
|
-
|
|
747
|
-
```ruby
|
|
748
|
-
spec.add_dependency("appraisal2", "~> 3.0")
|
|
749
|
-
```
|
|
936
|
+
</details>
|
|
750
937
|
|
|
751
938
|
See [CHANGELOG.md][๐changelog] for a list of releases.
|
|
752
939
|
|
|
@@ -760,7 +947,7 @@ See [LICENSE.txt][๐license] for the official [Copyright Notice][๐copyright
|
|
|
760
947
|
|
|
761
948
|
<ul>
|
|
762
949
|
<li>
|
|
763
|
-
Copyright (c) 2024-
|
|
950
|
+
Copyright (c) 2024 - 2026 Peter H.ย Boling, of
|
|
764
951
|
<a href="https://discord.gg/3qme4XHNKN">
|
|
765
952
|
Galtzo.com
|
|
766
953
|
<picture>
|
|
@@ -768,41 +955,65 @@ See [LICENSE.txt][๐license] for the official [Copyright Notice][๐copyright
|
|
|
768
955
|
</picture>
|
|
769
956
|
</a>, and Appraisal2 contributors
|
|
770
957
|
</li>
|
|
771
|
-
<li>Copyright (c) 2010-2013 Joe Ferris and thoughtbot, inc.</li>
|
|
958
|
+
<li>Copyright (c) 2010 - 2013 Joe Ferris and thoughtbot, inc.</li>
|
|
772
959
|
</ul>
|
|
773
960
|
|
|
774
|
-
## ๐ค
|
|
961
|
+
## ๐ค A request for help
|
|
962
|
+
|
|
963
|
+
Maintainers have teeth and need to pay their dentists.
|
|
964
|
+
After getting laid off in an RIF in March, and encountering difficulty finding a new one,
|
|
965
|
+
I began spending most of my time building open source tools.
|
|
966
|
+
I'm hoping to be able to pay for my kids' health insurance this month,
|
|
967
|
+
so if you value the work I am doing, I need your support.
|
|
968
|
+
Please consider sponsoring me or the project.
|
|
775
969
|
|
|
776
|
-
|
|
777
|
-
The primary maintainer of this gem, Peter Boling, wants
|
|
778
|
-
Ruby to be a great place for people to solve problems, big and small.
|
|
779
|
-
Please consider supporting his efforts via the giant yellow link below,
|
|
780
|
-
or one of the smaller ones, depending on button size preference.
|
|
970
|
+
To join the community or get help ๐๏ธ Join the Discord.
|
|
781
971
|
|
|
782
|
-
[![
|
|
972
|
+
[![Live Chat on Discord][โ๏ธdiscord-invite-img-ftb]][๐ผ๏ธgaltzo-discord]
|
|
783
973
|
|
|
784
|
-
|
|
974
|
+
To say "thanks!" โ๏ธ Join the Discord or ๐๏ธ send money.
|
|
785
975
|
|
|
786
|
-
|
|
976
|
+
[![Sponsor appraisal-rb/appraisal2 on Open Source Collective][๐osc-all-bottom-img]][๐osc] ๐ [![Sponsor me on GitHub Sponsors][๐sponsor-bottom-img]][๐sponsor] ๐ [![Sponsor me on Liberapay][โณliberapay-bottom-img]][โณliberapay] ๐ [![Donate on PayPal][๐paypal-bottom-img]][๐paypal]
|
|
787
977
|
|
|
788
|
-
|
|
978
|
+
### Please give the project a star โญ โฅ.
|
|
789
979
|
|
|
790
|
-
|
|
980
|
+
Thanks for RTFM. โบ๏ธ
|
|
981
|
+
|
|
982
|
+
[โณliberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
983
|
+
[โณliberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
|
|
791
984
|
[โณliberapay]: https://liberapay.com/pboling/donate
|
|
985
|
+
[๐osc-all-img]: https://img.shields.io/opencollective/all/appraisal-rb
|
|
986
|
+
[๐osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/appraisal-rb
|
|
987
|
+
[๐osc-backers-img]: https://img.shields.io/opencollective/backers/appraisal-rb
|
|
988
|
+
[๐osc-backers]: https://opencollective.com/appraisal-rb#backer
|
|
989
|
+
[๐osc-backers-i]: https://opencollective.com/appraisal-rb/backers/badge.svg?style=flat
|
|
990
|
+
[๐osc-sponsors]: https://opencollective.com/appraisal-rb#sponsor
|
|
991
|
+
[๐osc-sponsors-i]: https://opencollective.com/appraisal-rb/sponsors/badge.svg?style=flat
|
|
992
|
+
[๐osc-all-bottom-img]: https://img.shields.io/opencollective/all/appraisal-rb?style=for-the-badge
|
|
993
|
+
[๐osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/appraisal-rb?style=for-the-badge
|
|
994
|
+
[๐osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/appraisal-rb?style=for-the-badge
|
|
995
|
+
[๐osc]: https://opencollective.com/appraisal-rb
|
|
792
996
|
[๐sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
997
|
+
[๐sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
793
998
|
[๐sponsor]: https://github.com/sponsors/pboling
|
|
794
|
-
[๐polar-img]: https://img.shields.io/badge/polar-donate-
|
|
999
|
+
[๐polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
795
1000
|
[๐polar]: https://polar.sh/pboling
|
|
796
|
-
[๐kofi-img]: https://img.shields.io/badge/
|
|
1001
|
+
[๐kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
797
1002
|
[๐kofi]: https://ko-fi.com/O5O86SNP4
|
|
798
|
-
[๐patreon-img]: https://img.shields.io/badge/patreon-donate-
|
|
1003
|
+
[๐patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
799
1004
|
[๐patreon]: https://patreon.com/galtzo
|
|
800
|
-
[๐buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee
|
|
1005
|
+
[๐buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
801
1006
|
[๐buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
|
|
802
1007
|
[๐buyme]: https://www.buymeacoffee.com/pboling
|
|
1008
|
+
[๐paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
|
|
1009
|
+
[๐paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
|
|
1010
|
+
[๐paypal]: https://www.paypal.com/paypalme/peterboling
|
|
1011
|
+
[๐floss-funding.dev]: https://floss-funding.dev
|
|
1012
|
+
[๐floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
|
|
803
1013
|
[โ๏ธdiscord-invite]: https://discord.gg/3qme4XHNKN
|
|
804
|
-
[โ๏ธdiscord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
|
|
805
|
-
|
|
1014
|
+
[โ๏ธdiscord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
1015
|
+
[โ๏ธruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
|
|
1016
|
+
[โ๏ธruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
806
1017
|
[โbundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
807
1018
|
[โณ๏ธgem-namespace]: https://github.com/appraisal-rb/appraisal2
|
|
808
1019
|
[โณ๏ธnamespace-img]: https://img.shields.io/badge/namespace-Appraisal-brightgreen.svg?style=flat&logo=ruby&logoColor=white
|
|
@@ -865,8 +1076,6 @@ P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.
|
|
|
865
1076
|
[๐codecoviโป๏ธ]: https://codecov.io/gh/appraisal-rb/appraisal2/branch/main/graph/badge.svg?token=0X5VEW9USD
|
|
866
1077
|
[๐coveralls]: https://coveralls.io/github/appraisal-rb/appraisal2?branch=main
|
|
867
1078
|
[๐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
1079
|
[๐codeQL]: https://github.com/appraisal-rb/appraisal2/security/code-scanning
|
|
871
1080
|
[๐codeQL-img]: https://github.com/appraisal-rb/appraisal2/actions/workflows/codeql-analysis.yml/badge.svg
|
|
872
1081
|
[๐1-r2.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-3.yml
|
|
@@ -883,6 +1092,16 @@ P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.
|
|
|
883
1092
|
[๐2-cov-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/coverage.yml/badge.svg
|
|
884
1093
|
[๐3-hd-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/heads.yml
|
|
885
1094
|
[๐3-hd-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/heads.yml/badge.svg
|
|
1095
|
+
[๐4-r2.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-3.yml
|
|
1096
|
+
[๐4-r2.3-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-3.yml/badge.svg
|
|
1097
|
+
[๐4-r2.4-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-4.yml
|
|
1098
|
+
[๐4-r2.4-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-4.yml/badge.svg
|
|
1099
|
+
[๐4-r2.5-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-5.yml
|
|
1100
|
+
[๐4-r2.5-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-5.yml/badge.svg
|
|
1101
|
+
[๐4-r2.6-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-6.yml
|
|
1102
|
+
[๐4-r2.6-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-6.yml/badge.svg
|
|
1103
|
+
[๐4-r2.7-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-7.yml
|
|
1104
|
+
[๐4-r2.7-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-2-7.yml/badge.svg
|
|
886
1105
|
[๐4-r3.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-0.yml
|
|
887
1106
|
[๐4-r3.0-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-0.yml/badge.svg
|
|
888
1107
|
[๐4-r3.1-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-1.yml
|
|
@@ -895,8 +1114,10 @@ P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.
|
|
|
895
1114
|
[๐4-r3.4-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/ruby-3-4.yml/badge.svg
|
|
896
1115
|
[๐5-st-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/style.yml
|
|
897
1116
|
[๐5-st-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/style.yml/badge.svg
|
|
898
|
-
[๐
|
|
899
|
-
[๐
|
|
1117
|
+
[๐9-t-wf]: https://github.com/galtzo-floss/simple_column-scopes/actions/workflows/truffle.yml
|
|
1118
|
+
[๐9-t-wfi]: https://github.com/galtzo-floss/simple_column-scopes/actions/workflows/truffle.yml/badge.svg
|
|
1119
|
+
[๐10-j-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby.yml
|
|
1120
|
+
[๐10-j-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby.yml/badge.svg
|
|
900
1121
|
[๐11-c-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current.yml
|
|
901
1122
|
[๐11-c-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current.yml/badge.svg
|
|
902
1123
|
[๐12-crh-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/current-runtime-heads.yml
|
|
@@ -919,8 +1140,13 @@ P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.
|
|
|
919
1140
|
[๐ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
920
1141
|
[๐ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
921
1142
|
[๐ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
1143
|
+
[๐ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
922
1144
|
[๐ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
923
1145
|
[๐ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
1146
|
+
[๐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
|
|
1147
|
+
[๐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
|
|
1148
|
+
[๐truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
1149
|
+
[๐truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
924
1150
|
[๐truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
925
1151
|
[๐truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
926
1152
|
[๐jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
@@ -952,7 +1178,7 @@ P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.
|
|
|
952
1178
|
[๐gitmoji]:https://gitmoji.dev
|
|
953
1179
|
[๐gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20๐%20๐-34495e.svg?style=flat-square
|
|
954
1180
|
[๐งฎkloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
955
|
-
[๐งฎkloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
1181
|
+
[๐งฎkloc-img]: https://img.shields.io/badge/KLOC-0.784-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
956
1182
|
[๐security]: SECURITY.md
|
|
957
1183
|
[๐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
958
1184
|
[๐copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -968,17 +1194,3 @@ P.S. If you need help๏ธ or want to say thanks, ๐ Join the Discord.
|
|
|
968
1194
|
[๐rlts]: https://github.com/rubocop-lts/rubocop-lts
|
|
969
1195
|
[๐rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
|
|
970
1196
|
[๐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,20 +84,7 @@ module Appraisal
|
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
def run_ore_command(command)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
# Ore resolves path dependencies relative to the current working directory,
|
|
90
|
-
# not relative to the gemfile location. We need to cd to the gemfile's
|
|
91
|
-
# directory so that relative paths like "../appraisal2" resolve correctly.
|
|
92
|
-
gemfile_dir = File.dirname(gemfile_path)
|
|
93
|
-
|
|
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
|
|
100
|
-
end
|
|
87
|
+
Command.new(command, :gemfile => gemfile_path, :skip_bundle_exec => true).run
|
|
101
88
|
end
|
|
102
89
|
end
|
|
103
90
|
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.4
|
|
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.4
|
|
404
|
+
changelog_uri: https://gitlab.com/appraisal-rb/appraisal2/-/blob/v3.0.4/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.4
|
|
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
|