appraisal2 3.1.1 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c2316bffba1559cb55b0c393052bd487630867af9e7a41d37c73c43315bc2b9
4
- data.tar.gz: a37397565aa148f422d031621cb715d2b48bffcd3f9ddba06aa773488f984995
3
+ metadata.gz: 5697b5d78bd1b3ef5881a7e0bdce99ae1d786406652771d072f42e9d131c3d13
4
+ data.tar.gz: af85c613932969ec699dc5297a8dc4f7d3601d6ce898aa3d5750eba68d72febc
5
5
  SHA512:
6
- metadata.gz: f9a4fe27e3fb3e5979021df8b565f32ad454c924f2aaa1a15d0517d66b5fa2fd095c2daaae9cf0d422f4445510d44f6e0604d0acd735d3131189d7c54ab79ca9
7
- data.tar.gz: 1415ef332fc92e289a1f28fe4b9cfcd401d5699e2556d1bacfb463e67420121fd45b6184fca10c6b88a445c83f59c5e573b4bab5b047bd8707d2667046448a15
6
+ metadata.gz: ce5998ea1956670ef493180dcd23ec3026d9468ff87849424a6c491578be7260a277009cb1be39cb29ede5c68507116b61c0cb8473cbe520c5d426f547c55aff
7
+ data.tar.gz: eed7065a3a876f9416cdc12e6915bdc692c6327dacc13e027b400fc2a120ac06cc1d31b6afb574868c48b76f935212d5938a7adadfc0cd55d44a230cd2e4e57e
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -22,14 +22,67 @@ Please file a bug if you notice a violation of semantic versioning.
22
22
 
23
23
  ### Changed
24
24
 
25
+ - Clarified README Bundler path caching guidance and removed hard paragraph
26
+ wraps from prose.
27
+
25
28
  ### Deprecated
26
29
 
27
30
  ### Removed
28
31
 
32
+ - Removed unused legacy root and fixture Gemfiles for Ruby 1.8, 2.0, and 2.1.
33
+
29
34
  ### Fixed
30
35
 
36
+ - Re-normalized templated Gemfiles to Ruby 1.8-compatible syntax after
37
+ templating.
38
+ - Restored `GEM_HOME` after acceptance specs so generated fixture gems do not leak into later Bundler subprocesses.
39
+ - Stopped passing Bundler's deprecated `bundle install --path` flag when resolving Appraisal `--path` installs.
40
+ - Disabled `ruby/setup-ruby` Bundler caching in the JRuby 9.3 workflow and
41
+ run a serial Bundler install to avoid legacy fallback index failures.
42
+
31
43
  ### Security
32
44
 
45
+ ## [3.1.3] - 2026-06-22
46
+
47
+ - TAG: [v3.1.3][3.1.3t]
48
+ - COVERAGE: 90.21% -- 820/909 lines in 29 files
49
+ - BRANCH COVERAGE: 79.10% -- 159/201 branches in 29 files
50
+ - 42.25% documented
51
+
52
+ ### Added
53
+
54
+ - Added support for JRuby 10.1 and TruffleRuby 34.0.
55
+
56
+ ### Changed
57
+
58
+ - Retemplated project metadata and CI/development automation with `kettle-jem` v7.0.0.
59
+
60
+ ### Fixed
61
+
62
+ - Updated local GemMine fixture workspace path wiring to use the migrated
63
+ `kettle-dev` organization directory.
64
+
65
+ ## [3.1.2] - 2026-06-11
66
+
67
+ - TAG: [v3.1.2][3.1.2t]
68
+ - COVERAGE: 90.21% -- 820/909 lines in 29 files
69
+ - BRANCH COVERAGE: 80.71% -- 159/197 branches in 29 files
70
+ - 42.25% documented
71
+
72
+ ### Added
73
+
74
+ - Support for Bundlers cooldown feature (#31)
75
+ - Added released `gem_mine` fixture-scaffold dependency wiring for acceptance
76
+ specs that need temporary throwaway gems.
77
+
78
+ ### Fixed
79
+
80
+ - Cleaned up per-process scaffold roots after acceptance spec runs so generated
81
+ dummy gem projects do not accumulate under `tmp/spec-process-*`.
82
+ - Isolated Git bare-repository config for acceptance specs so Bundler can use
83
+ its per-process local git cache on machines with stricter global Git config.
84
+ - Corrected the gemspec public author email to use `floss@galtzo.com`.
85
+
33
86
  ## [3.1.1] - 2026-06-06
34
87
 
35
88
  - TAG: [v3.1.1][3.1.1t]
@@ -354,14 +407,18 @@ Please file a bug if you notice a violation of semantic versioning.
354
407
  - Initial release as a hard fork of [appraisal v3.0.0.rc1](https://github.com/thoughtbot/appraisal/commit/602cdd9b5f8cb8f36992733422f69312b172f427) with many improvements - by @pboling
355
408
  - support for `eval_gemfile`
356
409
  - support for Ruby 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6 (all removed, or planned-to-be, in thoughtbot's `appraisal`)
357
- - NOTE: The [setup-ruby GH Action](https://github.com/ruby/setup-ruby) only ships support for Ruby 2.3+, so older Rubies are no longer tested in CI. Compatibility is assumed thanks to [![Enforced Code Style Linter](https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white)](https://github.com/rubocop-lts/rubocop-lts) enforcing the syntax for the oldest supported Ruby, which is Ruby v1.8. File a bug if you find something broken.
410
+ - NOTE: The [setup-ruby GH Action](https://github.com/ruby/setup-ruby) only ships support for Ruby 2.3+, so older Rubies are no longer tested in CI. Compatibility is assumed thanks to [![Enforced Code Style Linter](https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white)](https://github.com/rubocop-lts/rubocop-lts) enforcing the syntax for the oldest supported Ruby, which is Ruby v1.8. File a bug if you find something broken.
358
411
  - Support for JRuby 9.4+
359
412
  - updated and improved documentation
360
413
  - maintainability tracked with QLTY.sh and the reek gem
361
414
  - code coverage tracked with Coveralls, QLTY.sh, and the kettle-soup-cover gem
362
415
  - other minor fixes and improvements
363
416
 
364
- [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.1...HEAD
417
+ [Unreleased]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.3...HEAD
418
+ [3.1.3]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.2...v3.1.3
419
+ [3.1.3t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.1.3
420
+ [3.1.2]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.1...v3.1.2
421
+ [3.1.2t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.1.2
365
422
  [3.1.1]: https://github.com/appraisal-rb/appraisal2/compare/v3.1.0...v3.1.1
366
423
  [3.1.1t]: https://github.com/appraisal-rb/appraisal2/releases/tag/v3.1.1
367
424
  [3.1.0]: https://github.com/appraisal-rb/appraisal2/compare/v3.0.9...v3.1.0
data/CONTRIBUTING.md CHANGED
@@ -109,14 +109,14 @@ Git diff driver setup
109
109
  - Git hosting forges generally ignore external diff drivers, so pull request views may still show raw textual diffs even when local `git diff` uses semantic drivers.
110
110
 
111
111
  ```console
112
- K_JEM_TEMPLATING=true bundle exec kettle-jem install
112
+ K_JEM_TEMPLATING=true kettle-jem install
113
113
  ```
114
114
 
115
115
  Troubleshooting Git diffs
116
116
  - Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
117
117
  - Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
118
118
  - If Git reports a missing `smorg-*` executable, rerun `bundle install` and the setup command above, then check `git config --local --get-regexp '^diff\.smorg-'`.
119
- - To remove managed local entries, run `K_JEM_TEMPLATING=true bundle exec kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
119
+ - To remove managed local entries, run `K_JEM_TEMPLATING=true kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
120
120
 
121
121
  For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
122
122
 
data/FUNDING.md CHANGED
@@ -6,7 +6,7 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
6
6
 
7
7
  [![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]
8
8
 
9
- [![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]
9
+ [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
10
10
 
11
11
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
12
12
  [⛳liberapay]: https://liberapay.com/pboling/donate
@@ -16,12 +16,8 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
16
16
  [🖇osc-sponsors-i]: https://opencollective.com/appraisal-rb/sponsors/badge.svg?style=flat
17
17
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
18
18
  [🖇sponsor]: https://github.com/sponsors/pboling
19
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
20
- [🖇polar]: https://polar.sh/pboling
21
19
  [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
22
20
  [🖇kofi]: https://ko-fi.com/pboling
23
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
24
- [🖇patreon]: https://patreon.com/galtzo
25
21
  [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
26
22
  [🖇buyme]: https://www.buymeacoffee.com/pboling
27
23
  [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
data/LICENSE.md CHANGED
@@ -47,3 +47,4 @@ Choose the option that best fits your use case:
47
47
  - Copyright (c) 2024 Joe Sharp
48
48
  - Copyright (c) 2024 Sebastian Cohnen
49
49
  - Copyright (c) 2024 Yevhenii Ponomarenko
50
+ - Copyright (c) 2026 Richard Kramer
data/README.md CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  `if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
12
12
 
13
- [![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 at ko-fi.com][🖇kofi-img]][🖇kofi]
13
+ [![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 at ko-fi.com][🖇kofi-img]][🖇kofi]
14
14
 
15
- <details>
15
+ <details markdown="1">
16
16
  <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
17
17
 
18
18
  I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
@@ -21,34 +21,24 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
21
21
 
22
22
  ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
23
23
 
24
- Appraisal2 integrates with bundler and rake to test your library against
25
- different versions of dependencies in repeatable scenarios called "appraisals."
26
- Appraisal2 is designed to make it easy to check for regressions in your library
27
- without interfering with day-to-day development using Bundler.
24
+ Appraisal2 integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals." Appraisal2 is designed to make it easy to check for regressions in your library without interfering with day-to-day development using Bundler.
28
25
 
29
- Appraisal2 is a hard fork of the venerable appraisal gem,
30
- which thoughtbot maintained for many years.
31
- Many thanks to [thoughtbot](https://github.com/thoughtbot/),
32
- and [Joe Ferris](https://github.com/jferris), the original author!
26
+ Appraisal2 is a hard fork of the venerable appraisal gem, which thoughtbot maintained for many years. Many thanks to [thoughtbot](https://github.com/thoughtbot/), and [Joe Ferris](https://github.com/jferris), the original author!
33
27
 
34
28
  Appraisal2 adds:
35
29
 
36
30
  - support for `eval_gemfile`
37
- - explicit `generate`, `install`, and `update` workflows, so CI can resolve
38
- already-generated appraisal gemfiles without rewriting them
39
- - `generate-install` and `generate-update` commands for workflows that need to
40
- regenerate appraisal gemfiles before resolving dependencies
41
- - named appraisal support for `generate`, `generate-install`, and
42
- `generate-update`
43
- - lifecycle hooks, including `Appraisal.transform_gemfile`, for plugins that
44
- need to normalize generated appraisal gemfiles before Appraisal2 writes them
45
- - support for caching gems across appraisals in CI workflows by setting `BUNDLE_PATH` in env
31
+ - explicit `generate`, `install`, and `update` workflows, so CI can resolve already-generated appraisal gemfiles without rewriting them
32
+ - `generate-install` and `generate-update` commands for workflows that need to regenerate appraisal gemfiles before resolving dependencies
33
+ - named appraisal support for `generate`, `generate-install`, and `generate-update`
34
+ - lifecycle hooks, including `Appraisal.transform_gemfile`, for plugins that need to normalize generated appraisal gemfiles before Appraisal2 writes them
35
+ - support for caching gems across appraisals in CI workflows by setting `BUNDLE_PATH` in env; Appraisal2's `--path` option uses Bundler path configuration instead of the deprecated `bundle install --path` CLI flag
46
36
  - support for [ORE](https://github.com/contriboss/ore-light) as an alternative gem manager (faster than bundler!)
47
37
  - For easy setup in **Gitea** [Actions](https://docs.gitea.com/usage/actions/overview), **Forgejo** [Actions](https://forgejo.org/docs/next/admin/actions/), **Codeberg** [Actions](https://docs.codeberg.org/ci/actions/), or **GitHub** [Actions](https://github.com/marketplace/actions/setup-ruby-with-rv-and-ore) check out [appraisal-rb/setup-ruby-flash](https://github.com/appraisal-rb/setup-ruby-flash)
48
38
  - support for Ruby 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6 (all removed, or planned-to-be, in thoughtbot's `appraisal`)
49
39
  - NOTE: The [setup-ruby GH Action](https://github.com/ruby/setup-ruby) only ships support for Ruby 2.3+, so older Rubies are no longer tested in CI. Compatibility is assumed thanks to [![Enforced Code Style Linter][💎rlts-img]][💎rlts] enforcing the syntax for the oldest supported Ruby, which is Ruby v1.8. File a bug if you find something broken.
50
- - Support for JRuby 9.4+
51
- - Support for Truffle Ruby 22.3+
40
+ - Support for JRuby 9.2, 9.3, 9.4, 10.0, 10.1
41
+ - Support for Truffle Ruby 22.3, 23.0, 23.1, 24.2, 25.0, 33.0, 34.0
52
42
  - Support for MRI Ruby 4+
53
43
  - updated and improved documentation
54
44
  - many other fixes and improvements. See [CHANGELOG](CHANGELOG.md) for details.
@@ -57,12 +47,12 @@ Appraisal2 adds:
57
47
 
58
48
  | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
59
49
  |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
60
- | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
61
- | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
62
- | Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
50
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
51
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
52
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
63
53
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
64
54
  | 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] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
65
- | Works with MRI Ruby 1 | ![Ruby 1.9 Compat][💎ruby-1.9i]|
55
+ | Works with MRI Ruby 1 | ![Ruby 1.8 Compat][💎ruby-1.8i] ![Ruby 1.9 Compat][💎ruby-1.9i]|
66
56
  | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
67
57
  | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
68
58
  | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
@@ -79,9 +69,24 @@ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
79
69
  may be higher than the gem's runtime compatibility floor when legacy Rubies are
80
70
  not practical for the current toolchain.
81
71
 
82
- | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
83
- |------------------------------------------------|--------------------------------------------------------|
84
- | 👟 Check it out! | [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
72
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
73
+
74
+ The _amazing_ test matrix is powered by the kettle-dev stack.
75
+
76
+ <details markdown="1">
77
+ <summary>How kettle-dev manages complexity in tests</summary>
78
+
79
+ | Gem | Source | Role | Daily download rank |
80
+ |-----|--------|------|---------------------|
81
+ | [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Daily download rank for appraisal2-rubocop](https://img.shields.io/gem/rd/appraisal2-rubocop.svg?style=flat-square)](https://bestgems.org/gems/appraisal2-rubocop) |
82
+ | [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Daily download rank for kettle-dev](https://img.shields.io/gem/rd/kettle-dev.svg?style=flat-square)](https://bestgems.org/gems/kettle-dev) |
83
+ | [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Daily download rank for kettle-jem](https://img.shields.io/gem/rd/kettle-jem.svg?style=flat-square)](https://bestgems.org/gems/kettle-jem) |
84
+ | [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Daily download rank for kettle-soup-cover](https://img.shields.io/gem/rd/kettle-soup-cover.svg?style=flat-square)](https://bestgems.org/gems/kettle-soup-cover) |
85
+ | [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Daily download rank for kettle-test](https://img.shields.io/gem/rd/kettle-test.svg?style=flat-square)](https://bestgems.org/gems/kettle-test) |
86
+ | [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Daily download rank for rubocop-lts](https://img.shields.io/gem/rd/rubocop-lts.svg?style=flat-square)](https://bestgems.org/gems/rubocop-lts) |
87
+ | [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Daily download rank for turbo_tests2](https://img.shields.io/gem/rd/turbo_tests2.svg?style=flat-square)](https://bestgems.org/gems/turbo_tests2) |
88
+
89
+ </details>
85
90
 
86
91
  ### Federated DVCS
87
92
 
@@ -138,8 +143,7 @@ gem install appraisal2
138
143
 
139
144
  ## ⚙️ Configuration
140
145
 
141
- Create an `Appraisals` file at the root of your project, then define one or
142
- more dependency scenarios:
146
+ Create an `Appraisals` file at the root of your project, then define one or more dependency scenarios:
143
147
 
144
148
  ```ruby
145
149
  appraise "rails-7" do
@@ -151,15 +155,11 @@ appraise "rails-8" do
151
155
  end
152
156
  ```
153
157
 
154
- Each appraisal starts from your root `Gemfile`, then applies the dependency
155
- changes declared in the matching `appraise` block. Generated appraisal gemfiles
156
- are written to `gemfiles/*.gemfile`.
158
+ Each appraisal starts from your root `Gemfile`, then applies the dependency changes declared in the matching `appraise` block. Generated appraisal gemfiles are written to `gemfiles/*.gemfile`.
157
159
 
158
160
  ### Generated Gemfile Hooks
159
161
 
160
- Appraisal2 3.1.0 adds lifecycle hooks for companion gems and local tooling.
161
- The primary hook is `Appraisal.transform_gemfile`, which receives generated
162
- gemfile content before Appraisal2 writes it.
162
+ Appraisal2 3.1.0 adds lifecycle hooks for companion gems and local tooling. The primary hook is `Appraisal.transform_gemfile`, which receives generated gemfile content before Appraisal2 writes it.
163
163
 
164
164
  ```ruby
165
165
  Appraisal.transform_gemfile do |content, context|
@@ -169,20 +169,13 @@ Appraisal.transform_gemfile do |content, context|
169
169
  end
170
170
  ```
171
171
 
172
- Hooks run in memory. Appraisal2 writes the final transformed content once, after
173
- all registered transforms have run. A transform may accept only `content`, or it
174
- may accept `content, context`. Returning `nil` leaves the current content
175
- unchanged.
172
+ Hooks run in memory. Appraisal2 writes the final transformed content once, after all registered transforms have run. A transform may accept only `content`, or it may accept `content, context`. Returning `nil` leaves the current content unchanged.
176
173
 
177
- This is intended for plugin gems that need deterministic generated output, such
178
- as style normalization of appraisal gemfiles, without monkey-patching Appraisal2
179
- internals.
174
+ This is intended for plugin gems that need deterministic generated output, such as style normalization of appraisal gemfiles, without monkey-patching Appraisal2 internals.
180
175
 
181
176
  ### Generator Plugins
182
177
 
183
- Use `plugin` in `Appraisals` for companion gems that must be loaded while
184
- Appraisal2 evaluates and generates appraisal gemfiles, but must not be written
185
- as dependencies in the generated appraisal gemfiles.
178
+ Use `plugin` in `Appraisals` for companion gems that must be loaded while Appraisal2 evaluates and generates appraisal gemfiles, but must not be written as dependencies in the generated appraisal gemfiles.
186
179
 
187
180
  ```ruby
188
181
  plugin "appraisal2-rubocop",
@@ -190,19 +183,11 @@ plugin "appraisal2-rubocop",
190
183
  :optional => true
191
184
  ```
192
185
 
193
- `plugin` requires the requested path in the active generator bundle. It does not
194
- call `gem`, and it is not serialized into `gemfiles/*.gemfile`. This keeps
195
- generator-only tooling out of appraisals that target older Rubies, while still
196
- allowing modern generator workflows to load hooks such as
197
- `Appraisal.transform_gemfile`.
186
+ `plugin` requires the requested path in the active generator bundle. It does not call `gem`, and it is not serialized into `gemfiles/*.gemfile`. This keeps generator-only tooling out of appraisals that target older Rubies, while still allowing modern generator workflows to load hooks such as `Appraisal.transform_gemfile`.
198
187
 
199
- Set `:optional => true` when some workflows evaluate `Appraisals` without the
200
- plugin dependency installed. This is useful when a CI matrix uses one generator
201
- bundle for old-Ruby appraisals and another modern workflow provides the plugin.
188
+ Set `:optional => true` when some workflows evaluate `Appraisals` without the plugin dependency installed. This is useful when a CI matrix uses one generator bundle for old-Ruby appraisals and another modern workflow provides the plugin.
202
189
 
203
- If the generator bundle needs dependencies that must not be copied into every
204
- generated appraisal gemfile, wrap those root Gemfile declarations with
205
- `generator_only` for Appraisal2 and leave the Bundler branch unchanged:
190
+ If the generator bundle needs dependencies that must not be copied into every generated appraisal gemfile, wrap those root Gemfile declarations with `generator_only` for Appraisal2 and leave the Bundler branch unchanged:
206
191
 
207
192
  ```ruby
208
193
  if respond_to?(:generator_only)
@@ -214,56 +199,39 @@ else
214
199
  end
215
200
  ```
216
201
 
217
- Bundler evaluates the `else` branch while installing the active generator
218
- bundle. Appraisal2 evaluates the `generator_only` branch while parsing the root
219
- Gemfile, but intentionally does not serialize that block into generated
220
- appraisal gemfiles.
202
+ Bundler evaluates the `else` branch while installing the active generator bundle. Appraisal2 evaluates the `generator_only` branch while parsing the root Gemfile, but intentionally does not serialize that block into generated appraisal gemfiles.
221
203
 
222
204
  ## 🔧 Basic Usage
223
205
 
224
- Once you've configured the appraisals you want to use, you need to install the
225
- dependencies for each appraisal:
206
+ Once you've configured the appraisals you want to use, you need to install the dependencies for each appraisal:
226
207
 
227
208
  $ bundle exec appraisal install
228
209
 
229
- This resolves, installs, and locks dependencies for each generated appraisal
230
- gemfile using bundler. If an appraisal gemfile is missing, `install` generates
231
- that missing gemfile first, preserving the basic setup workflow.
210
+ This resolves, installs, and locks dependencies for each generated appraisal gemfile using bundler. If an appraisal gemfile is missing, `install` generates that missing gemfile first, preserving the basic setup workflow.
232
211
 
233
- When you intentionally want to regenerate every appraisal gemfile before
234
- installing dependencies, use:
212
+ When you intentionally want to regenerate every appraisal gemfile before installing dependencies, use:
235
213
 
236
214
  $ bundle exec appraisal generate-install
237
215
 
238
- Once you have your dependencies set up, you can run any command in a single
239
- appraisal:
216
+ Once you have your dependencies set up, you can run any command in a single appraisal:
240
217
 
241
218
  $ bundle exec appraisal rails-3 rake test
242
219
 
243
- This will run `rake test` using the dependencies configured for Rails 3. You can
244
- also run each appraisal in turn:
220
+ This will run `rake test` using the dependencies configured for Rails 3. You can also run each appraisal in turn:
245
221
 
246
222
  $ bundle exec appraisal rake test
247
223
 
248
- If you want to use only the dependencies from your Gemfile, just run `rake
249
- test` as normal. This allows you to keep running with the latest versions of
250
- your dependencies in quick test runs, but keep running the tests in older
251
- versions to check for regressions.
224
+ If you want to use only the dependencies from your Gemfile, just run `rake test` as normal. This allows you to keep running with the latest versions of your dependencies in quick test runs, but keep running the tests in older versions to check for regressions.
252
225
 
253
- In the case that you want to run all the appraisals by default when you run
254
- `rake`, you can override your default Rake task by putting this into your Rakefile:
226
+ In the case that you want to run all the appraisals by default when you run `rake`, you can override your default Rake task by putting this into your Rakefile:
255
227
 
256
228
  if !ENV["APPRAISAL_INITIALIZED"] && ENV.fetch("CI", "false").casecmp("false") == 0
257
229
  task :default => :appraisal
258
230
  end
259
231
 
260
- (Appraisal2 sets `APPRAISAL_INITIALIZED` environment variable when it runs your
261
- process. We put a check here to ensure that `appraisal rake` command should run
262
- your real default task, which usually is your `test` task.)
232
+ (Appraisal2 sets `APPRAISAL_INITIALIZED` environment variable when it runs your process. We put a check here to ensure that `appraisal rake` command should run your real default task, which usually is your `test` task.)
263
233
 
264
- Note that this may conflict with your CI setup if you decide to split the test
265
- into multiple processes by Appraisal2 and you are using `rake` to run tests by
266
- default.
234
+ Note that this may conflict with your CI setup if you decide to split the test into multiple processes by Appraisal2 and you are using `rake` to run tests by default.
267
235
 
268
236
  ### Commands
269
237
 
@@ -279,10 +247,7 @@ appraisal update [LIST_OF_GEMS] # Update dependencies for each generated apprai
279
247
  appraisal version # Display the version and exit
280
248
  ```
281
249
 
282
- Since Appraisal2 3.1.0, `install` and `update` do not rewrite existing appraisal
283
- gemfiles. They operate on the generated files already present under `gemfiles/`.
284
- This matters in CI and plugin workflows where generated gemfiles may be
285
- normalized by hooks or committed as stable inputs.
250
+ Since Appraisal2 3.1.0, `install` and `update` do not rewrite existing appraisal gemfiles. They operate on the generated files already present under `gemfiles/`. This matters in CI and plugin workflows where generated gemfiles may be normalized by hooks or committed as stable inputs.
286
251
 
287
252
  Use the command that matches the lifecycle you want:
288
253
 
@@ -294,17 +259,13 @@ Use the command that matches the lifecycle you want:
294
259
  | `generate-install` | Yes | Yes, via install | First setup, or after intentional Appraisals changes |
295
260
  | `generate-update` | Yes | Yes, via update | Regenerate gemfiles, then update dependency locks |
296
261
 
297
- The deprecated rake task `rake appraisal:install` now delegates to
298
- `appraisal generate-install`, preserving its historical generate-and-install
299
- behavior while the CLI commands remain explicit.
262
+ The deprecated rake task `rake appraisal:install` now delegates to `appraisal generate-install`, preserving its historical generate-and-install behavior while the CLI commands remain explicit.
300
263
 
301
264
  ### Command Options
302
265
 
303
266
  Built-in dependency commands support the following options:
304
267
 
305
- **Important:** These options apply **only** to Appraisal's built-in dependency
306
- commands. They do **not** apply when running external commands like
307
- `bundle install` or `bundle update`.
268
+ **Important:** These options apply **only** to Appraisal's built-in dependency commands. They do **not** apply when running external commands like `bundle install` or `bundle update`.
308
269
 
309
270
  | Option | Description |
310
271
  |--------|-------------|
@@ -319,8 +280,7 @@ commands. They do **not** apply when running external commands like
319
280
 
320
281
  #### Using Appraisal's built-in commands with named appraisals
321
282
 
322
- When using Appraisal's built-in commands with a specific appraisal name, place
323
- the appraisal name first, then the command, then any options:
283
+ When using Appraisal's built-in commands with a specific appraisal name, place the appraisal name first, then the command, then any options:
324
284
 
325
285
  ```bash
326
286
  # ✅ Correct order: appraisal <NAME> <COMMAND> [OPTIONS]
@@ -361,8 +321,7 @@ bundle exec appraisal rails-7 generate-update rails rack
361
321
 
362
322
  #### Running external commands with named appraisals
363
323
 
364
- For running external commands (like `rake test`, `rspec`, etc.) with a specific appraisal,
365
- the structure is the same: appraisal name first, then the command:
324
+ For running external commands (like `rake test`, `rspec`, etc.) with a specific appraisal, the structure is the same: appraisal name first, then the command:
366
325
 
367
326
  ```bash
368
327
  # Run any external command with a specific appraisal's dependencies
@@ -425,7 +384,7 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
425
384
  No sponsors yet. Be the first!
426
385
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
427
386
 
428
- [kettle-readme-backers]: https://github.com/appraisal-rb/appraisal2/blob/main/exe/kettle-readme-backers
387
+ [kettle-readme-backers]: https://github.com/appraisal-rb/appraisal2/blob/main/bin/kettle-readme-backers
429
388
 
430
389
  ### Another way to support open-source
431
390
 
@@ -437,7 +396,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
437
396
 
438
397
  **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
439
398
 
440
- [![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]
399
+ [![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 to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
441
400
 
442
401
  ## 🔐 Security
443
402
 
@@ -483,7 +442,7 @@ Made with [contributors-img][🖐contrib-rocks].
483
442
 
484
443
  Also see GitLab Contributors: [https://gitlab.com/appraisal-rb/appraisal2/-/graphs/main][🚎contributors-gl]
485
444
 
486
- <details>
445
+ <details markdown="1">
487
446
  <summary>⭐️ Star History</summary>
488
447
 
489
448
  <a href="https://star-history.com/appraisal-rb/appraisal2&Date">
@@ -574,6 +533,7 @@ See [LICENSE.md][📄license] for the official copyright notice.
574
533
  - Copyright (c) 2024 Joe Sharp
575
534
  - Copyright (c) 2024 Sebastian Cohnen
576
535
  - Copyright (c) 2024 Yevhenii Ponomarenko
536
+ - Copyright (c) 2026 Richard Kramer
577
537
 
578
538
  </details>
579
539
 
@@ -617,12 +577,8 @@ Thanks for RTFM. ☺️
617
577
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
618
578
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
619
579
  [🖇sponsor]: https://github.com/sponsors/pboling
620
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
621
- [🖇polar]: https://polar.sh/pboling
622
580
  [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
623
581
  [🖇kofi]: https://ko-fi.com/pboling
624
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
625
- [🖇patreon]: https://patreon.com/galtzo
626
582
  [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
627
583
  [🖇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
628
584
  [🖇buyme]: https://www.buymeacoffee.com/pboling
@@ -712,11 +668,13 @@ Thanks for RTFM. ☺️
712
668
  [🚎jruby-9.2-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9.2.yml
713
669
  [🚎jruby-9.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9.3.yml
714
670
  [🚎jruby-9.4-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-9.4.yml
671
+ [🚎jruby-10.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/jruby-10.0.yml
715
672
  [🚎truby-22.3-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-22.3.yml
716
673
  [🚎truby-23.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-23.0.yml
717
674
  [🚎truby-23.1-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-23.1.yml
718
675
  [🚎truby-24.2-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-24.2.yml
719
676
  [🚎truby-25.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-25.0.yml
677
+ [🚎truby-33.0-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/truffleruby-33.0.yml
720
678
  [🚎2-cov-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/coverage.yml
721
679
  [🚎2-cov-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/coverage.yml/badge.svg
722
680
  [🚎3-hd-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/heads.yml
@@ -737,6 +695,7 @@ Thanks for RTFM. ☺️
737
695
  [🚎14-🔓️-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/unlocked_deps.yml/badge.svg
738
696
  [🚎15-🪪-wf]: https://github.com/appraisal-rb/appraisal2/actions/workflows/license-eye.yml
739
697
  [🚎15-🪪-wfi]: https://github.com/appraisal-rb/appraisal2/actions/workflows/license-eye.yml/badge.svg
698
+ [💎ruby-1.8i]: https://img.shields.io/badge/Ruby-1.8_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
740
699
  [💎ruby-1.9i]: https://img.shields.io/badge/Ruby-1.9_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
741
700
  [💎ruby-2.0i]: https://img.shields.io/badge/Ruby-2.0_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
742
701
  [💎ruby-2.1i]: https://img.shields.io/badge/Ruby-2.1_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
@@ -751,7 +710,6 @@ Thanks for RTFM. ☺️
751
710
  [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
752
711
  [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
753
712
  [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
754
- [💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
755
713
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
756
714
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
757
715
  [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
@@ -759,10 +717,13 @@ Thanks for RTFM. ☺️
759
717
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
760
718
  [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
761
719
  [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
720
+ [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
762
721
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
722
+ [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
763
723
  [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
764
724
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
765
725
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
726
+ [💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
766
727
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
767
728
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
768
729
  [🤝gh-issues]: https://github.com/appraisal-rb/appraisal2/issues
@@ -791,7 +752,7 @@ Thanks for RTFM. ☺️
791
752
  [📌gitmoji]: https://gitmoji.dev
792
753
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
793
754
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
794
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.911-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
755
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.909-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
795
756
  [🔐security]: https://github.com/appraisal-rb/appraisal2/blob/main/SECURITY.md
796
757
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
797
758
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -799,7 +760,7 @@ Thanks for RTFM. ☺️
799
760
  [📄license-ref]: MIT.md
800
761
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
801
762
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
802
- [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
763
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
803
764
 
804
765
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
805
766
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
@@ -819,7 +780,7 @@ Thanks for RTFM. ☺️
819
780
  | Package | appraisal2 |
820
781
  | Description | 🔍️ Appraisal2 integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals." |
821
782
  | Homepage | https://github.com/appraisal-rb/appraisal2 |
822
- | Source | https://github.com/appraisal-rb/appraisal2/tree/v3.1.0 |
783
+ | Source | https://github.com/appraisal-rb/appraisal2 |
823
784
  | License | `MIT` |
824
- | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/appraisal-rb, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/appraisal2, https://www.buymeacoffee.com/pboling |
785
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/appraisal-rb, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/appraisal2, https://www.buymeacoffee.com/pboling |
825
786
  <!-- kettle-jem:metadata:end -->
@@ -76,13 +76,13 @@ module Appraisal
76
76
 
77
77
  alias_method :platform, :platforms
78
78
 
79
- def source(source, &block)
79
+ def source(source, options = {}, &block)
80
80
  if block_given?
81
81
  @source_blocks[source] ||=
82
82
  Source.new(source).tap { |g| g.git_sources = @git_sources.dup }
83
83
  @source_blocks[source].run(&block)
84
84
  else
85
- @sources << source
85
+ @sources << [source, options]
86
86
  end
87
87
  end
88
88
 
@@ -131,7 +131,9 @@ module Appraisal
131
131
  alias_method :eval_gemfile_entry_for_dup, :eval_gemfile_entry
132
132
 
133
133
  def source_entry
134
- @sources.uniq.map { |source| "source #{source.inspect}" }.join("\n")
134
+ @sources.uniq.map do |(src, opts)|
135
+ opts.empty? ? "source #{src.inspect}" : "source #{src.inspect}, #{Utils.format_string(opts)}"
136
+ end.join("\n")
135
137
  end
136
138
 
137
139
  alias_method :source_entry_for_dup, :source_entry
@@ -148,7 +150,7 @@ module Appraisal
148
150
  alias_method :ruby_version_entry_for_dup, :ruby_version_entry
149
151
 
150
152
  def gemspec_entry
151
- @gemspecs.map(&:to_s).join("\n")
153
+ @gemspecs.join("\n")
152
154
  end
153
155
 
154
156
  def gemspec_entry_for_dup
@@ -27,7 +27,7 @@ module Appraisal
27
27
  end
28
28
 
29
29
  def to_s
30
- @dependencies.values.map(&:to_s).join("\n")
30
+ @dependencies.values.join("\n")
31
31
  end
32
32
 
33
33
  # :nodoc:
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "shellwords"
4
+
3
5
  require_relative "base"
4
6
 
5
7
  module Appraisal
@@ -26,13 +28,12 @@ module Appraisal
26
28
  end
27
29
 
28
30
  command = commands.join(" || ")
31
+ command = path_config_command(options["path"], command) if options["path"]
32
+ env = install_environment(options)
33
+ command_options = {:gemfile => gemfile_path}
34
+ command_options[:env] = env unless env.empty?
29
35
 
30
- if Bundler.settings[:path]
31
- env = {"BUNDLE_DISABLE_SHARED_GEMS" => "1"}
32
- Command.new(command, :gemfile => gemfile_path, :env => env).run
33
- else
34
- Command.new(command, :gemfile => gemfile_path).run
35
- end
36
+ Command.new(command, command_options).run
36
37
  end
37
38
 
38
39
  def update(gems = [])
@@ -69,11 +70,7 @@ module Appraisal
69
70
  end
70
71
  end
71
72
 
72
- path = full_options.delete("path")
73
- if path
74
- relative_path = project_root.join(options["path"])
75
- options_strings << "--path #{relative_path}"
76
- end
73
+ full_options.delete("path")
77
74
 
78
75
  full_options.each do |flag, val|
79
76
  options_strings << "--#{flag} #{val}"
@@ -81,6 +78,21 @@ module Appraisal
81
78
 
82
79
  options_strings.join(" ") if options_strings != []
83
80
  end
81
+
82
+ def path_config_command(path, command)
83
+ relative_path = project_root.join(path)
84
+ "bundle config set --local path #{Shellwords.escape(relative_path.to_s)} && (#{command})"
85
+ end
86
+
87
+ def install_environment(options)
88
+ env = {}
89
+
90
+ if options["path"].nil? && Bundler.settings[:path]
91
+ env["BUNDLE_DISABLE_SHARED_GEMS"] = "1"
92
+ end
93
+
94
+ env
95
+ end
84
96
  end
85
97
  end
86
98
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Appraisal
4
4
  module Version
5
- VERSION = "3.1.1"
5
+ VERSION = "3.1.2"
6
6
  end
7
7
  VERSION = Version::VERSION # Traditional constant location
8
8
  end
data/lib/appraisal.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # :nocov:
3
+ # simplecov:disable
4
4
  require "appraisal2"
5
- # :nocov:
5
+ # simplecov:enable
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Appraisal2
4
4
  module Version
5
- VERSION = "3.1.1"
5
+ VERSION = "3.1.3"
6
6
  end
7
7
  VERSION = Version::VERSION # Traditional Constant Location
8
8
  end
data/lib/appraisal2.rb CHANGED
@@ -1,13 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "version_gem"
4
3
  require_relative "appraisal2/version"
5
4
 
6
5
  require "appraisal/version"
7
6
  require "appraisal/task"
8
7
 
9
8
  Appraisal::Task.new
10
-
11
- Appraisal2::Version.class_eval do
12
- extend VersionGem::Basic
13
- end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,12 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appraisal2
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.1
4
+ version: 3.1.3
5
5
  platform: ruby
6
6
  authors:
7
- - Peter Boling
8
7
  - Joe Ferris
8
+ - Dan Croak
9
+ - Gabe Berke-Williams
10
+ - Joseph Anthony Pasquale Holsten
11
+ - Nick Quaranto
9
12
  - Prem Sichanugrist
13
+ - Gregory Ostermayr
14
+ - osheroff
15
+ - Jason Waldrip
16
+ - Marc Ignacio
17
+ - Phill Baker
18
+ - sanemat
19
+ - Juan González
20
+ - akihiro17
21
+ - Elliot Winkler
22
+ - M.Shibuya
23
+ - Vlad Bokov
24
+ - Geoff Massanek
25
+ - Ian Fosbery
26
+ - Teo Ljungberg
27
+ - Brad Gessler
28
+ - Oli Peate
29
+ - Peter H. Boling
30
+ - Antonis Berkakis
31
+ - Jared Beck
32
+ - Nick Charlton
33
+ - Brian Hawley
34
+ - David Rodríguez
35
+ - James Ebentier
36
+ - Nicolas Rodriguez
37
+ - André Arko
38
+ - Joe Sharp
39
+ - aymeric-ledorze
40
+ - Kyle Fazzari
41
+ - Sebastian Cohnen
42
+ - Yevhenii Ponomarenko
43
+ - Richard Kramer
10
44
  bindir: exe
11
45
  cert_chain:
12
46
  - |
@@ -81,46 +115,26 @@ dependencies:
81
115
  - - ">="
82
116
  - !ruby/object:Gem::Version
83
117
  version: '0.14'
84
- - !ruby/object:Gem::Dependency
85
- name: version_gem
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: '1.1'
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- version: 1.1.10
94
- type: :runtime
95
- prerelease: false
96
- version_requirements: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - "~>"
99
- - !ruby/object:Gem::Version
100
- version: '1.1'
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: 1.1.10
104
118
  - !ruby/object:Gem::Dependency
105
119
  name: kettle-dev
106
120
  requirement: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '2.0'
124
+ version: '2.2'
111
125
  - - ">="
112
126
  - !ruby/object:Gem::Version
113
- version: 2.0.8
127
+ version: 2.2.15
114
128
  type: :development
115
129
  prerelease: false
116
130
  version_requirements: !ruby/object:Gem::Requirement
117
131
  requirements:
118
132
  - - "~>"
119
133
  - !ruby/object:Gem::Version
120
- version: '2.0'
134
+ version: '2.2'
121
135
  - - ">="
122
136
  - !ruby/object:Gem::Version
123
- version: 2.0.8
137
+ version: 2.2.15
124
138
  - !ruby/object:Gem::Dependency
125
139
  name: bundler-audit
126
140
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +178,7 @@ dependencies:
164
178
  version: '2.0'
165
179
  - - ">="
166
180
  - !ruby/object:Gem::Version
167
- version: 2.0.3
181
+ version: 2.0.6
168
182
  type: :development
169
183
  prerelease: false
170
184
  version_requirements: !ruby/object:Gem::Requirement
@@ -174,7 +188,7 @@ dependencies:
174
188
  version: '2.0'
175
189
  - - ">="
176
190
  - !ruby/object:Gem::Version
177
- version: 2.0.3
191
+ version: 2.0.6
178
192
  - !ruby/object:Gem::Dependency
179
193
  name: turbo_tests2
180
194
  requirement: !ruby/object:Gem::Requirement
@@ -184,7 +198,7 @@ dependencies:
184
198
  version: '3.1'
185
199
  - - ">="
186
200
  - !ruby/object:Gem::Version
187
- version: 3.1.1
201
+ version: 3.1.4
188
202
  type: :development
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
@@ -194,7 +208,7 @@ dependencies:
194
208
  version: '3.1'
195
209
  - - ">="
196
210
  - !ruby/object:Gem::Version
197
- version: 3.1.1
211
+ version: 3.1.4
198
212
  - !ruby/object:Gem::Dependency
199
213
  name: ruby-progressbar
200
214
  requirement: !ruby/object:Gem::Requirement
@@ -238,7 +252,7 @@ dependencies:
238
252
  version: '2.0'
239
253
  - - ">="
240
254
  - !ruby/object:Gem::Version
241
- version: 2.0.1
255
+ version: 2.0.3
242
256
  type: :development
243
257
  prerelease: false
244
258
  version_requirements: !ruby/object:Gem::Requirement
@@ -248,7 +262,7 @@ dependencies:
248
262
  version: '2.0'
249
263
  - - ">="
250
264
  - !ruby/object:Gem::Version
251
- version: 2.0.1
265
+ version: 2.0.3
252
266
  - !ruby/object:Gem::Dependency
253
267
  name: activesupport
254
268
  requirement: !ruby/object:Gem::Requirement
@@ -375,7 +389,7 @@ description: "\U0001F50D️ Appraisal2 integrates with bundler and rake to test
375
389
  library against different versions of dependencies in repeatable scenarios called
376
390
  \"appraisals.\""
377
391
  email:
378
- - galtzo@floss.com
392
+ - floss@galtzo.com
379
393
  executables:
380
394
  - appraisal
381
395
  extensions: []
@@ -437,10 +451,10 @@ licenses:
437
451
  - MIT
438
452
  metadata:
439
453
  homepage_uri: https://appraisal2.galtzo.com
440
- source_code_uri: https://github.com/appraisal-rb/appraisal2/tree/v3.1.1
441
- changelog_uri: https://github.com/appraisal-rb/appraisal2/blob/v3.1.1/CHANGELOG.md
454
+ source_code_uri: https://github.com/appraisal-rb/appraisal2/tree/v3.1.3
455
+ changelog_uri: https://github.com/appraisal-rb/appraisal2/blob/v3.1.3/CHANGELOG.md
442
456
  bug_tracker_uri: https://github.com/appraisal-rb/appraisal2/issues
443
- documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.1.1
457
+ documentation_uri: https://www.rubydoc.info/gems/appraisal2/3.1.3
444
458
  funding_uri: https://github.com/sponsors/pboling
445
459
  wiki_uri: https://github.com/appraisal-rb/appraisal2/wiki
446
460
  news_uri: https://www.railsbling.com/tags/appraisal2
metadata.gz.sig CHANGED
Binary file