kettle-dev 1.1.7 โ†’ 1.1.9

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.aiignore.example +19 -0
  4. data/.github/workflows/dep-heads.yml +105 -0
  5. data/.gitlab-ci.yml.example +66 -4
  6. data/.junie/guidelines.md +1 -1
  7. data/.rubocop.yml +3 -9
  8. data/Appraisals +21 -41
  9. data/Appraisals.example +20 -22
  10. data/CHANGELOG.md +39 -2
  11. data/Gemfile +5 -9
  12. data/Gemfile.example +5 -9
  13. data/README.md +4 -2
  14. data/README.md.example +4 -2
  15. data/Rakefile.example +1 -1
  16. data/gemfiles/modular/debug.gemfile +13 -0
  17. data/gemfiles/modular/erb/r2/v3.0.gemfile +1 -0
  18. data/gemfiles/modular/erb/r2.3/default.gemfile +6 -0
  19. data/gemfiles/modular/erb/r2.6/v2.2.gemfile +3 -0
  20. data/gemfiles/modular/erb/r3/v5.0.gemfile +1 -0
  21. data/gemfiles/modular/erb/r3.1/v4.0.gemfile +2 -0
  22. data/gemfiles/modular/erb/vHEAD.gemfile +2 -0
  23. data/gemfiles/modular/mutex_m/r2/v0.3.gemfile +2 -0
  24. data/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile +3 -0
  25. data/gemfiles/modular/mutex_m/r3/v0.3.gemfile +2 -0
  26. data/gemfiles/modular/mutex_m/vHEAD.gemfile +2 -0
  27. data/gemfiles/modular/runtime_heads.gemfile +10 -0
  28. data/gemfiles/modular/runtime_heads.gemfile.example +8 -0
  29. data/gemfiles/modular/stringio/r2/v3.0.gemfile +5 -0
  30. data/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile +4 -0
  31. data/gemfiles/modular/stringio/r3/v3.0.gemfile +5 -0
  32. data/gemfiles/modular/stringio/vHEAD.gemfile +2 -0
  33. data/gemfiles/modular/x_std_libs/r2/libs.gemfile +3 -0
  34. data/gemfiles/modular/x_std_libs/r2.3/libs.gemfile +3 -0
  35. data/gemfiles/modular/x_std_libs/r2.4/libs.gemfile +3 -0
  36. data/gemfiles/modular/x_std_libs/r2.6/libs.gemfile +3 -0
  37. data/gemfiles/modular/x_std_libs/r3/libs.gemfile +3 -0
  38. data/gemfiles/modular/x_std_libs/r3.1/libs.gemfile +3 -0
  39. data/gemfiles/modular/x_std_libs/vHEAD.gemfile +3 -0
  40. data/gemfiles/modular/x_std_libs.gemfile +2 -0
  41. data/lib/kettle/dev/rakelib/spec_test.rake +35 -16
  42. data/lib/kettle/dev/tasks/template_task.rb +100 -59
  43. data/lib/kettle/dev/version.rb +1 -1
  44. data/lib/kettle/dev.rb +4 -0
  45. data.tar.gz.sig +0 -0
  46. metadata +31 -4
  47. metadata.gz.sig +0 -0
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  # ๐Ÿฒ Kettle::Dev
11
11
 
12
- [![Version][๐Ÿ‘ฝversioni]][๐Ÿ‘ฝversion] [![GitHub tag (latest SemVer)][โ›ณ๏ธtag-img]][โ›ณ๏ธtag] [![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 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 Supported][๐ŸšŽ6-s-wfi]][๐ŸšŽ6-s-wf] [![CI Legacy][๐ŸšŽ4-lg-wfi]][๐ŸšŽ4-lg-wf] [![CI Unsupported][๐ŸšŽ7-us-wfi]][๐ŸšŽ7-us-wf] [![CI Ancient][๐ŸšŽ1-an-wfi]][๐ŸšŽ1-an-wf] [![CI Test Coverage][๐ŸšŽ2-cov-wfi]][๐ŸšŽ2-cov-wf] [![CI Style][๐ŸšŽ5-st-wfi]][๐ŸšŽ5-st-wf] [![CodeQL][๐Ÿ–codeQL-img]][๐Ÿ–codeQL]
12
+ [![Version][๐Ÿ‘ฝversioni]][๐Ÿ‘ฝversion] [![GitHub tag (latest SemVer)][โ›ณ๏ธtag-img]][โ›ณ๏ธtag] [![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 Supported][๐ŸšŽ6-s-wfi]][๐ŸšŽ6-s-wf] [![CI Legacy][๐ŸšŽ4-lg-wfi]][๐ŸšŽ4-lg-wf] [![CI Unsupported][๐ŸšŽ7-us-wfi]][๐ŸšŽ7-us-wf] [![CI Ancient][๐ŸšŽ1-an-wfi]][๐ŸšŽ1-an-wf] [![CI Test Coverage][๐ŸšŽ2-cov-wfi]][๐ŸšŽ2-cov-wf] [![CI Style][๐ŸšŽ5-st-wfi]][๐ŸšŽ5-st-wf] [![CodeQL][๐Ÿ–codeQL-img]][๐Ÿ–codeQL]
13
13
 
14
14
  If โ˜๏ธ `ci_badges.map(&:color).detect { it != "green"}` [let me know][๐Ÿ–ผ๏ธgaltzo-discord], as I may have missed the [discord notification][๐Ÿ–ผ๏ธgaltzo-discord].
15
15
 
@@ -853,6 +853,8 @@ Thanks for RTFM. โ˜บ๏ธ
853
853
  [๐ŸšŽ10-j-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/jruby.yml/badge.svg
854
854
  [๐ŸšŽ11-c-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml
855
855
  [๐ŸšŽ11-c-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml/badge.svg
856
+ [๐ŸšŽ12-crh-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/dep-heads.yml
857
+ [๐ŸšŽ12-crh-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/dep-heads.yml/badge.svg
856
858
  [๐ŸšŽ13-๐Ÿ”’๏ธ-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/locked_deps.yml
857
859
  [๐ŸšŽ13-๐Ÿ”’๏ธ-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/locked_deps.yml/badge.svg
858
860
  [๐ŸšŽ14-๐Ÿ”“๏ธ-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/unlocked_deps.yml
@@ -905,7 +907,7 @@ Thanks for RTFM. โ˜บ๏ธ
905
907
  [๐Ÿ“Œgitmoji]:https://gitmoji.dev
906
908
  [๐Ÿ“Œgitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
907
909
  [๐Ÿงฎkloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
908
- [๐Ÿงฎkloc-img]: https://img.shields.io/badge/KLOC-3.333-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
910
+ [๐Ÿงฎkloc-img]: https://img.shields.io/badge/KLOC-3.352-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
909
911
  [๐Ÿ”security]: SECURITY.md
910
912
  [๐Ÿ”security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
911
913
  [๐Ÿ“„copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/README.md.example CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  # ๐Ÿฒ Kettle::Dev
11
11
 
12
- [![Version][๐Ÿ‘ฝversioni]][๐Ÿ‘ฝversion] [![GitHub tag (latest SemVer)][โ›ณ๏ธtag-img]][โ›ณ๏ธtag] [![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 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 Supported][๐ŸšŽ6-s-wfi]][๐ŸšŽ6-s-wf] [![CI Legacy][๐ŸšŽ4-lg-wfi]][๐ŸšŽ4-lg-wf] [![CI Unsupported][๐ŸšŽ7-us-wfi]][๐ŸšŽ7-us-wf] [![CI Ancient][๐ŸšŽ1-an-wfi]][๐ŸšŽ1-an-wf] [![CI Test Coverage][๐ŸšŽ2-cov-wfi]][๐ŸšŽ2-cov-wf] [![CI Style][๐ŸšŽ5-st-wfi]][๐ŸšŽ5-st-wf] [![CodeQL][๐Ÿ–codeQL-img]][๐Ÿ–codeQL]
12
+ [![Version][๐Ÿ‘ฝversioni]][๐Ÿ‘ฝversion] [![GitHub tag (latest SemVer)][โ›ณ๏ธtag-img]][โ›ณ๏ธtag] [![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 Supported][๐ŸšŽ6-s-wfi]][๐ŸšŽ6-s-wf] [![CI Legacy][๐ŸšŽ4-lg-wfi]][๐ŸšŽ4-lg-wf] [![CI Unsupported][๐ŸšŽ7-us-wfi]][๐ŸšŽ7-us-wf] [![CI Ancient][๐ŸšŽ1-an-wfi]][๐ŸšŽ1-an-wf] [![CI Test Coverage][๐ŸšŽ2-cov-wfi]][๐ŸšŽ2-cov-wf] [![CI Style][๐ŸšŽ5-st-wfi]][๐ŸšŽ5-st-wf] [![CodeQL][๐Ÿ–codeQL-img]][๐Ÿ–codeQL]
13
13
 
14
14
  If โ˜๏ธ `ci_badges.map(&:color).detect { it != "green"}` [let me know][๐Ÿ–ผ๏ธgaltzo-discord], as I may have missed the [discord notification][๐Ÿ–ผ๏ธgaltzo-discord].
15
15
 
@@ -448,6 +448,8 @@ Thanks for RTFM. โ˜บ๏ธ
448
448
  [๐ŸšŽ10-j-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/jruby.yml/badge.svg
449
449
  [๐ŸšŽ11-c-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml
450
450
  [๐ŸšŽ11-c-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml/badge.svg
451
+ [๐ŸšŽ12-crh-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/dep-heads.yml
452
+ [๐ŸšŽ12-crh-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/dep-heads.yml/badge.svg
451
453
  [๐ŸšŽ13-๐Ÿ”’๏ธ-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/locked_deps.yml
452
454
  [๐ŸšŽ13-๐Ÿ”’๏ธ-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/locked_deps.yml/badge.svg
453
455
  [๐ŸšŽ14-๐Ÿ”“๏ธ-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/unlocked_deps.yml
@@ -505,7 +507,7 @@ Thanks for RTFM. โ˜บ๏ธ
505
507
  [๐Ÿ“Œgitmoji]:https://gitmoji.dev
506
508
  [๐Ÿ“Œgitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
507
509
  [๐Ÿงฎkloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
508
- [๐Ÿงฎkloc-img]: https://img.shields.io/badge/KLOC-3.333-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
510
+ [๐Ÿงฎkloc-img]: https://img.shields.io/badge/KLOC-3.352-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
509
511
  [๐Ÿ”security]: SECURITY.md
510
512
  [๐Ÿ”security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
511
513
  [๐Ÿ“„copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/Rakefile.example CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # kettle-dev Rakefile v1.1.7 - 2025-09-06
3
+ # kettle-dev Rakefile v1.1.9 - 2025-09-07
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
@@ -0,0 +1,13 @@
1
+ # Ex-Standard Library gems
2
+ gem "irb", "~> 1.15", ">= 1.15.2" # removed from stdlib in 3.5
3
+
4
+ platform :mri do
5
+ # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
6
+ # Use binding.break, binding.b, or debugger in code
7
+ gem "debug", ">= 1.1" # ruby >= 2.7
8
+
9
+ # Dev Console - Binding.pry - Irb replacement
10
+ # gem "pry", "~> 0.14" # ruby >= 2.0
11
+ end
12
+
13
+ gem "gem_bench", "~> 2.0", ">= 2.0.5"
@@ -0,0 +1 @@
1
+ gem "erb", "~> 3.0" # ruby >= 2.7.0
@@ -0,0 +1,6 @@
1
+ # The cake is a lie.
2
+ # erb v2.2, the oldest release on RubyGems.org, was never compatible with Ruby 2.3.
3
+ # In addition, erb does not follow SemVer, and old rubies get dropped in a patch.
4
+ # This means we have no choice but to use the erb that shipped with Ruby 2.3
5
+ # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError)
6
+ # gem "erb", ">= 2.2" # ruby >= 2.3.0
@@ -0,0 +1,3 @@
1
+ # Ruby >= 2.3.0 (claimed, but not true, minimum support is Ruby 2.4)
2
+ # Last version supporting Ruby <= 2.6
3
+ gem "erb", "~> 2.2.2"
@@ -0,0 +1 @@
1
+ gem "erb", "~> 5.0" # ruby >= 3.2.0
@@ -0,0 +1,2 @@
1
+ # last version compatible with Ruby 3.1
2
+ gem "erb", "~> 4.0" # ruby >= 2.7.0
@@ -0,0 +1,2 @@
1
+ # Ruby >= 3.2 (dependency of kettle-dev)
2
+ gem "erb", github: "ruby/erb", branch: "master"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5
2
+ gem "mutex_m", "~> 0.2"
@@ -0,0 +1,3 @@
1
+ # Ruby >= 0
2
+ # Last version supporting Ruby <= 2.4
3
+ gem "mutex_m", "~> 0.1"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5
2
+ gem "mutex_m", "~> 0.2"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5 (dependency of omniauth)
2
+ gem "mutex_m", github: "ruby/mutex_m", branch: "master"
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Test against HEAD of runtime dependencies so we can proactively file bugs
4
+
5
+ # Ruby >= 2.2
6
+ gem "version_gem", github: "ruby-oauth/version_gem", branch: "main"
7
+
8
+ eval_gemfile("x_std_libs/vHEAD.gemfile")
9
+
10
+ eval_gemfile("recording/vHEAD.gemfile")
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Test against HEAD of runtime dependencies so we can proactively file bugs
4
+
5
+ # Ruby >= 2.2
6
+ gem "version_gem", github: "ruby-oauth/version_gem", branch: "main"
7
+
8
+ eval_gemfile("x_std_libs/vHEAD.gemfile")
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,4 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Last version to support Ruby <= 2.5
4
+ gem "stringio", ">= 0.0.2"
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5 (dependency of omniauth)
2
+ gem "stringio", github: "ruby/stringio", branch: "master"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2/v3.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r2/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.3/default.gemfile"
2
+ eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile"
3
+ eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.6/v2.2.gemfile"
2
+ eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile"
3
+ eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.6/v2.2.gemfile"
2
+ eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r2/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r3/v5.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r3/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r3.1/v4.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r3/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../erb/vHEAD.gemfile"
2
+ eval_gemfile "../mutex_m/vHEAD.gemfile"
3
+ eval_gemfile "../stringio/vHEAD.gemfile"
@@ -0,0 +1,2 @@
1
+ ### Std Lib Extracted Gems
2
+ eval_gemfile "x_std_libs/r3/libs.gemfile"
@@ -2,22 +2,8 @@
2
2
 
3
3
  require "fileutils"
4
4
 
5
- # Setup RSpec
6
- begin
7
- require "rspec/core/rake_task"
8
-
9
- RSpec::Core::RakeTask.new(:spec)
10
- # This takes the place of `coverage` task when running as CI=true
11
- Kettle::Dev.register_default("spec") if Kettle::Dev::IS_CI
12
- rescue LoadError
13
- warn("[kettle-dev][spec_test.rake] failed to load rspec/core/rake_task") if Kettle::Dev::DEBUGGING
14
- desc("spec task stub")
15
- task(:spec) do
16
- warn("NOTE: rspec isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
17
- end
18
- end
19
-
20
- # Setup MiniTest
5
+ # rubocop:disable Rake/DuplicateTask
6
+ # Set up MiniTest
21
7
  begin
22
8
  require "rake/testtask"
23
9
 
@@ -26,6 +12,7 @@ begin
26
12
  t.test_files = FileList["test/**/*test*.rb"]
27
13
  t.verbose = true
28
14
  end
15
+ Kettle::Dev.register_default("test")
29
16
  rescue LoadError
30
17
  warn("[kettle-dev][spec_test.rake] failed to load rake/testtask") if Kettle::Dev::DEBUGGING
31
18
  desc("test task stub")
@@ -33,3 +20,35 @@ rescue LoadError
33
20
  warn("NOTE: minitest isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
34
21
  end
35
22
  end
23
+
24
+ # Setup RSpec
25
+ begin
26
+ require "rspec/core/rake_task"
27
+
28
+ RSpec::Core::RakeTask.new(:spec)
29
+ # This takes the place of `coverage` task it hasn't been registered yet.
30
+ Kettle::Dev.register_default("spec") unless Kettle::Dev.default_registered?("coverage")
31
+ rescue LoadError
32
+ warn("[kettle-dev][spec_test.rake] failed to load rspec/core/rake_task") if Kettle::Dev::DEBUGGING
33
+ desc("spec task stub")
34
+ task(:spec) do
35
+ warn("NOTE: rspec isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
36
+ end
37
+ end
38
+
39
+ spec_registered = Kettle::Dev.default_registered?("spec")
40
+ coverage_registered = Kettle::Dev.default_registered?("coverage")
41
+ test_registered = Kettle::Dev.default_registered?("test")
42
+ spec_or_coverage = spec_registered || coverage_registered
43
+
44
+ if spec_or_coverage && !test_registered
45
+ task test: :spec
46
+ elsif test_registered && !spec_or_coverage
47
+ task spec: :test
48
+ elsif test_registered && spec_or_coverage
49
+ # When we have both tasks registered, make spec run as part of the test task
50
+ task test: :spec
51
+ else
52
+ puts "No test task is registered."
53
+ end
54
+ # rubocop:enable Rake/DuplicateTask
@@ -6,6 +6,8 @@ module Kettle
6
6
  # Thin wrapper to expose the kettle:dev:template task logic as a callable API
7
7
  # for testability. The rake task should only call this method.
8
8
  module TemplateTask
9
+ MODULAR_GEMFILE_DIR = "gemfiles/modular"
10
+
9
11
  module_function
10
12
 
11
13
  # Abort wrapper that avoids terminating the entire process during specs
@@ -41,9 +43,21 @@ module Kettle
41
43
  # 2) .github/**/*.yml with FUNDING.yml customizations
42
44
  source_github_dir = File.join(gem_checkout_root, ".github")
43
45
  if Dir.exist?(source_github_dir)
44
- files = Dir.glob(File.join(source_github_dir, "**", "*.yml")) +
46
+ # Build a unique set of logical .yml paths, preferring the .example variant when present
47
+ candidates = Dir.glob(File.join(source_github_dir, "**", "*.yml")) +
45
48
  Dir.glob(File.join(source_github_dir, "**", "*.yml.example"))
46
- files.uniq.each do |orig_src|
49
+ selected = {}
50
+ candidates.each do |path|
51
+ # Key by the path without the optional .example suffix
52
+ key = path.sub(/\.example\z/, "")
53
+ # Prefer example: overwrite a plain selection with .example, but do not downgrade
54
+ if path.end_with?(".example")
55
+ selected[key] = path
56
+ else
57
+ selected[key] ||= path
58
+ end
59
+ end
60
+ selected.values.each do |orig_src|
47
61
  src = helpers.prefer_example(orig_src)
48
62
  # Destination path should never include the .example suffix.
49
63
  rel = orig_src.sub(/^#{Regexp.escape(gem_checkout_root)}\/?/, "").sub(/\.example\z/, "")
@@ -90,65 +104,90 @@ module Kettle
90
104
  allow_replace: true,
91
105
  )
92
106
 
93
- # 4) gemfiles/modular/*.gemfile (from gem's gemfiles/modular)
94
- [%w[coverage.gemfile], %w[documentation.gemfile], %w[style.gemfile], %w[optional.gemfile]].each do |base|
95
- src = helpers.prefer_example(File.join(gem_checkout_root, "gemfiles/modular", base[0]))
96
- dest = File.join(project_root, "gemfiles/modular", base[0])
97
- if File.basename(src).sub(/\.example\z/, "") == "style.gemfile"
98
- helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true) do |content|
99
- # Adjust rubocop-lts constraint based on min_ruby
100
- version_map = [
101
- [Gem::Version.new("1.8"), "~> 0.1"],
102
- [Gem::Version.new("1.9"), "~> 2.0"],
103
- [Gem::Version.new("2.0"), "~> 4.0"],
104
- [Gem::Version.new("2.1"), "~> 6.0"],
105
- [Gem::Version.new("2.2"), "~> 8.0"],
106
- [Gem::Version.new("2.3"), "~> 10.0"],
107
- [Gem::Version.new("2.4"), "~> 12.0"],
108
- [Gem::Version.new("2.5"), "~> 14.0"],
109
- [Gem::Version.new("2.6"), "~> 16.0"],
110
- [Gem::Version.new("2.7"), "~> 18.0"],
111
- [Gem::Version.new("3.0"), "~> 20.0"],
112
- [Gem::Version.new("3.1"), "~> 22.0"],
113
- [Gem::Version.new("3.2"), "~> 24.0"],
114
- [Gem::Version.new("3.3"), "~> 26.0"],
115
- [Gem::Version.new("3.4"), "~> 28.0"],
116
- ]
117
- new_constraint = nil
118
- rubocop_ruby_gem_version = nil
119
- ruby1_8 = version_map.first
120
- begin
121
- if min_ruby
122
- version_map.reverse_each do |min, req|
123
- if min_ruby >= min
124
- new_constraint = req
125
- rubocop_ruby_gem_version = min.segments.join("_")
126
- break
127
- end
107
+ # 4a) gemfiles/modular/*.gemfile
108
+ # from gem's gemfiles/modular,
109
+ # except `style.gemfile` which has special handling below
110
+ modular_gemfiles = %w[
111
+ coverage
112
+ debug
113
+ documentation
114
+ injected
115
+ optional
116
+ runtime_heads
117
+ x_std_libs
118
+ ]
119
+ modular_gemfiles.each do |base|
120
+ modular_gemfile = "#{base}.gemfile"
121
+ src = helpers.prefer_example(File.join(gem_checkout_root, MODULAR_GEMFILE_DIR, modular_gemfile))
122
+ dest = File.join(project_root, MODULAR_GEMFILE_DIR, modular_gemfile)
123
+ helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true)
124
+ end
125
+
126
+ # 4b) gemfiles/modular/style.gemfile
127
+ modular_gemfile = "style.gemfile"
128
+ src = helpers.prefer_example(File.join(gem_checkout_root, MODULAR_GEMFILE_DIR, modular_gemfile))
129
+ dest = File.join(project_root, MODULAR_GEMFILE_DIR, modular_gemfile)
130
+ if File.basename(src).sub(/\.example\z/, "") == "style.gemfile"
131
+ helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true) do |content|
132
+ # Adjust rubocop-lts constraint based on min_ruby
133
+ version_map = [
134
+ [Gem::Version.new("1.8"), "~> 0.1"],
135
+ [Gem::Version.new("1.9"), "~> 2.0"],
136
+ [Gem::Version.new("2.0"), "~> 4.0"],
137
+ [Gem::Version.new("2.1"), "~> 6.0"],
138
+ [Gem::Version.new("2.2"), "~> 8.0"],
139
+ [Gem::Version.new("2.3"), "~> 10.0"],
140
+ [Gem::Version.new("2.4"), "~> 12.0"],
141
+ [Gem::Version.new("2.5"), "~> 14.0"],
142
+ [Gem::Version.new("2.6"), "~> 16.0"],
143
+ [Gem::Version.new("2.7"), "~> 18.0"],
144
+ [Gem::Version.new("3.0"), "~> 20.0"],
145
+ [Gem::Version.new("3.1"), "~> 22.0"],
146
+ [Gem::Version.new("3.2"), "~> 24.0"],
147
+ [Gem::Version.new("3.3"), "~> 26.0"],
148
+ [Gem::Version.new("3.4"), "~> 28.0"],
149
+ ]
150
+ new_constraint = nil
151
+ rubocop_ruby_gem_version = nil
152
+ ruby1_8 = version_map.first
153
+ begin
154
+ if min_ruby
155
+ version_map.reverse_each do |min, req|
156
+ if min_ruby >= min
157
+ new_constraint = req
158
+ rubocop_ruby_gem_version = min.segments.join("_")
159
+ break
128
160
  end
129
161
  end
130
- if !new_constraint || !rubocop_ruby_gem_version
131
- # A gem with no declared minimum ruby is effectively >= 1.8.7
132
- new_constraint = ruby1_8[1]
133
- rubocop_ruby_gem_version = ruby1_8[0].segments.join("_")
134
- end
135
- rescue StandardError => e
136
- Kettle::Dev.debug_error(e, __method__)
137
- # ignore, use default
138
- ensure
139
- new_constraint ||= ruby1_8[1]
140
- rubocop_ruby_gem_version ||= ruby1_8[0].segments.join("_")
141
162
  end
142
- if new_constraint && rubocop_ruby_gem_version
143
- token = "{RUBOCOP|LTS|CONSTRAINT}"
144
- content.gsub!(token, new_constraint) if content.include?(token)
145
- token = "{RUBOCOP|RUBY|GEM}"
146
- content.gsub!(token, "rubocop-ruby#{rubocop_ruby_gem_version}") if content.include?(token)
163
+ if !new_constraint || !rubocop_ruby_gem_version
164
+ # A gem with no declared minimum ruby is effectively >= 1.8.7
165
+ new_constraint = ruby1_8[1]
166
+ rubocop_ruby_gem_version = ruby1_8[0].segments.join("_")
147
167
  end
168
+ rescue StandardError => e
169
+ Kettle::Dev.debug_error(e, __method__)
170
+ # ignore, use default
171
+ ensure
172
+ new_constraint ||= ruby1_8[1]
173
+ rubocop_ruby_gem_version ||= ruby1_8[0].segments.join("_")
174
+ end
175
+ if new_constraint && rubocop_ruby_gem_version
176
+ token = "{RUBOCOP|LTS|CONSTRAINT}"
177
+ content.gsub!(token, new_constraint) if content.include?(token)
178
+ token = "{RUBOCOP|RUBY|GEM}"
179
+ content.gsub!(token, "rubocop-ruby#{rubocop_ruby_gem_version}") if content.include?(token)
148
180
  end
149
- else
150
- helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true)
151
181
  end
182
+ else
183
+ helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true)
184
+ end
185
+
186
+ # 4c) Copy modular directories with nested/versioned files
187
+ %w[erb mutex_m stringio x_std_libs].each do |dir|
188
+ src_dir = File.join(gem_checkout_root, MODULAR_GEMFILE_DIR, dir)
189
+ dest_dir = File.join(project_root, MODULAR_GEMFILE_DIR, dir)
190
+ helpers.copy_dir_with_prompt(src_dir, dest_dir)
152
191
  end
153
192
 
154
193
  # 5) spec/spec_helper.rb (no create)
@@ -347,16 +386,20 @@ module Kettle
347
386
  end
348
387
 
349
388
  files_to_copy = %w[
389
+ .aiignore
350
390
  .envrc
351
391
  .gitignore
352
392
  .gitlab-ci.yml
393
+ .junie/guidelines-rbs.md
394
+ .junie/guidelines.md
395
+ .opencollective.yml
353
396
  .rspec
354
397
  .rubocop.yml
398
+ .rubocop_rspec.yml
355
399
  .simplecov
356
400
  .tool-versions
357
401
  .yard_gfm_support.rb
358
402
  .yardopts
359
- .opencollective.yml
360
403
  Appraisal.root.gemfile
361
404
  Appraisals
362
405
  CHANGELOG.md
@@ -365,12 +408,10 @@ module Kettle
365
408
  CONTRIBUTING.md
366
409
  FUNDING.md
367
410
  Gemfile
368
- Rakefile
369
411
  README.md
370
412
  RUBOCOP.md
413
+ Rakefile
371
414
  SECURITY.md
372
- .junie/guidelines.md
373
- .junie/guidelines-rbs.md
374
415
  ]
375
416
 
376
417
  # Snapshot existing README content once (for H1 prefix preservation after write)
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.1.7"
9
+ VERSION = "1.1.9"
10
10
 
11
11
  module_function
12
12
 
data/lib/kettle/dev.rb CHANGED
@@ -109,6 +109,10 @@ module Kettle
109
109
  defaults
110
110
  end
111
111
 
112
+ def default_registered?(task_name)
113
+ defaults.include?(task_name.to_s)
114
+ end
115
+
112
116
  private
113
117
 
114
118
  ### LINTING TASKS
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.7
4
+ version: 1.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -215,6 +215,7 @@ extra_rdoc_files:
215
215
  - RUBOCOP.md
216
216
  - SECURITY.md
217
217
  files:
218
+ - ".aiignore.example"
218
219
  - ".devcontainer/devcontainer.json"
219
220
  - ".env.local.example"
220
221
  - ".envrc"
@@ -232,6 +233,7 @@ files:
232
233
  - ".github/workflows/coverage.yml"
233
234
  - ".github/workflows/coverage.yml.example"
234
235
  - ".github/workflows/current.yml"
236
+ - ".github/workflows/dep-heads.yml"
235
237
  - ".github/workflows/dependency-review.yml"
236
238
  - ".github/workflows/discord-notifier.yml"
237
239
  - ".github/workflows/heads.yml"
@@ -287,12 +289,37 @@ files:
287
289
  - exe/kettle-readme-backers
288
290
  - exe/kettle-release
289
291
  - gemfiles/modular/coverage.gemfile
292
+ - gemfiles/modular/debug.gemfile
290
293
  - gemfiles/modular/documentation.gemfile
294
+ - gemfiles/modular/erb/r2.3/default.gemfile
295
+ - gemfiles/modular/erb/r2.6/v2.2.gemfile
296
+ - gemfiles/modular/erb/r2/v3.0.gemfile
297
+ - gemfiles/modular/erb/r3.1/v4.0.gemfile
298
+ - gemfiles/modular/erb/r3/v5.0.gemfile
299
+ - gemfiles/modular/erb/vHEAD.gemfile
291
300
  - gemfiles/modular/injected.gemfile
301
+ - gemfiles/modular/mutex_m/r2.4/v0.1.gemfile
302
+ - gemfiles/modular/mutex_m/r2/v0.3.gemfile
303
+ - gemfiles/modular/mutex_m/r3/v0.3.gemfile
304
+ - gemfiles/modular/mutex_m/vHEAD.gemfile
292
305
  - gemfiles/modular/optional.gemfile
293
306
  - gemfiles/modular/optional.gemfile.example
307
+ - gemfiles/modular/runtime_heads.gemfile
308
+ - gemfiles/modular/runtime_heads.gemfile.example
309
+ - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
310
+ - gemfiles/modular/stringio/r2/v3.0.gemfile
311
+ - gemfiles/modular/stringio/r3/v3.0.gemfile
312
+ - gemfiles/modular/stringio/vHEAD.gemfile
294
313
  - gemfiles/modular/style.gemfile
295
314
  - gemfiles/modular/style.gemfile.example
315
+ - gemfiles/modular/x_std_libs.gemfile
316
+ - gemfiles/modular/x_std_libs/r2.3/libs.gemfile
317
+ - gemfiles/modular/x_std_libs/r2.4/libs.gemfile
318
+ - gemfiles/modular/x_std_libs/r2.6/libs.gemfile
319
+ - gemfiles/modular/x_std_libs/r2/libs.gemfile
320
+ - gemfiles/modular/x_std_libs/r3.1/libs.gemfile
321
+ - gemfiles/modular/x_std_libs/r3/libs.gemfile
322
+ - gemfiles/modular/x_std_libs/vHEAD.gemfile
296
323
  - kettle-dev.gemspec.example
297
324
  - lib/kettle-dev.rb
298
325
  - lib/kettle/dev.rb
@@ -354,10 +381,10 @@ licenses:
354
381
  - MIT
355
382
  metadata:
356
383
  homepage_uri: https://kettle-dev.galtzo.com/
357
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.7
358
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.7/CHANGELOG.md
384
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.9
385
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.9/CHANGELOG.md
359
386
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
360
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.7
387
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.9
361
388
  funding_uri: https://github.com/sponsors/pboling
362
389
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
363
390
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file