kettle-dev 1.1.8 → 1.1.10

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: ff2a4f1326475cd3de4fb3decf7b10780dd0bbb16cd55ea1dc5e78f64bfde631
4
- data.tar.gz: a584158146f8f8a25343523d2cd76cfb5adc4d6e4e5907a215200239170ef620
3
+ metadata.gz: e6cf7cc8f6c3a0d1dfc5f0dbc6da851e122abdad9a284c5835eb7f910214dbe7
4
+ data.tar.gz: 6ff4d986c36a7eb18e5413e29707c7a78fcfdb048852a16ecc403010963d67d3
5
5
  SHA512:
6
- metadata.gz: 973dc68e687f835510748a22d9d26d6a7d719b4c9ca782fe868c4619aca0c2766bb3d0d4279b78ee2ed407f0b084da45eacc17882ecd9ad116f8fad3b5a70eb9
7
- data.tar.gz: 8a6761e6d72cf33b92622a9f0706884cc0b0ec1d2e16fc5419685f28dc2497418248eabffcf7447300aec6939c7164a2312c4fec3061137964bf1bce555544f8
6
+ metadata.gz: 640a7db16fab1bb407eca866f68209f5c354f8ed54fd40b20723ec0a8e3860018b4509891bb9875a2a268a082149c7013bfe0c1426dfe08cdd857c3e057dee8a
7
+ data.tar.gz: a32860690a84df178fbffddc65ffb14eb257f9481d1efd9cbcb177eb53452ce34493d370a9430c3dc2bdb3a295bd1fc55c584f7b174fcc379e102084166811dd
checksums.yaml.gz.sig CHANGED
Binary file
data/Appraisals.example CHANGED
@@ -74,7 +74,7 @@ appraise "ruby-3-1" do
74
74
  end
75
75
 
76
76
  appraise "ruby-3-2" do
77
- eval_gemfile "modular/x_std_libs/3/libs.gemfile"
77
+ eval_gemfile "modular/x_std_libs/r3/libs.gemfile"
78
78
  end
79
79
 
80
80
  appraise "ruby-3-3" do
data/CHANGELOG.md CHANGED
@@ -24,6 +24,34 @@ Please file a bug if you notice a violation of semantic versioning.
24
24
  ### Fixed
25
25
  ### Security
26
26
 
27
+ ## [1.1.10] - 2025-09-08
28
+ - TAG: [v1.1.10][1.1.10t]
29
+ - COVERAGE: 97.14% -- 3256/3352 lines in 23 files
30
+ - BRANCH COVERAGE: 81.91% -- 1345/1642 branches in 23 files
31
+ - 76.65% documented
32
+ ### Added
33
+ - Improve documentation
34
+ - Fix an internal link in README.md
35
+ ### Changed
36
+ - template task no longer overwrites CHANGELOG.md completely
37
+ - attempts to retain existing release notes content
38
+ ### Fixed
39
+ - Fix a typo in the README.md
40
+ ### Fixed
41
+ - fix typo in the path to x_std_libs.gemfile
42
+
43
+ ## [1.1.9] - 2025-09-07
44
+ - TAG: [v1.1.9][1.1.9t]
45
+ - COVERAGE: 97.11% -- 3255/3352 lines in 23 files
46
+ - BRANCH COVERAGE: 81.91% -- 1345/1642 branches in 23 files
47
+ - 76.65% documented
48
+ ### Added
49
+ - badge for current runtime heads in example readme
50
+ ### Fixed
51
+ - Add gemfiles/modular/x_std_libs.gemfile & injected.gemfile to template
52
+ - example version of gemfiles/modular/runtime_heads.gemfile
53
+ - necessary to avoid deps on recording gems in the template
54
+
27
55
  ## [1.1.8] - 2025-09-07
28
56
  - TAG: [v1.1.8][1.1.8t]
29
57
  - COVERAGE: 97.16% -- 3246/3341 lines in 23 files
@@ -543,7 +571,11 @@ Please file a bug if you notice a violation of semantic versioning.
543
571
  - Selecting will run the selected workflow via `act`
544
572
  - This may move to its own gem in the future.
545
573
 
546
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.8...HEAD
574
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.10...HEAD
575
+ [1.1.10]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.9...v1.1.10
576
+ [1.1.10t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.10
577
+ [1.1.9]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.8...v1.1.9
578
+ [1.1.9t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.9
547
579
  [1.1.8]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.7...v1.1.8
548
580
  [1.1.8t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.8
549
581
  [1.1.7]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.6...v1.1.7
data/README.md CHANGED
@@ -11,11 +11,11 @@
11
11
 
12
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
- If ☝️ `ci_badges.map(&:color).detect { it != "green"}` [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
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
 
16
16
  ---
17
17
 
18
- OTOH, 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.
18
+ `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.
19
19
 
20
20
  [![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 or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
21
21
 
@@ -71,8 +71,8 @@ bin/kettle-release
71
71
 
72
72
  Compatible with MRI Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby.
73
73
 
74
- | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 |
75
- |------------------------------------------------|-------------------------------------------------------------------------------------|
74
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
75
+ |------------------------------------------------|--------------------------------------------------------|
76
76
  | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
77
77
 
78
78
  ### Federated DVCS
@@ -723,7 +723,7 @@ To join the community or get help 👇️ Join the Discord.
723
723
 
724
724
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
725
725
 
726
- To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
726
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
727
727
 
728
728
  [![Sponsor kettle-rb/kettle-dev 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-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
729
729
 
@@ -907,7 +907,7 @@ Thanks for RTFM. ☺️
907
907
  [📌gitmoji]:https://gitmoji.dev
908
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
909
909
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
910
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.341-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
911
911
  [🔐security]: SECURITY.md
912
912
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
913
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,13 +9,13 @@
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
- If ☝️ `ci_badges.map(&:color).detect { it != "green"}` [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
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
 
16
16
  ---
17
17
 
18
- OTOH, 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.
18
+ `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.
19
19
 
20
20
  [![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 or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
21
21
 
@@ -43,8 +43,8 @@ OTOH, if `ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I
43
43
 
44
44
  Compatible with MRI Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby.
45
45
 
46
- | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 |
47
- |------------------------------------------------|-------------------------------------------------------------------------------------|
46
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
47
+ |------------------------------------------------|--------------------------------------------------------|
48
48
  | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
49
49
 
50
50
  ### Federated DVCS
@@ -318,7 +318,7 @@ To join the community or get help 👇️ Join the Discord.
318
318
 
319
319
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
320
320
 
321
- To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
321
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
322
322
 
323
323
  [![Sponsor kettle-rb/kettle-dev 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-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
324
324
 
@@ -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.341-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.8 - 2025-09-07
3
+ # kettle-dev Rakefile v1.1.10 - 2025-09-08
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
@@ -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")
@@ -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
@@ -102,78 +104,89 @@ module Kettle
102
104
  allow_replace: true,
103
105
  )
104
106
 
105
- # 4) gemfiles/modular/*.gemfile (from gem's gemfiles/modular)
106
- [%w[coverage.gemfile], %w[documentation.gemfile], %w[style.gemfile], %w[optional.gemfile]].each do |base|
107
- src = helpers.prefer_example(File.join(gem_checkout_root, "gemfiles/modular", base[0]))
108
- dest = File.join(project_root, "gemfiles/modular", base[0])
109
- if File.basename(src).sub(/\.example\z/, "") == "style.gemfile"
110
- helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true) do |content|
111
- # Adjust rubocop-lts constraint based on min_ruby
112
- version_map = [
113
- [Gem::Version.new("1.8"), "~> 0.1"],
114
- [Gem::Version.new("1.9"), "~> 2.0"],
115
- [Gem::Version.new("2.0"), "~> 4.0"],
116
- [Gem::Version.new("2.1"), "~> 6.0"],
117
- [Gem::Version.new("2.2"), "~> 8.0"],
118
- [Gem::Version.new("2.3"), "~> 10.0"],
119
- [Gem::Version.new("2.4"), "~> 12.0"],
120
- [Gem::Version.new("2.5"), "~> 14.0"],
121
- [Gem::Version.new("2.6"), "~> 16.0"],
122
- [Gem::Version.new("2.7"), "~> 18.0"],
123
- [Gem::Version.new("3.0"), "~> 20.0"],
124
- [Gem::Version.new("3.1"), "~> 22.0"],
125
- [Gem::Version.new("3.2"), "~> 24.0"],
126
- [Gem::Version.new("3.3"), "~> 26.0"],
127
- [Gem::Version.new("3.4"), "~> 28.0"],
128
- ]
129
- new_constraint = nil
130
- rubocop_ruby_gem_version = nil
131
- ruby1_8 = version_map.first
132
- begin
133
- if min_ruby
134
- version_map.reverse_each do |min, req|
135
- if min_ruby >= min
136
- new_constraint = req
137
- rubocop_ruby_gem_version = min.segments.join("_")
138
- break
139
- 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
140
160
  end
141
161
  end
142
- if !new_constraint || !rubocop_ruby_gem_version
143
- # A gem with no declared minimum ruby is effectively >= 1.8.7
144
- new_constraint = ruby1_8[1]
145
- rubocop_ruby_gem_version = ruby1_8[0].segments.join("_")
146
- end
147
- rescue StandardError => e
148
- Kettle::Dev.debug_error(e, __method__)
149
- # ignore, use default
150
- ensure
151
- new_constraint ||= ruby1_8[1]
152
- rubocop_ruby_gem_version ||= ruby1_8[0].segments.join("_")
153
162
  end
154
- if new_constraint && rubocop_ruby_gem_version
155
- token = "{RUBOCOP|LTS|CONSTRAINT}"
156
- content.gsub!(token, new_constraint) if content.include?(token)
157
- token = "{RUBOCOP|RUBY|GEM}"
158
- 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("_")
159
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)
160
180
  end
161
- else
162
- helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true)
163
181
  end
164
- end
165
-
166
- # 4b) Additional modular gemfiles to include
167
- ["debug.gemfile", "runtime_heads.gemfile"].each do |fname|
168
- src = helpers.prefer_example(File.join(gem_checkout_root, "gemfiles/modular", fname))
169
- dest = File.join(project_root, "gemfiles/modular", fname)
182
+ else
170
183
  helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true)
171
184
  end
172
185
 
173
186
  # 4c) Copy modular directories with nested/versioned files
174
187
  %w[erb mutex_m stringio x_std_libs].each do |dir|
175
- src_dir = File.join(gem_checkout_root, "gemfiles/modular", dir)
176
- dest_dir = File.join(project_root, "gemfiles/modular", dir)
188
+ src_dir = File.join(gem_checkout_root, MODULAR_GEMFILE_DIR, dir)
189
+ dest_dir = File.join(project_root, MODULAR_GEMFILE_DIR, dir)
177
190
  helpers.copy_dir_with_prompt(src_dir, dest_dir)
178
191
  end
179
192
 
@@ -604,17 +617,50 @@ module Kettle
604
617
  namespace_shield: namespace_shield,
605
618
  gem_shield: gem_shield,
606
619
  )
607
- # Retain whitespace everywhere, except collapse repeated whitespace in CHANGELOG release headers only
608
620
  if File.basename(rel) == "CHANGELOG.md"
609
- lines = c.split("\n", -1)
610
- lines.map! do |ln|
611
- if ln =~ /^##\s+\[.*\]/
612
- ln.gsub(/[ \t]+/, " ")
621
+ begin
622
+ # Special handling: only template header through Unreleased section (inclusive), preserve the rest
623
+ src_lines = c.split("\n", -1)
624
+ # Find index of Unreleased heading (case-insensitive), typical format: ## [Unreleased]
625
+ unreleased_idx = src_lines.index { |ln| ln =~ /^##\s*\[\s*Unreleased\s*\]/i }
626
+ if unreleased_idx
627
+ # Determine end of Unreleased section: next heading of same or higher level (## or #)
628
+ stop_idx = src_lines.length - 1
629
+ j = unreleased_idx + 1
630
+ while j < src_lines.length
631
+ if src_lines[j] =~ /^##\s+\[/ || src_lines[j] =~ /^#\s+/ || src_lines[j] =~ /^##\s+[^\[]/
632
+ stop_idx = j - 1
633
+ break
634
+ end
635
+ j += 1
636
+ end
637
+ header_through_unreleased = src_lines[0..stop_idx]
638
+ tail = File.file?(dest) ? File.read(dest).split("\n", -1)[(File.read(dest).split("\n", -1).index { |ln| ln =~ /^##\s*\[\s*Unreleased\s*\]/i } || -1) + 1..-1] : nil
639
+ tail ||= []
640
+ # Additionally, ensure we preserve existing markdown link refs typically at file bottom (e.g., [Unreleased]: ...)
641
+ # Prefer tail from existing file entirely to avoid clobbering release notes and refs.
642
+ merged = (header_through_unreleased + (tail || [])).join("\n")
643
+ c = merged
613
644
  else
614
- ln
645
+ # If Unreleased not found, fallback to original c (only collapse header spacing below)
646
+ end
647
+ # Collapse repeated whitespace in release headers only
648
+ lines = c.split("\n", -1)
649
+ lines.map! do |ln|
650
+ if ln =~ /^##\s+\[.*\]/
651
+ ln.gsub(/[ \t]+/, " ")
652
+ else
653
+ ln
654
+ end
615
655
  end
656
+ c = lines.join("\n")
657
+ rescue StandardError => e
658
+ Kettle::Dev.debug_error(e, __method__)
659
+ # On any error, keep previous behavior (collapse whitespace only)
660
+ lines = c.split("\n", -1)
661
+ lines.map! { |ln| (ln =~ /^##\s+\[.*\]/) ? ln.gsub(/[ \t]+/, " ") : ln }
662
+ c = lines.join("\n")
616
663
  end
617
- c = lines.join("\n")
618
664
  end
619
665
  c
620
666
  end
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.1.8"
9
+ VERSION = "1.1.10"
10
10
 
11
11
  module_function
12
12
 
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.8
4
+ version: 1.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -305,6 +305,7 @@ files:
305
305
  - gemfiles/modular/optional.gemfile
306
306
  - gemfiles/modular/optional.gemfile.example
307
307
  - gemfiles/modular/runtime_heads.gemfile
308
+ - gemfiles/modular/runtime_heads.gemfile.example
308
309
  - gemfiles/modular/stringio/r2.4/v0.0.2.gemfile
309
310
  - gemfiles/modular/stringio/r2/v3.0.gemfile
310
311
  - gemfiles/modular/stringio/r3/v3.0.gemfile
@@ -380,10 +381,10 @@ licenses:
380
381
  - MIT
381
382
  metadata:
382
383
  homepage_uri: https://kettle-dev.galtzo.com/
383
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.8
384
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.8/CHANGELOG.md
384
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.10
385
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.10/CHANGELOG.md
385
386
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
386
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.8
387
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.10
387
388
  funding_uri: https://github.com/sponsors/pboling
388
389
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
389
390
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
@@ -1,4 +1 @@
1
- �$N߷��@kSh��5��AH:_�n��63�w��
2
- oڥ���1���GBa���ѦFX��3m-�gT�|���6C���bV�g����?� 5 �ވ�� ƽ�PfK]M�S������k���d㛻y�� ���
3
- ����� ���;�
4
- ���r���u0`�}r���iÿ��}���c���� �"9����M-����I�l��vy��i d)�t�
1
+ WH�"U�4�@�]�.#J3%w�� �+$�h���q��+��j3۷SG#¶%��/���5?��V/٤��EY��bJ��R���Y���',4���}d%XZ/4��?��*�9MՂ���r_���96�������d ��N��