kettle-fwd 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 114b0490d9f4e5d20d13febc5d9aa594cd3a67bb9870b70b03be57c9454a1201
4
+ data.tar.gz: 33c06c07b7dd0fd6ed6d4023d638ebdeb46b24ab8f0e0997c456bab2cabd7abb
5
+ SHA512:
6
+ metadata.gz: f989b16ffc2f5c8b18032a14a160263cb6c5b6845f9543e25b348ac8677d61d4db858d08df16ef1466bdf802e088b633839c330c322de73b7a34a4e052301a79
7
+ data.tar.gz: 1da3d72c16a13de2e35705c3bd8cab81520d4e3b5526a09572bdbf934b144e8df47f8bd2ee4ed94ffec1b18187eae765bf21675d5ea4804dbb0286bb6a13d668
checksums.yaml.gz.sig ADDED
Binary file
data/CHANGELOG.md ADDED
@@ -0,0 +1,124 @@
1
+ # Changelog
2
+
3
+ [![SemVer 2.0.0][📌semver-img]][📌semver] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog]
4
+
5
+ All notable changes to this project will be documented in this file.
6
+
7
+ The format is based on [Keep a Changelog][📗keep-changelog],
8
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
9
+ and [yes][📌major-versions-not-sacred], platform and engine support are part of the [public API][📌semver-breaking].
10
+ Please file a bug if you notice a violation of semantic versioning.
11
+
12
+ [📌semver]: https://semver.org/spec/v2.0.0.html
13
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-FFDD67.svg?style=flat
14
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
15
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
16
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
17
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
18
+
19
+ ## [Unreleased]
20
+
21
+ ### Added
22
+
23
+ ### Changed
24
+
25
+ ### Deprecated
26
+
27
+ ### Removed
28
+
29
+ ### Fixed
30
+
31
+ ### Security
32
+
33
+ ## [0.1.0] - 2026-11-07
34
+
35
+ - TAG: [v0.1.0][0.1.0t]
36
+ - COVERAGE: 100.00% -- 12/12 lines in 2 files
37
+ - BRANCH COVERAGE: 0.00% -- 0/0 branches in 2 files
38
+ - 50.00% documented
39
+
40
+ ### Added
41
+
42
+ - Initial scaffold-only placeholder release for the kettle-fwd gem; runtime behavior is planned for a future release.
43
+
44
+ - kettle-jem-template-20260720-005 - README Support & Community links now
45
+ include RubyForum.
46
+ - kettle-jem-template-20260726-001 - Projects now include YARD lint
47
+ configuration and documentation dependencies so documentation issues fail
48
+ before generated docs are refreshed.
49
+ - kettle-jem-template-20260727-001 - Spec harness documentation now lists the
50
+ RSpec helpers provided by `kettle-test`.
51
+ - kettle-jem-template-20260913-001 - Templating now also surfaces a review
52
+ entry in `dependency_conflicts.resolve` when a direct development
53
+ dependency doesn't support one or more of this project's declared
54
+ `engines:` and has no template-managed modular home (e.g. `sqlite3` on
55
+ `jruby`). Review each entry and pick a resolution per the project's own
56
+ engine support needs.
57
+
58
+ ### Changed
59
+
60
+ - kettle-jem-template-20260716-002 - Gemspecs now ship fewer repository-only
61
+ files, reducing package noise for downstream packagers.
62
+ - kettle-jem-template-20260720-002 - Development Gemfiles now use the released
63
+ `tree_sitter_language_pack` gem 1.13.3 or newer by default.
64
+ - kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
65
+ cover `version.rb` without redefining constants, or are removed when version
66
+ specs are not managed for the project.
67
+ - kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
68
+ setup-ruby-flash planning and can prepare appraisal-only jobs without
69
+ installing the main Gemfile bundle.
70
+ - kettle-jem-template-20260801-001 - Generated README gem dashboard links now
71
+ use ClickGems instead of BestGems.
72
+
73
+ - [kc] kettle-jem/template: updated 116 project files:
74
+ - code and tests (7)
75
+ - configuration (4)
76
+ - dependencies (39)
77
+ - documentation (3)
78
+ - other (41)
79
+ - workflows (22)
80
+
81
+ - [kc] kettle-jem/prepare: updated 4 project files:
82
+ - dependencies (4)
83
+
84
+ ### Fixed
85
+
86
+ - kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now
87
+ uses the installed `smorg-rb` driver command.
88
+ - kettle-jem-template-20260725-001 - Release pull request branches beginning
89
+ with `feature/release` now run JRuby and TruffleRuby workflows.
90
+ - kettle-jem-template-20260726-002 - Generated version files now document their
91
+ version namespace and constants, reducing warning-only YARD lint output.
92
+ - kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
93
+ QLTY, and Codecov as optional, so provider outages do not fail CI when local
94
+ coverage thresholds still pass.
95
+ - kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
96
+ same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
97
+ installs are not reported as project lint debt.
98
+ - kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
99
+ TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
100
+ before the test suite starts.
101
+ - kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
102
+ setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
103
+ lockfile parser failures on Git and path dependencies.
104
+ - kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
105
+ missing canonical version spec when a project only has shim namespace version
106
+ specs.
107
+ - kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
108
+ relative to the gemspec directory, so release package contents stay correct
109
+ even when the gemspec is loaded from another working directory.
110
+ - kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
111
+ managed configuration block bindings structurally, preventing mixed block
112
+ parameter names from producing invalid configuration after a merge.
113
+ - kettle-jem-template-20260801-003 - Generated project metadata and
114
+ documentation now normalize configured underscore hostnames to valid
115
+ hyphenated hostnames.
116
+ - kettle-jem-template-20260801-004 - Generated organization README logos now
117
+ use GitHub's stable organization avatar endpoint instead of assuming a
118
+ matching Galtzo-hosted asset exists.
119
+ - kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
120
+ preserving comments and trailing commas during template updates.
121
+
122
+ [Unreleased]: https://github.com/kettle-dev/kettle-fwd/compare/v0.1.0...HEAD
123
+ [0.1.0]: https://github.com/kettle-dev/kettle-fwd/compare/24e708352eaf0700ffd935040340b7d7c3d6f1a9...v0.1.0
124
+ [0.1.0t]: https://github.com/kettle-dev/kettle-fwd/releases/tag/v0.1.0
data/LICENSE.md ADDED
@@ -0,0 +1,10 @@
1
+ # License
2
+
3
+ This project is made available under the following license.
4
+ Choose the option that best fits your use case:
5
+
6
+ - [MIT](https://github.com/kettle-dev/kettle-fwd/blob/main/MIT.md)
7
+
8
+ ## Copyright Notice
9
+
10
+ - Copyright (c) 2026 Peter H. Boling
data/README.md ADDED
@@ -0,0 +1,470 @@
1
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by GitHub" src="https://github.com/kettle-dev.png?size=192" width="14%" align="right"/></a>
2
+
3
+ # 💎 Kettle::Fwd
4
+
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![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 Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
6
+
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
8
+
9
+ ---
10
+
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
+
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
+
15
+ <details markdown="1">
16
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
17
+
18
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
19
+
20
+ </details>
21
+
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
+
24
+ This initial release reserves the `kettle-fwd` package as a scaffold for a future Kettle family component. It currently exposes no runtime API.
25
+
26
+ ## 💡 Info you can shake a stick at
27
+
28
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
29
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
30
+ | Works with JRuby | [![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]|
31
+ | Works with Truffle Ruby | [![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]|
32
+ | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
33
+ | Works with MRI Ruby 3 | [![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]|
34
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![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] |
35
+ | 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] |
36
+ | 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] |
37
+ | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
38
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
39
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
40
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
41
+
42
+ ### Compatibility
43
+
44
+ The gem's declared runtime compatibility floor is MRI Ruby 3.2.0+, with concordant releases of JRuby and TruffleRuby.
45
+ CI workflows and Appraisals are generated for MRI Ruby 3.2.0+.
46
+ The current MRI CI lane runs on Linux and macOS.
47
+ The test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml`.
48
+ When it is higher than the runtime floor, older runtime-compatible Rubies are
49
+ not covered by the generated CI or Appraisal matrix.
50
+
51
+ <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>
52
+
53
+ The _amazing_ test matrix is powered by the kettle-dev stack.
54
+
55
+ <details markdown="1">
56
+ <summary>How kettle-dev manages complexity in tests</summary>
57
+
58
+ | Gem | Source | Role | Total downloads |
59
+ |-----|--------|------|---------------------|
60
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
61
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
62
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
63
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
64
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
65
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
66
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
67
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
68
+
69
+ </details>
70
+
71
+ ### Federated DVCS
72
+
73
+ <details markdown="1">
74
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
75
+
76
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
77
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
78
+ | 🧪 [kettle-dev/kettle-fwd on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
79
+ | 🧊 [kettle-dev/kettle-fwd on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
80
+ | 🐙 [kettle-dev/kettle-fwd on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
81
+
82
+ </details>
83
+
84
+ ### Enterprise Support
85
+
86
+ For enterprise support from the maintainer, use [Upwork][👨🏼‍🏫expsup-upwork] or [CodeMentor][👨🏼‍🏫expsup-codementor].
87
+
88
+ Other support channels:
89
+
90
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
91
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
92
+
93
+ ## ✨ Installation
94
+
95
+ Install the gem and add to the application's Gemfile by executing:
96
+
97
+ ```console
98
+ bundle add kettle-fwd
99
+ ```
100
+
101
+ If bundler is not being used to manage dependencies, install the gem by executing:
102
+
103
+ ```console
104
+ gem install kettle-fwd
105
+ ```
106
+
107
+ ## ⚙️ Configuration
108
+
109
+ ## 🔧 Basic Usage
110
+
111
+ This release contains the package scaffold only; there is no runtime API yet. Functionality will be added in a future release.
112
+
113
+ ## 🦷 FLOSS Funding
114
+
115
+ While kettle-dev tools are free software and will always be, the project would benefit immensely from some funding.
116
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
117
+
118
+ We welcome both individual and corporate sponsors! We also offer a
119
+ wide array of funding channels to account for your preferences.
120
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
121
+
122
+ ### Corporate Sponsorship
123
+
124
+ **If you're working in a company that's making significant use of kettle-dev tools we'd
125
+ appreciate it if you suggest to your company to become a kettle-dev sponsor.**
126
+
127
+ ### Individual Support
128
+
129
+ You can support the development of kettle-dev tools via
130
+ [GitHub Sponsors][🖇sponsor],
131
+ [Liberapay][⛳liberapay],
132
+ [Open Collective][🖇osc],
133
+ and [PayPal][🖇paypal].
134
+
135
+ ### Open Collective for Individuals
136
+
137
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/kettle-dev#backer)]
138
+
139
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
140
+
141
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
142
+ No backers yet. Be the first!
143
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
144
+
145
+ ### Open Collective for Organizations
146
+
147
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/kettle-dev#sponsor)]
148
+
149
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
150
+
151
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
152
+ No sponsors yet. Be the first!
153
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
154
+
155
+ [kettle-readme-backers]: https://github.com/kettle-dev/kettle-fwd/blob/main/bin/kettle-readme-backers
156
+
157
+ ### Another way to support open-source
158
+
159
+ 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).
160
+
161
+ 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`.
162
+
163
+ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.
164
+
165
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
166
+
167
+ [![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]
168
+
169
+ ## 🔐 Security
170
+
171
+ See [SECURITY.md][🔐security].
172
+
173
+ ## 🤝 Contributing
174
+
175
+ If you need some ideas of where to help, you could work on adding more code coverage,
176
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
177
+
178
+ We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
179
+
180
+ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
181
+
182
+ ### 🚀 Release Instructions
183
+
184
+ See [CONTRIBUTING.md][🤝contributing].
185
+
186
+ ### Code Coverage
187
+
188
+ <details markdown="1">
189
+ <summary>Coverage service badges</summary>
190
+
191
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
192
+
193
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
194
+
195
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
196
+
197
+ </details>
198
+
199
+ ### 🪇 Code of Conduct
200
+
201
+ Everyone interacting with this project's codebases, issue trackers,
202
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
203
+
204
+ ## 🌈 Contributors
205
+
206
+ [![Contributors][🖐contributors-img]][🖐contributors]
207
+
208
+ Made with [contributors-img][🖐contrib-rocks].
209
+
210
+ Also see GitLab Contributors: [https://gitlab.com/kettle-dev/kettle-fwd/-/graphs/main][🚎contributors-gl]
211
+
212
+ ## 📌 Versioning
213
+
214
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
215
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
216
+
217
+ For example:
218
+
219
+ ```ruby
220
+ spec.add_dependency("kettle-fwd", "~> 0.0")
221
+ ```
222
+
223
+ <details markdown="1">
224
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
225
+
226
+ Dropping support for a platform can be a breaking change for affected users.
227
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
228
+
229
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
230
+ read this article from the creator of SemVer:
231
+
232
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
233
+
234
+ </details>
235
+
236
+ See [CHANGELOG.md][📌changelog] for a list of releases.
237
+
238
+ ## 📄 License
239
+
240
+ The gem is available as open source under the terms of
241
+ the [MIT](https://github.com/kettle-dev/kettle-fwd/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
242
+
243
+ ### © Copyright
244
+
245
+ See [LICENSE.md][📄license] for the official copyright notice.
246
+
247
+ <details markdown="1">
248
+ <summary>Copyright holders</summary>
249
+
250
+ - Copyright (c) 2026 Peter H. Boling
251
+
252
+ </details>
253
+
254
+ ## 🤑 A request for help
255
+
256
+ Maintainers have teeth and need to pay their dentists.
257
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
258
+ I began spending most of my time building open source tools.
259
+ I'm hoping to be able to pay for my kids' health insurance this month,
260
+ so if you value the work I am doing, I need your support.
261
+ Please consider sponsoring me or the project.
262
+
263
+ To join the community or get help, use the RubyForum or Discord.
264
+
265
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
266
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
267
+
268
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
269
+
270
+ [![Sponsor kettle-dev/kettle-fwd 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]
271
+
272
+ ### Please give the project a star ⭐ ♥.
273
+
274
+ Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
275
+
276
+ Thanks for RTFM. ☺️
277
+
278
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
279
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
280
+ [⛳liberapay]: https://liberapay.com/pboling/donate
281
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-dev
282
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-dev
283
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-dev
284
+ [🖇osc-backers]: https://opencollective.com/kettle-dev#backer
285
+ [🖇osc-backers-i]: https://opencollective.com/kettle-dev/backers/badge.svg?style=flat
286
+ [🖇osc-sponsors]: https://opencollective.com/kettle-dev#sponsor
287
+ [🖇osc-sponsors-i]: https://opencollective.com/kettle-dev/sponsors/badge.svg?style=flat
288
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-dev?style=for-the-badge
289
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-dev?style=for-the-badge
290
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-dev?style=for-the-badge
291
+ [🖇osc]: https://opencollective.com/kettle-dev
292
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
293
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
294
+ [🖇sponsor]: https://github.com/sponsors/pboling
295
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
296
+ [🖇kofi]: https://ko-fi.com/pboling
297
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
298
+ [🖇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
299
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
300
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
301
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
302
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
303
+ [🖇floss-funding.dev]: https://floss-funding.dev
304
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
305
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
306
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
307
+ [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
308
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
309
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
310
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
311
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/kettle-dev
312
+
313
+ [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
314
+ [⛳️gem-namespace]: https://github.com/kettle-dev/kettle-fwd
315
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-Kettle::Fwd-3C2D2D.svg?style=square&logo=ruby&logoColor=white
316
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/kettle-fwd
317
+ [⛳️name-img]: https://img.shields.io/badge/name-kettle--fwd-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
318
+ [⛳️tag-img]: https://img.shields.io/github/tag/kettle-dev/kettle-fwd.svg
319
+ [⛳️tag]: https://github.com/kettle-dev/kettle-fwd/releases
320
+ [🚂maint-blog]: http://www.railsbling.com/tags/kettle-fwd
321
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
322
+ [🚂maint-contact]: http://www.railsbling.com/contact
323
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
324
+ [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
325
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
326
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
327
+ [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
328
+ [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
329
+ [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
330
+ [💖🐘ruby-mast]: https://ruby.social/@galtzo
331
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
332
+ [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
333
+ [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
334
+ [💖🌳linktree]: https://linktr.ee/galtzo
335
+ [💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat&logo=linktree
336
+ [💖💁🏼‍♂️devto]: https://dev.to/galtzo
337
+ [💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat&logo=devdotto&logoColor=white
338
+ [💖💁🏼‍♂️aboutme]: https://about.me/peter.boling
339
+ [💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat&logo=aboutme&logoColor=white
340
+ [💖🧊berg]: https://codeberg.org/pboling
341
+ [💖🐙hub]: https://github.org/pboling
342
+ [💖🛖hut]: https://sr.ht/~galtzo/
343
+ [💖🧪lab]: https://gitlab.com/pboling
344
+ [👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share
345
+ [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
346
+ [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
347
+ [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
348
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
349
+ [🚂railsbling]: http://www.railsbling.com
350
+ [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
351
+ [📜src-gl]: https://gitlab.com/kettle-dev/kettle-fwd
352
+ [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
353
+ [📜src-cb]: https://codeberg.org/kettle-dev/kettle-fwd
354
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
355
+ [📜src-gh]: https://github.com/kettle-dev/kettle-fwd
356
+ [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
357
+ [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
358
+ [📜gl-wiki]: https://gitlab.com/kettle-dev/kettle-fwd/-/wikis/home
359
+ [📜gh-wiki]: https://github.com/kettle-dev/kettle-fwd/wiki
360
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
361
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
362
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/kettle-fwd
363
+ [👽dl-ranki]: https://img.shields.io/gem/dt/kettle-fwd.svg
364
+ [👽version]: https://clickgems.clickhouse.com/dashboard/kettle-fwd
365
+ [👽versioni]: https://img.shields.io/gem/v/kettle-fwd.svg
366
+ [🏀qlty-mnt]: https://qlty.sh/gh/kettle-dev/projects/kettle-fwd
367
+ [🏀qlty-mnti]: https://qlty.sh/gh/kettle-dev/projects/kettle-fwd/maintainability.svg
368
+ [🏀qlty-cov]: https://qlty.sh/gh/kettle-dev/projects/kettle-fwd/metrics/code?sort=coverageRating
369
+ [🏀qlty-covi]: https://qlty.sh/gh/kettle-dev/projects/kettle-fwd/coverage.svg
370
+ [🏀codecov]: https://codecov.io/gh/kettle-dev/kettle-fwd
371
+ [🏀codecovi]: https://codecov.io/gh/kettle-dev/kettle-fwd/graph/badge.svg
372
+ [🏀coveralls]: https://coveralls.io/github/kettle-dev/kettle-fwd?branch=main
373
+ [🏀coveralls-img]: https://coveralls.io/repos/github/kettle-dev/kettle-fwd/badge.svg?branch=main
374
+ [🚎ruby-3.2-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/ruby-3.2.yml
375
+ [🚎ruby-3.3-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/ruby-3.3.yml
376
+ [🚎ruby-3.4-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/ruby-3.4.yml
377
+ [🚎jruby-10.0-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/jruby-10.0.yml
378
+ [🚎truby-24.2-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/truffleruby-24.2.yml
379
+ [🚎truby-25.0-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/truffleruby-25.0.yml
380
+ [🚎truby-33.0-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/truffleruby-33.0.yml
381
+ [🚎2-cov-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/coverage.yml
382
+ [🚎2-cov-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/coverage.yml/badge.svg
383
+ [🚎3-hd-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/heads.yml
384
+ [🚎3-hd-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/heads.yml/badge.svg
385
+ [🚎5-st-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/style.yml
386
+ [🚎5-st-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/style.yml/badge.svg
387
+ [🚎9-t-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/truffle.yml
388
+ [🚎9-t-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/truffle.yml/badge.svg
389
+ [🚎10-j-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/jruby.yml
390
+ [🚎10-j-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/jruby.yml/badge.svg
391
+ [🚎11-c-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/current.yml
392
+ [🚎11-c-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/current.yml/badge.svg
393
+ [🚎12-crh-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/dep-heads.yml
394
+ [🚎12-crh-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/dep-heads.yml/badge.svg
395
+ [🚎13-🔒️-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/locked_deps.yml
396
+ [🚎13-🔒️-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/locked_deps.yml/badge.svg
397
+ [🚎14-🔓️-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/unlocked_deps.yml
398
+ [🚎14-🔓️-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/unlocked_deps.yml/badge.svg
399
+ [🚎15-🪪-wf]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/license-eye.yml
400
+ [🚎15-🪪-wfi]: https://github.com/kettle-dev/kettle-fwd/actions/workflows/license-eye.yml/badge.svg
401
+ [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
402
+ [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
403
+ [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
404
+ [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
405
+ [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
406
+ [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
407
+ [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
408
+ [💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
409
+ [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
410
+ [💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
411
+ [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
412
+ [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
413
+ [🤝gh-issues]: https://github.com/kettle-dev/kettle-fwd/issues
414
+ [🤝gh-pulls]: https://github.com/kettle-dev/kettle-fwd/pulls
415
+ [🤝gl-issues]: https://gitlab.com/kettle-dev/kettle-fwd/-/issues
416
+ [🤝gl-pulls]: https://gitlab.com/kettle-dev/kettle-fwd/-/merge_requests
417
+ [🤝cb-issues]: https://codeberg.org/kettle-dev/kettle-fwd/issues
418
+ [🤝cb-pulls]: https://codeberg.org/kettle-dev/kettle-fwd/pulls
419
+ [🤝cb-donate]: https://donate.codeberg.org/
420
+ [🤝contributing]: https://github.com/kettle-dev/kettle-fwd/blob/main/CONTRIBUTING.md
421
+ [🏀codecov-g]: https://codecov.io/gh/kettle-dev/kettle-fwd/graph/badge.svg
422
+ [🖐contrib-rocks]: https://contrib.rocks
423
+ [🖐contributors]: https://github.com/kettle-dev/kettle-fwd/graphs/contributors
424
+ [🖐contributors-img]: https://contrib.rocks/image?repo=kettle-dev/kettle-fwd
425
+ [🚎contributors-gl]: https://gitlab.com/kettle-dev/kettle-fwd/-/graphs/main
426
+ [🪇conduct]: https://github.com/kettle-dev/kettle-fwd/blob/main/CODE_OF_CONDUCT.md
427
+ [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
428
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
429
+ [📌semver]: https://semver.org/spec/v2.0.0.html
430
+ [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
431
+ [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
432
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
433
+ [📌changelog]: https://github.com/kettle-dev/kettle-fwd/blob/main/CHANGELOG.md
434
+ [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
435
+ [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
436
+ [📌gitmoji]: https://gitmoji.dev
437
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
438
+ [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
439
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.012-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
440
+ [🔐security]: https://github.com/kettle-dev/kettle-fwd/blob/main/SECURITY.md
441
+ [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
442
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
443
+ [📄license]: LICENSE.md
444
+ [📄license-ref]: https://github.com/kettle-dev/kettle-fwd/blob/main/MIT.md
445
+ [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
446
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
447
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
448
+
449
+ [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
450
+ [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
451
+ [🚎yard-current]: http://rubydoc.info/gems/kettle-fwd
452
+ [🚎yard-head]: https://kettle-fwd.galtzo.com
453
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
454
+ [💎SHA_checksums]: https://gitlab.com/kettle-dev/kettle-fwd/-/tree/main/checksums
455
+ [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
456
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
457
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
458
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
459
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
460
+
461
+ <!-- kettle-jem:metadata:start -->
462
+ | Field | Value |
463
+ |---|---|
464
+ | Package | kettle-fwd |
465
+ | Description | This initial release is a package scaffold for a future Kettle family component. It currently exposes no runtime behavior; functionality will arrive in a later release. |
466
+ | Homepage | https://github.com/kettle-dev/kettle-fwd |
467
+ | Source | https://github.com/kettle-dev/kettle-fwd |
468
+ | License | `MIT` |
469
+ | Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-dev, https://thanks.dev/u/gh/pboling, https://www.buymeacoffee.com/pboling |
470
+ <!-- kettle-jem:metadata:end -->
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kettle
4
+ module Fwd
5
+ # Version namespace for this gem.
6
+ module Version
7
+ # Current gem version.
8
+ VERSION = "0.1.0"
9
+ end
10
+ # Current gem version exposed at the traditional constant location.
11
+ VERSION = Version::VERSION # Traditional Constant Location
12
+ end
13
+ end
data/lib/kettle/fwd.rb ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "version_gem"
4
+ require_relative "fwd/version"
5
+
6
+ module Kettle
7
+ module Fwd
8
+ class Error < StandardError; end
9
+ # Your code goes here...
10
+ end
11
+ end
12
+
13
+ Kettle::Fwd::Version.class_eval do
14
+ extend VersionGem::Basic
15
+ end
@@ -0,0 +1,8 @@
1
+ module Kettle
2
+ module Fwd
3
+ module Version
4
+ VERSION: String
5
+ end
6
+ VERSION: String
7
+ end
8
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,318 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kettle-fwd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter H. Boling
8
+ bindir: exe
9
+ cert_chain:
10
+ - |
11
+ -----BEGIN CERTIFICATE-----
12
+ MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
13
+ ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
14
+ A2NvbTAeFw0yNTA1MDQxNTMzMDlaFw00NTA0MjkxNTMzMDlaMEMxFTATBgNVBAMM
15
+ DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
16
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAruUoo0WA
17
+ uoNuq6puKWYeRYiZekz/nsDeK5x/0IEirzcCEvaHr3Bmz7rjo1I6On3gGKmiZs61
18
+ LRmQ3oxy77ydmkGTXBjruJB+pQEn7UfLSgQ0xa1/X3kdBZt6RmabFlBxnHkoaGY5
19
+ mZuZ5+Z7walmv6sFD9ajhzj+oIgwWfnEHkXYTR8I6VLN7MRRKGMPoZ/yvOmxb2DN
20
+ coEEHWKO9CvgYpW7asIihl/9GMpKiRkcYPm9dGQzZc6uTwom1COfW0+ZOFrDVBuV
21
+ FMQRPswZcY4Wlq0uEBLPU7hxnCL9nKK6Y9IhdDcz1mY6HZ91WImNslOSI0S8hRpj
22
+ yGOWxQIhBT3fqCBlRIqFQBudrnD9jSNpSGsFvbEijd5ns7Z9ZMehXkXDycpGAUj1
23
+ to/5cuTWWw1JqUWrKJYoifnVhtE1o1DZ+LkPtWxHtz5kjDG/zR3MG0Ula0UOavlD
24
+ qbnbcXPBnwXtTFeZ3C+yrWpE4pGnl3yGkZj9SMTlo9qnTMiPmuWKQDatAgMBAAGj
25
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQE8uWvNbPVNRXZ
26
+ HlgPbc2PCzC4bjAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
27
+ A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
28
+ ggGBAJbnUwfJQFPkBgH9cL7hoBfRtmWiCvdqdjeTmi04u8zVNCUox0A4gT982DE9
29
+ wmuN12LpdajxZONqbXuzZvc+nb0StFwmFYZG6iDwaf4BPywm2e/Vmq0YG45vZXGR
30
+ L8yMDSK1cQXjmA+ZBKOHKWavxP6Vp7lWvjAhz8RFwqF9GuNIdhv9NpnCAWcMZtpm
31
+ GUPyIWw/Cw/2wZp74QzZj6Npx+LdXoLTF1HMSJXZ7/pkxLCsB8m4EFVdb/IrW/0k
32
+ kNSfjtAfBHO8nLGuqQZVH9IBD1i9K6aSs7pT6TW8itXUIlkIUI2tg5YzW6OFfPzq
33
+ QekSkX3lZfY+HTSp/o+YvKkqWLUV7PQ7xh1ZYDtocpaHwgxe/j3bBqHE+CUPH2vA
34
+ 0V/FwdTRWcwsjVoOJTrYcff8pBZ8r2MvtAc54xfnnhGFzeRHfcltobgFxkAXdE6p
35
+ DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
+ L9nRqA==
37
+ -----END CERTIFICATE-----
38
+ date: 1980-01-02 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: version_gem
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.1'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.1.17
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.1'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.1.17
60
+ - !ruby/object:Gem::Dependency
61
+ name: kettle-dev
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.1'
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 3.1.26
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.1'
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 3.1.26
80
+ - !ruby/object:Gem::Dependency
81
+ name: bundler-audit
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: 0.9.3
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.3
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '13.0'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '13.0'
108
+ - !ruby/object:Gem::Dependency
109
+ name: require_bench
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '1.0'
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 1.0.4
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 1.0.4
128
+ - !ruby/object:Gem::Dependency
129
+ name: anonymous_loader
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '0.1'
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 0.1.5
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.1'
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 0.1.5
148
+ - !ruby/object:Gem::Dependency
149
+ name: appraisal2
150
+ requirement: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '3.2'
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: 3.2.6
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '3.2'
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: 3.2.6
168
+ - !ruby/object:Gem::Dependency
169
+ name: kettle-test
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '2.0'
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: 2.0.29
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '2.0'
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 2.0.29
188
+ - !ruby/object:Gem::Dependency
189
+ name: turbo_tests2
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '4.0'
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: 4.0.0
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: '4.0'
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: 4.0.0
208
+ - !ruby/object:Gem::Dependency
209
+ name: ruby-progressbar
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '1.13'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '1.13'
222
+ - !ruby/object:Gem::Dependency
223
+ name: stone_checksums
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '1.0'
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: 1.0.9
232
+ type: :development
233
+ prerelease: false
234
+ version_requirements: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - "~>"
237
+ - !ruby/object:Gem::Version
238
+ version: '1.0'
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: 1.0.9
242
+ - !ruby/object:Gem::Dependency
243
+ name: gitmoji-regex
244
+ requirement: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - "~>"
247
+ - !ruby/object:Gem::Version
248
+ version: '2.0'
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: 2.0.15
252
+ type: :development
253
+ prerelease: false
254
+ version_requirements: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - "~>"
257
+ - !ruby/object:Gem::Version
258
+ version: '2.0'
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: 2.0.15
262
+ description: "\U0001F48E This initial release is a package scaffold for a future Kettle
263
+ family component. It currently exposes no runtime behavior; functionality will arrive
264
+ in a later release."
265
+ email:
266
+ - floss@galtzo.com
267
+ executables: []
268
+ extensions: []
269
+ extra_rdoc_files: []
270
+ files:
271
+ - CHANGELOG.md
272
+ - LICENSE.md
273
+ - README.md
274
+ - lib/kettle/fwd.rb
275
+ - lib/kettle/fwd/version.rb
276
+ - sig/kettle/fwd.rbs
277
+ homepage: https://github.com/kettle-dev/kettle-fwd
278
+ licenses:
279
+ - MIT
280
+ metadata:
281
+ homepage_uri: https://github.com/kettle-dev/kettle-fwd
282
+ source_code_uri: https://github.com/kettle-dev/kettle-fwd/tree/v0.1.0
283
+ changelog_uri: https://github.com/kettle-dev/kettle-fwd/blob/v0.1.0/CHANGELOG.md
284
+ bug_tracker_uri: https://github.com/kettle-dev/kettle-fwd/issues
285
+ documentation_uri: https://www.rubydoc.info/gems/kettle-fwd/0.1.0
286
+ funding_uri: https://github.com/sponsors/pboling
287
+ wiki_uri: https://github.com/kettle-dev/kettle-fwd/wiki
288
+ news_uri: https://www.railsbling.com/tags/kettle-fwd
289
+ discord_uri: https://discord.gg/3qme4XHNKN
290
+ mailing_list_uri: https://www.rubyforum.org/tag/kettle-dev
291
+ rubygems_mfa_required: 'true'
292
+ rdoc_options:
293
+ - "--title"
294
+ - "kettle-fwd - \U0001F48E Placeholder gem for a future Kettle family component."
295
+ - "--main"
296
+ - README.md
297
+ - "--exclude"
298
+ - "^sig/"
299
+ - "--line-numbers"
300
+ - "--inline-source"
301
+ - "--quiet"
302
+ require_paths:
303
+ - lib
304
+ required_ruby_version: !ruby/object:Gem::Requirement
305
+ requirements:
306
+ - - ">="
307
+ - !ruby/object:Gem::Version
308
+ version: 3.2.0
309
+ required_rubygems_version: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ requirements: []
315
+ rubygems_version: 4.0.20
316
+ specification_version: 4
317
+ summary: "\U0001F48E Placeholder gem for a future Kettle family component."
318
+ test_files: []
metadata.gz.sig ADDED
Binary file