kettle-dev 1.1.47 → 1.1.49

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: ce61aa17df248a723743179807ea6da8b1c139dbd2555459a69035b4a33338bd
4
- data.tar.gz: 7eb08bdf8772350131a62caa2ac893de26871ab093d671ee798b5a1edb7a97b0
3
+ metadata.gz: f95a45a4ef2762a84b2f36e6824a97e34c050368c6125f74b41efcabd2465549
4
+ data.tar.gz: 49899dfdd780feb8134b5999aad8c3e5230361b70e8e99caf4d3529e1e46387e
5
5
  SHA512:
6
- metadata.gz: 7936fd630aab1b64ab97ae9b52a570524b5c20ddc576bddbb10df3ee6dd05e26a736e33c34cbe3ba7cebd903c112d68440d9863f5ade11ae7c18f84cc1d08b68
7
- data.tar.gz: cec2cbdcab872105c822f07d0539ccd08c8ad66aa1a1e7ded93a1c8d3f790a1efc48449f0810dc4128e201d32aa517fde4c5054f4a7e604c1b4e0cda630d3155
6
+ metadata.gz: 85cb8912a3fc282d2985c901635ed57336e195cc98fad631931bb04488623f5274c057b9b7c55ab24bb1a4ea256dd2c3ec48b95010403bb3b697297c838822d5
7
+ data.tar.gz: ee8ffd0f7f5bbc36c5d81bc2dc122666a10dd7b4c4b50f34c79fc5e65308354e28e980466af60e95d5d99527412428d161147ee9a2f71f00967d59f9c1468e96
checksums.yaml.gz.sig CHANGED
@@ -1,4 +1,4 @@
1
- ?H3UW �<D
2
- ����1t4�`����$a���%���Z!p��̰���Ʉ�_�D��u� � �cF��1��1q`e%<G# �
3
- ��܃�g E���֜m��.57q���<��i����, ��!�k��?woW/�6�B�3�%+\��T���bn�y���63���\�<%ȱ����I���I��'���a����exPo`7XUI%ި�ۧ�5_*�j��M/U%Oehx ҫӑ��#6E���j���qO�^VĤ(:^� F��tnJE�7T�@5�Ծ�
4
- �3�uȴ�Cf&�K>�� _M��ãou�3����wƙ��N_.���_ a������)���g��� ��۹�\Ql��
1
+ |� K �O��nE�G����@�����*Й����Z�;�����D�=P[Ec�M��1�؝^�!MWΎ�A��f�a
2
+ ��>V)<
3
+ ���Q#�|�c��jOE|3��J����{˔x��W��ې�:0"�?���|IrM��ks�Z���~+�� �8TTD��M*��Igc���M���^�ԖD�� ze�|5)�� �s�5{����UC��H���ŕ�a�r�ULN�����N]�����*���{�� _�8�w���X�����-�#{;ǰ"��vy�|��g/��������zdr�K��;���X'����\�Ѩ������
4
+ ��oWj��
data/.envrc CHANGED
@@ -21,8 +21,8 @@ export K_SOUP_COV_DO=true # Means you want code coverage
21
21
  export K_SOUP_COV_COMMAND_NAME="Test Coverage"
22
22
  # Available formats are html, xml, rcov, lcov, json, tty
23
23
  export K_SOUP_COV_FORMATTERS="html,xml,rcov,lcov,json,tty"
24
- export K_SOUP_COV_MIN_BRANCH=79 # Means you want to enforce X% branch coverage
25
- export K_SOUP_COV_MIN_LINE=95 # Means you want to enforce X% line coverage
24
+ export K_SOUP_COV_MIN_BRANCH=77 # Means you want to enforce X% branch coverage
25
+ export K_SOUP_COV_MIN_LINE=92 # Means you want to enforce X% line coverage
26
26
  export K_SOUP_COV_MIN_HARD=true # Means you want the build to fail if the coverage thresholds are not met
27
27
  export K_SOUP_COV_MULTI_FORMATTERS=true
28
28
  export K_SOUP_COV_OPEN_BIN= # Means don't try to open coverage results in browser
@@ -6,9 +6,8 @@ permissions:
6
6
  id-token: write
7
7
 
8
8
  env:
9
- # Lower than local, which is at 100/100, because rubocop-lts isn't installed in the coverage workflow
10
- K_SOUP_COV_MIN_BRANCH: 78
11
- K_SOUP_COV_MIN_LINE: 93
9
+ K_SOUP_COV_MIN_BRANCH: 77
10
+ K_SOUP_COV_MIN_LINE: 92
12
11
  K_SOUP_COV_MIN_HARD: true
13
12
  K_SOUP_COV_FORMATTERS: "xml,rcov,lcov,tty"
14
13
  K_SOUP_COV_DO: true
@@ -116,7 +115,7 @@ jobs:
116
115
  hide_complexity: true
117
116
  indicators: true
118
117
  output: both
119
- thresholds: '93 78'
118
+ thresholds: '92 77'
120
119
  continue-on-error: ${{ matrix.experimental != 'false' }}
121
120
 
122
121
  - name: Add Coverage PR Comment
data/.junie/guidelines.md CHANGED
@@ -47,7 +47,6 @@ This document captures project-specific knowledge to streamline setup, testing,
47
47
  - RSpec 3.13 with custom spec/spec_helper.rb configuration:
48
48
  - silent_stream: STDOUT is silenced by default for examples to keep logs clean.
49
49
  - To explicitly test console output, tag the example or group with :check_output.
50
- - Global state hygiene: Around each example, FlossFunding.namespaces and FlossFunding.silenced are snapshotted and restored to prevent cross-test pollution.
51
50
  - DEBUG toggle: Set DEBUG=true to require 'debug' and avoid silencing output during your run.
52
51
  - ENV seeding: The suite sets ENV["FLOSS_FUNDING_FLOSS_FUNDING"] = "Free-as-in-beer" so that the library’s own namespace is considered activated (avoids noisy warnings).
53
52
  - Coverage: kettle-soup-cover integrates SimpleCov; .simplecov is invoked from spec_helper when enabled by Kettle::Soup::Cover::DO_COV, which is controlled by K_SOUP_COV_DO being set to true / false.
@@ -73,10 +72,11 @@ This document captures project-specific knowledge to streamline setup, testing,
73
72
  - Output visibility
74
73
  - To see STDOUT from the code under test, use the :check_output tag on the example or group.
75
74
  Example:
76
- RSpec.describe "output", :check_output do
77
- it "prints" do
78
- puts "This output should be visible"
79
- expect(true).to be true
75
+ RSpec.describe "with output", :check_output do
76
+ it "has output" do
77
+ output = capture(:stderr) {kernel.warn("This is a warning")}
78
+ logs = [ "This is a warning\n" ]
79
+ expect(output).to(include(*logs))
80
80
  end
81
81
  end
82
82
  - Alternatively, run with DEBUG=true to disable silencing for the entire run.
@@ -47,9 +47,7 @@ This document captures project-specific knowledge to streamline setup, testing,
47
47
  - RSpec 3.13 with custom spec/spec_helper.rb configuration:
48
48
  - silent_stream: STDOUT is silenced by default for examples to keep logs clean.
49
49
  - To explicitly test console output, tag the example or group with :check_output.
50
- - Global state hygiene: Around each example, FlossFunding.namespaces and FlossFunding.silenced are snapshotted and restored to prevent cross-test pollution.
51
50
  - DEBUG toggle: Set DEBUG=true to require 'debug' and avoid silencing output during your run.
52
- - ENV seeding: The suite sets ENV["FLOSS_FUNDING_FLOSS_FUNDING"] = "Free-as-in-beer" so that the library’s own namespace is considered activated (avoids noisy warnings).
53
51
  - Coverage: kettle-soup-cover integrates SimpleCov; .simplecov is invoked from spec_helper when enabled by Kettle::Soup::Cover::DO_COV, which is controlled by K_SOUP_COV_DO being set to true / false.
54
52
  - RSpec.describe usage:
55
53
  - Use `describe "#<method_name>"` to contain a block of specs that test instance method behavior.
@@ -73,10 +71,11 @@ This document captures project-specific knowledge to streamline setup, testing,
73
71
  - Output visibility
74
72
  - To see STDOUT from the code under test, use the :check_output tag on the example or group.
75
73
  Example:
76
- RSpec.describe "output", :check_output do
77
- it "prints" do
78
- puts "This output should be visible"
79
- expect(true).to be true
74
+ RSpec.describe "with output", :check_output do
75
+ it "has output" do
76
+ output = capture(:stderr) {kernel.warn("This is a warning")}
77
+ logs = [ "This is a warning\n" ]
78
+ expect(output).to(include(*logs))
80
79
  end
81
80
  end
82
81
  - Alternatively, run with DEBUG=true to disable silencing for the entire run.
data/.rubocop_rspec.yml CHANGED
@@ -18,7 +18,7 @@ RSpec/InstanceVariable:
18
18
 
19
19
  RSpec/NestedGroups:
20
20
  Enabled: false
21
-
21
+
22
22
  RSpec/ExpectInHook:
23
23
  Enabled: false
24
24
 
data/.yardopts CHANGED
@@ -1,11 +1,12 @@
1
+ --plugin fence
2
+ -e yard/fence/hoist.rb
1
3
  --plugin junk
2
4
  --plugin relative_markdown_links
3
- --readme README.md
5
+ --readme tmp/yard-fence/README.md
4
6
  --charset utf-8
5
7
  --markup markdown
6
8
  --output docs
7
- --load .yard_gfm_support.rb
8
9
  'lib/**/*.rb'
9
10
  -
10
- '*.md'
11
- '*.txt'
11
+ 'tmp/yard-fence/*.md'
12
+ 'tmp/yard-fence/*.txt'
data/Appraisals CHANGED
@@ -136,6 +136,8 @@ appraise "coverage" do
136
136
  eval_gemfile "modular/optional.gemfile"
137
137
  eval_gemfile "modular/recording/r3/recording.gemfile"
138
138
  eval_gemfile "modular/x_std_libs.gemfile"
139
+ # Normally style is included in coverage runs only, but we need it for the test suite to get full coverage
140
+ eval_gemfile "modular/style.gemfile"
139
141
  # Dependencies injected by the kettle-dev-setup script & kettle:dev:install rake task
140
142
  # eval_gemfile "modular/injected.gemfile"
141
143
  end
data/CHANGELOG.md CHANGED
@@ -30,6 +30,30 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.1.49] - 2025-11-07
34
+
35
+ - TAG: [v1.1.49][1.1.49t]
36
+ - COVERAGE: 94.39% -- 4038/4278 lines in 26 files
37
+ - BRANCH COVERAGE: 78.93% -- 1663/2107 branches in 26 files
38
+ - 79.89% documented
39
+
40
+ ### Added
41
+
42
+ - yard-fence for handling braces in fenced code blocks in yard docs
43
+ - Improved documentation
44
+
45
+ ## [1.1.48] - 2025-11-06
46
+
47
+ - TAG: [v1.1.48][1.1.48t]
48
+ - COVERAGE: 94.39% -- 4038/4278 lines in 26 files
49
+ - BRANCH COVERAGE: 78.93% -- 1663/2107 branches in 26 files
50
+ - 79.89% documented
51
+
52
+ ### Fixed
53
+
54
+ - Typo in markdown link
55
+ - Handling of pre-existing gemfile
56
+
33
57
  ## [1.1.47] - 2025-11-06
34
58
 
35
59
  - TAG: [v1.1.47][1.1.47t]
@@ -1283,7 +1307,11 @@ Please file a bug if you notice a violation of semantic versioning.
1283
1307
  - Selecting will run the selected workflow via `act`
1284
1308
  - This may move to its own gem in the future.
1285
1309
 
1286
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.47...HEAD
1310
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.49...HEAD
1311
+ [1.1.49]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.48...v1.1.49
1312
+ [1.1.49t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.49
1313
+ [1.1.48]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.47...v1.1.48
1314
+ [1.1.48t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.48
1287
1315
  [1.1.47]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.46...v1.1.47
1288
1316
  [1.1.47t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.47
1289
1317
  [1.1.46]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.45...v1.1.46
data/FUNDING.md CHANGED
@@ -31,11 +31,11 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
31
31
 
32
32
  <!-- RELEASE-NOTES-FOOTER-END -->
33
33
 
34
- # 🤑 Request for Help
34
+ # 🤑 A request for help
35
35
 
36
36
  Maintainers have teeth and need to pay their dentists.
37
- After getting laid off in an RIF in March and filled with many dozens of rejections,
38
- I'm now spending ~60+ hours a week building open source tools.
37
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
38
+ I began spending most of my time building open source tools.
39
39
  I'm hoping to be able to pay for my kids' health insurance this month,
40
40
  so if you value the work I am doing, I need your support.
41
41
  Please consider sponsoring me or the project.
@@ -44,16 +44,13 @@ To join the community or get help 👇️ Join the Discord.
44
44
 
45
45
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
46
46
 
47
- To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
47
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
48
48
 
49
49
  [![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] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
50
50
 
51
51
  # Another Way to Support Open Source Software
52
52
 
53
- > How wonderful it is that nobody need wait a single moment before starting to improve the world.<br/>
54
- >—Anne Frank
55
-
56
- I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions — totaling 79 hours of FLOSS coding over just the past seven days, a pretty regular week for me. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
53
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
57
54
 
58
55
  If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
59
56
 
@@ -27,11 +27,11 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
27
27
 
28
28
  <!-- RELEASE-NOTES-FOOTER-END -->
29
29
 
30
- # 🤑 Request for Help
30
+ # 🤑 A request for help
31
31
 
32
32
  Maintainers have teeth and need to pay their dentists.
33
- After getting laid off in an RIF in March and filled with many dozens of rejections,
34
- I'm now spending ~60+ hours a week building open source tools.
33
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
34
+ I began spending most of my time building open source tools.
35
35
  I'm hoping to be able to pay for my kids' health insurance this month,
36
36
  so if you value the work I am doing, I need your support.
37
37
  Please consider sponsoring me or the project.
@@ -40,16 +40,13 @@ To join the community or get help 👇️ Join the Discord.
40
40
 
41
41
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
42
42
 
43
- To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
43
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
44
44
 
45
- [![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]
45
+ [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
46
46
 
47
47
  # Another Way to Support Open Source Software
48
48
 
49
- > How wonderful it is that nobody need wait a single moment before starting to improve the world.<br/>
50
- >—Anne Frank
51
-
52
- I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions — totaling 79 hours of FLOSS coding over just the past seven days, a pretty regular week for me. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
49
+ I’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).
53
50
 
54
51
  If you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.
55
52
 
data/README.md CHANGED
@@ -54,6 +54,8 @@ Run the one-time project bootstrapper:
54
54
 
55
55
  ```console
56
56
  kettle-dev-setup
57
+ # Or if your middle name is "danger":
58
+ # kettle-dev-setup --allowed=true --force
57
59
  ```
58
60
 
59
61
  This gem integrates tightly with [kettle-test](https://github.com/kettle-rb/kettle-test).
@@ -106,7 +108,7 @@ Compatible with MRI Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby
106
108
 
107
109
  ### Federated DVCS
108
110
 
109
- <details>
111
+ <details markdown="1">
110
112
  <summary>Find this repo on federated forges (Coming soon!)</summary>
111
113
 
112
114
  | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
@@ -124,7 +126,7 @@ Compatible with MRI Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby
124
126
 
125
127
  Available as part of the Tidelift Subscription.
126
128
 
127
- <details>
129
+ <details markdown="1">
128
130
  <summary>Need enterprise-level guarantees?</summary>
129
131
 
130
132
  The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
@@ -159,7 +161,7 @@ gem install kettle-dev
159
161
 
160
162
  ### 🔒 Secure Installation
161
163
 
162
- <details>
164
+ <details markdown="1">
163
165
  <summary>For Medium or High Security Installations</summary>
164
166
 
165
167
  This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
@@ -728,12 +730,11 @@ For example:
728
730
  spec.add_dependency("kettle-dev", "~> 1.0")
729
731
  ```
730
732
 
731
- <details>
733
+ <details markdown="1">
732
734
  <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
733
735
 
734
736
  SemVer should, IMO, but doesn't explicitly, say that dropping support for specific Platforms
735
- is a *breaking change* to an API.
736
- It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
737
+ is a *breaking change* to an API, and for that reason the bike shedding is endless.
737
738
 
738
739
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
739
740
  read this article from the creator of SemVer:
@@ -964,10 +965,10 @@ Thanks for RTFM. ☺️
964
965
  [📌changelog]: CHANGELOG.md
965
966
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
966
967
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
967
- [📌gitmoji]:https://gitmoji.dev
968
+ [📌gitmoji]: https://gitmoji.dev
968
969
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
969
970
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
970
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.237-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
971
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.278-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
971
972
  [🔐security]: SECURITY.md
972
973
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
973
974
  [📄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
@@ -78,7 +78,7 @@ Compatible with MRI Ruby {K_D_MIN_RUBY}+, and concordant releases of JRuby, and
78
78
 
79
79
  ### Federated DVCS
80
80
 
81
- <details>
81
+ <details markdown="1">
82
82
  <summary>Find this repo on federated forges (Coming soon!)</summary>
83
83
 
84
84
  | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
@@ -96,7 +96,7 @@ Compatible with MRI Ruby {K_D_MIN_RUBY}+, and concordant releases of JRuby, and
96
96
 
97
97
  Available as part of the Tidelift Subscription.
98
98
 
99
- <details>
99
+ <details markdown="1">
100
100
  <summary>Need enterprise-level guarantees?</summary>
101
101
 
102
102
  The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
@@ -131,7 +131,7 @@ gem install kettle-dev
131
131
 
132
132
  ### 🔒 Secure Installation
133
133
 
134
- <details>
134
+ <details markdown="1">
135
135
  <summary>For Medium or High Security Installations</summary>
136
136
 
137
137
  This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
@@ -301,12 +301,11 @@ For example:
301
301
  spec.add_dependency("kettle-dev", "~> 1.0")
302
302
  ```
303
303
 
304
- <details>
304
+ <details markdown="1">
305
305
  <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
306
306
 
307
307
  SemVer should, IMO, but doesn't explicitly, say that dropping support for specific Platforms
308
- is a *breaking change* to an API.
309
- It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
308
+ is a *breaking change* to an API, and for that reason the bike shedding is endless.
310
309
 
311
310
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
312
311
  read this article from the creator of SemVer:
@@ -542,10 +541,10 @@ Thanks for RTFM. ☺️
542
541
  [📌changelog]: CHANGELOG.md
543
542
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
544
543
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
545
- [📌gitmoji]:https://gitmoji.dev
544
+ [📌gitmoji]: https://gitmoji.dev
546
545
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
547
546
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
548
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.237-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
547
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.278-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
549
548
  [🔐security]: SECURITY.md
550
549
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
551
550
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -78,7 +78,7 @@ Compatible with MRI Ruby {K_D_MIN_RUBY}+, and concordant releases of JRuby, and
78
78
 
79
79
  ### Federated DVCS
80
80
 
81
- <details>
81
+ <details markdown="1">
82
82
  <summary>Find this repo on federated forges (Coming soon!)</summary>
83
83
 
84
84
  | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
@@ -96,7 +96,7 @@ Compatible with MRI Ruby {K_D_MIN_RUBY}+, and concordant releases of JRuby, and
96
96
 
97
97
  Available as part of the Tidelift Subscription.
98
98
 
99
- <details>
99
+ <details markdown="1">
100
100
  <summary>Need enterprise-level guarantees?</summary>
101
101
 
102
102
  The maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.
@@ -131,7 +131,7 @@ gem install kettle-dev
131
131
 
132
132
  ### 🔒 Secure Installation
133
133
 
134
- <details>
134
+ <details markdown="1">
135
135
  <summary>For Medium or High Security Installations</summary>
136
136
 
137
137
  This gem is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
@@ -278,12 +278,11 @@ For example:
278
278
  spec.add_dependency("kettle-dev", "~> 1.0")
279
279
  ```
280
280
 
281
- <details>
281
+ <details markdown="1">
282
282
  <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
283
283
 
284
284
  SemVer should, IMO, but doesn't explicitly, say that dropping support for specific Platforms
285
- is a *breaking change* to an API.
286
- It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
285
+ is a *breaking change* to an API, and for that reason the bike shedding is endless.
287
286
 
288
287
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
289
288
  read this article from the creator of SemVer:
@@ -508,7 +507,7 @@ Thanks for RTFM. ☺️
508
507
  [📌changelog]: CHANGELOG.md
509
508
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
510
509
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
511
- [📌gitmoji]:https://gitmoji.dev
510
+ [📌gitmoji]: https://gitmoji.dev
512
511
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
513
512
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
514
513
  [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.076-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
data/Rakefile.example CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # kettle-dev Rakefile v1.1.47 - 2025-11-06
3
+ # kettle-dev Rakefile v1.1.49 - 2025-11-07
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Documentation
4
- gem "kramdown", "~> 2.5", ">= 2.5.1" # Ruby >= 2.5
5
- gem "kramdown-parser-gfm", "~> 1.1" # Ruby >= 2.3
4
+ gem "kramdown", "~> 2.5", ">= 2.5.1", require: false # Ruby >= 2.5
5
+ gem "kramdown-parser-gfm", "~> 1.1", require: false # Ruby >= 2.3
6
6
  gem "yard", "~> 0.9", ">= 0.9.37", require: false
7
+ gem "yard-fence", "~> 0.4", require: false # Ruby >= 3.2
7
8
  gem "yard-junk", "~> 0.0", ">= 0.0.10", github: "pboling/yard-junk", branch: "next", require: false
8
- gem "yard-relative_markdown_links", "~> 0.5.0"
9
+ gem "yard-relative_markdown_links", "~> 0.6", require: false
9
10
 
10
11
  # Std Lib extractions
11
- gem "rdoc", "~> 6.11"
12
+ gem "rdoc", "~> 6.11", require: false
@@ -66,10 +66,12 @@ module Kettle
66
66
 
67
67
  # Non-aborting collection across GH and GL, returning a compact results hash.
68
68
  # Results format:
69
+ # ```ruby
69
70
  # {
70
71
  # github: [ {workflow: "file.yml", status: "completed", conclusion: "success"|"failure"|nil, url: String} ],
71
72
  # gitlab: { status: "success"|"failed"|"blocked"|"unknown"|nil, url: String }
72
73
  # }
74
+ # ```
73
75
  # @return [Hash]
74
76
  def collect_all
75
77
  results = {github: [], gitlab: nil}
@@ -353,9 +353,84 @@ module Kettle
353
353
  end
354
354
  end
355
355
 
356
- # Index existing gems in destination
356
+ # --- Handle `source` replacement/insertion ---
357
+ src_source_line = nil
358
+ src_content.each_line do |ln|
359
+ next if ln.strip.start_with?("#")
360
+ if ln =~ /^\s*source\s+['"][^'"]+['"]\s*$/
361
+ src_source_line = ln.rstrip + "\n"
362
+ break
363
+ end
364
+ end
365
+
366
+ dest_lines = dest_content.lines.dup
367
+
368
+ if src_source_line
369
+ dest_source_idx = dest_lines.index do |ln|
370
+ !ln.strip.start_with?("#") && ln =~ /^\s*source\s+['"][^'"]+['"]\s*$/
371
+ end
372
+ if dest_source_idx
373
+ dest_lines[dest_source_idx] = src_source_line
374
+ else
375
+ # Insert after any leading contiguous comment/blank block at top of file
376
+ insert_idx = 0
377
+ while insert_idx < dest_lines.length && (dest_lines[insert_idx].strip.empty? || dest_lines[insert_idx].lstrip.start_with?("#"))
378
+ insert_idx += 1
379
+ end
380
+ dest_lines.insert(insert_idx, src_source_line)
381
+ end
382
+ end
383
+
384
+ # --- Handle `git_source` replacement/insertion ---
385
+ # Collect non-comment git_source lines from source (preserve order)
386
+ src_git_lines = src_content.each_line.select { |ln| !ln.strip.start_with?("#") && ln =~ /^\s*git_source\s*\(/ }
387
+ if src_git_lines.any?
388
+ # Insert new git_source lines in the same order as they appear in the source
389
+ # When inserting (not replacing), place them immediately after the source line if present
390
+ insert_after_source_idx = dest_lines.index { |ln| !ln.strip.start_with?("#") && ln =~ /^\s*source\s+['"][^'"]+['"]\s*$/ }
391
+
392
+ # Iterate source git lines in reverse for insertion so order is preserved when inserting at same index
393
+ src_git_lines.reverse_each do |gln|
394
+ # Attempt to extract the git_source "name" (handles forms like git_source(:github) or git_source :github)
395
+ name_match = gln.match(/^\s*git_source\s*\(?\s*:?(\w+)\b/)
396
+ name = name_match ? name_match[1].to_s : nil
397
+
398
+ replaced = false
399
+ if name
400
+ # Try to find a git_source in destination with the same name
401
+ dest_same_idx = dest_lines.index do |dln|
402
+ !dln.strip.start_with?("#") && dln =~ /^\s*git_source\s*\(?\s*:?#{Regexp.escape(name)}\b/
403
+ end
404
+ if dest_same_idx
405
+ dest_lines[dest_same_idx] = gln.rstrip + "\n"
406
+ replaced = true
407
+ end
408
+ end
409
+
410
+ unless replaced
411
+ # If destination has a github git_source, replace that
412
+ dest_github_idx = dest_lines.index do |dln|
413
+ !dln.strip.start_with?("#") && dln =~ /^\s*git_source\s*\(?\s*:?github\b/
414
+ end
415
+ if dest_github_idx
416
+ dest_lines[dest_github_idx] = gln.rstrip + "\n"
417
+ else
418
+ # Insert below the source line if present, otherwise at top (after comments)
419
+ insert_idx =
420
+ if insert_after_source_idx
421
+ insert_after_source_idx + 1
422
+ else
423
+ 0
424
+ end
425
+ dest_lines.insert(insert_idx, gln.rstrip + "\n")
426
+ end
427
+ end
428
+ end
429
+ end
430
+
431
+ # Index existing gems in destination (after potential source/git_source changes)
357
432
  dest_gems = {}
358
- dest_content.each_line do |ln|
433
+ dest_lines.join.each_line do |ln|
359
434
  next if ln.strip.start_with?("#")
360
435
  if (m = ln.match(gem_re))
361
436
  dest_gems[m[1]] = true
@@ -363,12 +438,17 @@ module Kettle
363
438
  end
364
439
 
365
440
  missing = src_gems.keys.reject { |n| dest_gems.key?(n) }
366
- return dest_content if missing.empty?
441
+ # If nothing to change, return original destination content
442
+ if missing.empty? && src_source_line.nil? && src_git_lines.empty?
443
+ return dest_content
444
+ end
367
445
 
368
- out = dest_content.dup
446
+ out = dest_lines.join
369
447
  out << "\n" unless out.end_with?("\n") || out.empty?
370
- out << missing.map { |n| src_gems[n] }.join("\n")
371
- out << "\n"
448
+ if missing.any?
449
+ out << missing.map { |n| src_gems[n] }.join("\n")
450
+ out << "\n"
451
+ end
372
452
  out
373
453
  rescue StandardError => e
374
454
  Kettle::Dev.debug_error(e, __method__)
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.1.47"
9
+ VERSION = "1.1.49"
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.47
4
+ version: 1.1.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -396,10 +396,10 @@ licenses:
396
396
  - MIT
397
397
  metadata:
398
398
  homepage_uri: https://kettle-dev.galtzo.com/
399
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.47
400
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.47/CHANGELOG.md
399
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.49
400
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.49/CHANGELOG.md
401
401
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
402
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.47
402
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.49
403
403
  funding_uri: https://github.com/sponsors/pboling
404
404
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
405
405
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file