stone_checksums 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50d439eabd48e035c9781ce676235100f7909cc2676f5fd46fd7c97b4e5d3833
4
- data.tar.gz: f6fb43a838287bc1df9031c89ac180c775dd8fa385c9426f7303d2708336414d
3
+ metadata.gz: 65cfc4ad1a568d2c9ee61a9c13ef3630febe4200060f0817904c3f5c7d53de53
4
+ data.tar.gz: 278967e0df204e08600790a08e0ccc09be49688fa5d5e12a8900c244c6a27759
5
5
  SHA512:
6
- metadata.gz: b4b407dac2e053deb48813088fa1c8830d8ccd0e29d6d15fd10555f9dbfc1e863b833c2d20a300a937d23ec9a596e8a9784500de885521ef824e598d8a70d8e3
7
- data.tar.gz: 54d9ca8960394cffc14720d6c03e062a46f165ff803d2aac8daf10797c80d7a438175f66ee9dd4b46ecfdbfb065610ff5d4b111d25dff9f80cf6f879190239be
6
+ metadata.gz: 4d7a5197145c3b7664246082227c2eb4c9eadee2a0e375bb362fb62666aa5dc5002210e4ff75c8b63a6ad2a458cc8f7924fc94c2a3fdc933a984bb23c638a683
7
+ data.tar.gz: afbfdfca0cf76560e83b096a173a4165109d28634faba93168324cf5a414fc918531408d92eac7ef694a290bb2e9de6141571fdf04e295412105aff855f156ca
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -17,19 +17,30 @@ Please file a bug if you notice a violation of semantic versioning.
17
17
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
18
18
 
19
19
  ## [Unreleased]
20
+
20
21
  ### Added
22
+
21
23
  ### Changed
24
+
22
25
  ### Deprecated
26
+
23
27
  ### Removed
28
+
24
29
  ### Fixed
30
+
31
+ - documentation
32
+
25
33
  ### Security
26
34
 
27
35
  ## [1.0.2] - 2025-08-26
36
+
28
37
  - TAG: [v1.0.2][1.0.2t]
29
38
  - COVERAGE: 100.00% -- 97/97 lines in 6 files
30
39
  - BRANCH COVERAGE: 92.86% -- 26/28 branches in 6 files
31
40
  - 68.42% documented
41
+
32
42
  ### Fixed
43
+
33
44
  - gemspec details that got mangled in the switch from gem_checksums.gemspec to stone_checksums.gemspec
34
45
  - spec.required_ruby_version (accidentally bumped from 2.2 to 2.3)
35
46
  - spec.summary
@@ -37,30 +48,42 @@ Please file a bug if you notice a violation of semantic versioning.
37
48
  - spec.homepage
38
49
 
39
50
  ## [1.0.1] - 2025-08-26
51
+
40
52
  - TAG: [v1.0.1][1.0.1t]
41
53
  - COVERAGE: 100.00% -- 97/97 lines in 6 files
42
54
  - BRANCH COVERAGE: 92.86% -- 26/28 branches in 6 files
43
55
  - 68.42% documented
56
+
44
57
  ### Added
58
+
45
59
  - Added proper namespace: StoneChecksums
46
60
  - Namespace now matches gem name according to RubyGems convention
47
61
  - Old Namespace, GemChecksums, will be dropped in next major version
62
+
48
63
  ### Changed
64
+
49
65
  - Improve error help text on old bundler, recommend upgrading
66
+
50
67
  ### Fixed
68
+
51
69
  - Support for bundler >= v2.7, which no longer relies on SOURCE_DATE_EPOCH
52
70
  - NOTE: Bundler v2.7+ defaults to a constant build date in 1980 to make all builds reproducible.
71
+
53
72
  ### Documentation
73
+
54
74
  - Updated README with checksum usage, Bundler version guidance, and env vars.
55
75
  - Added YARD docstrings for public APIs.
56
76
  - Expanded RBS signatures for public constants and methods.
57
77
 
58
78
  ## [1.0.0] - 2025-02-23
79
+
59
80
  - TAG: [v1.0.0][1.0.0t]
60
81
  - COVERAGE: 98.67% -- 74/75 lines in 5 files
61
82
  - BRANCH COVERAGE: 79.17% -- 19/24 branches in 5 files
62
83
  - 38.46% documented
84
+
63
85
  ### Added
86
+
64
87
  - Initial release
65
88
 
66
89
  [Unreleased]: https://gitlab.com/galtzo-floss/stone_checksums/-/compare/v1.0.2...HEAD
data/CITATION.cff ADDED
@@ -0,0 +1,20 @@
1
+ cff-version: 1.2.0
2
+ title: stone_checksums
3
+ message: >-
4
+ If you use this work and you want to cite it,
5
+ then you can use the metadata from this file.
6
+ type: software
7
+ authors:
8
+ - given-names: Peter Hurn
9
+ family-names: Boling
10
+ email: peter@railsbling.com
11
+ affiliation: railsbling.com
12
+ orcid: 'https://orcid.org/0009-0008-8519-441X'
13
+ identifiers:
14
+ - type: url
15
+ value: 'https://github.com/galtzo-floss/stone_checksums'
16
+ description: stone_checksums
17
+ repository-code: 'https://github.com/galtzo-floss/stone_checksums'
18
+ abstract: >-
19
+ stone_checksums
20
+ license: See license file
data/CONTRIBUTING.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Contributing
2
2
 
3
- Bug reports and pull requests are welcome on GitHub, CodeBerg, or [GitLab][🚎src-main].
3
+ Bug reports and pull requests are welcome on [CodeBerg][📜src-cb], [GitLab][📜src-gl], or [GitHub][📜src-gh].
4
4
  This project should be a safe, welcoming space for collaboration, so contributors agree to adhere to
5
5
  the [code of conduct][🤝conduct].
6
6
 
7
7
  To submit a patch, please fork the project, create a patch with tests, and send a pull request.
8
8
 
9
- Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog].
9
+ Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] if you make changes.
10
10
 
11
11
  ## Help out!
12
12
 
@@ -22,6 +22,26 @@ Follow these instructions:
22
22
  6. Make sure to add tests for it. This is important, so it doesn't break in a future release.
23
23
  7. Create new Pull Request.
24
24
 
25
+ ## Executables vs Rake tasks
26
+
27
+ Executables shipped by dependencies, such as stone_checksums, and stone_checksums, are available
28
+ after running `bin/setup`. These include:
29
+
30
+ - gem_checksums
31
+ - kettle-changelog
32
+ - kettle-commit-msg
33
+ - stone_checksums-setup
34
+ - kettle-dvcs
35
+ - kettle-pre-release
36
+ - kettle-readme-backers
37
+ - kettle-release
38
+
39
+ There are many Rake tasks available as well. You can see them by running:
40
+
41
+ ```shell
42
+ bin/rake -T
43
+ ```
44
+
25
45
  ## Environment Variables for Local Development
26
46
 
27
47
  Below are the primary environment variables recognized by stone_checksums (and its integrated tools). Unless otherwise noted, set boolean values to the string "true" to enable.
@@ -60,14 +80,14 @@ For a quick starting point, this repository’s `.envrc` shows sane defaults, an
60
80
 
61
81
  ## Appraisals
62
82
 
63
- From time to time the Appraisal2 gemfiles in `gemfiles/` will need to be updated.
83
+ From time to time the [appraisal2][🚎appraisal2] gemfiles in `gemfiles/` will need to be updated.
64
84
  They are created and updated with the commands:
65
85
 
66
86
  ```console
67
87
  bin/rake appraisal:update
68
88
  ```
69
89
 
70
- When adding an appraisal to CI check the [runner tool cache][🏃‍♂️runner-tool-cache] to see which runner to use.
90
+ When adding an appraisal to CI, check the [runner tool cache][🏃‍♂️runner-tool-cache] to see which runner to use.
71
91
 
72
92
  ## The Reek List
73
93
 
@@ -89,9 +109,10 @@ bundle exec rake test
89
109
 
90
110
  ### Spec organization (required)
91
111
 
92
- - For each class or module under `lib/`, keep all of its unit tests in a single spec file under `spec/` that mirrors the path and file name (e.g., specs for `lib/kettle/dev/release_cli.rb` live in `spec/kettle/dev/release_cli_spec.rb`).
93
- - Do not create ad-hoc "_more" or split spec files for the same class/module. Consolidate all unit tests into the main spec file for that class/module.
94
- - Only integration scenarios that intentionally span multiple classes belong in `spec/integration/`.
112
+ - One spec file per class/module. For each class or module under `lib/`, keep all of its unit tests in a single spec file under `spec/` that mirrors the path and file name exactly: `lib/stone_checksums/release_cli.rb` -> `spec/stone_checksums/release_cli_spec.rb`.
113
+ - Never add a second spec file for the same class/module. Examples of disallowed names: `*_more_spec.rb`, `*_extra_spec.rb`, `*_status_spec.rb`, or any other suffix that still targets the same class. If you find yourself wanting a second file, merge those examples into the canonical spec file for that class/module.
114
+ - Exception: Integration specs that intentionally span multiple classes. Place these under `spec/integration/` (or a clearly named integration folder), and do not directly mirror a single class. Name them after the scenario, not a class.
115
+ - Migration note: If a duplicate spec file exists, move all examples into the canonical file and delete the duplicate. Do not leave stubs or empty files behind.
95
116
 
96
117
  ## Lint It
97
118
 
@@ -114,7 +135,7 @@ For more detailed information about using RuboCop in this project, please see th
114
135
  Never add `# rubocop:disable ...` / `# rubocop:enable ...` comments to code or specs (except when following the few existing `rubocop:disable` patterns for a rule already being disabled elsewhere in the code). Instead:
115
136
 
116
137
  - Prefer configuration-based exclusions when a rule should not apply to certain paths or files (e.g., via `.rubocop.yml`).
117
- - When a violation is temporary and you plan to fix it later, record it in `.rubocop_gradual.lock` using the gradual workflow:
138
+ - When a violation is temporary, and you plan to fix it later, record it in `.rubocop_gradual.lock` using the gradual workflow:
118
139
  - `bundle exec rake rubocop_gradual:autocorrect` (preferred)
119
140
  - `bundle exec rake rubocop_gradual:force_update` (only when you cannot fix the violations immediately)
120
141
 
@@ -134,19 +155,21 @@ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/stone_checksums/-
134
155
 
135
156
  ### One-time, Per-maintainer, Setup
136
157
 
137
- **IMPORTANT**: If you want to sign the build you create,
138
- your public key for signing gems will need to be picked up by the line in the
158
+ **IMPORTANT**: To sign a build,
159
+ a public key for signing gems will need to be picked up by the line in the
139
160
  `gemspec` defining the `spec.cert_chain` (check the relevant ENV variables there).
140
- All releases to RubyGems.org will be signed.
161
+ All releases are signed releases.
141
162
  See: [RubyGems Security Guide][🔒️rubygems-security-guide]
142
163
 
143
- NOTE: To build without signing the gem you must set `SKIP_GEM_SIGNING` to some value in your environment.
164
+ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in the environment.
144
165
 
145
166
  ### To release a new version:
146
167
 
147
168
  #### Automated process
148
169
 
149
- Run `kettle-release`.
170
+ 1. Update version.rb to contain the correct version-to-be-released.
171
+ 2. Run `bundle exec kettle-changelog`.
172
+ 3. Run `bundle exec kettle-release`.
150
173
 
151
174
  #### Manual process
152
175
 
@@ -173,16 +196,18 @@ Run `kettle-release`.
173
196
  12. Sanity check the SHA256, comparing with the output from the `bin/gem_checksums` command:
174
197
  - `sha256sum pkg/<gem name>-<version>.gem`
175
198
  13. Run `bundle exec rake release` which will create a git tag for the version,
176
- push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems]
199
+ push git commits and tags, and push the `.gem` file to the gem host configured in the gemspec.
177
200
 
178
- [🚎src-main]: https://gitlab.com/galtzo-floss/stone_checksums
201
+ [📜src-gl]: https://gitlab.com/galtzo-floss/stone_checksums/
202
+ [📜src-cb]: https://codeberg.org/galtzo-floss/stone_checksums
203
+ [📜src-gh]: https://github.com/galtzo-floss/stone_checksums
179
204
  [🧪build]: https://github.com/galtzo-floss/stone_checksums/actions
180
205
  [🤝conduct]: https://gitlab.com/galtzo-floss/stone_checksums/-/blob/main/CODE_OF_CONDUCT.md
181
206
  [🖐contrib-rocks]: https://contrib.rocks
182
207
  [🖐contributors]: https://github.com/galtzo-floss/stone_checksums/graphs/contributors
183
208
  [🚎contributors-gl]: https://gitlab.com/galtzo-floss/stone_checksums/-/graphs/main
184
209
  [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/stone_checksums
185
- [💎rubygems]: https://rubygems.org
210
+ [💎gem-coop]: https://gem.coop
186
211
  [🔒️rubygems-security-guide]: https://guides.rubygems.org/security/#building-gems
187
212
  [🔒️rubygems-checksums-pr]: https://github.com/rubygems/rubygems/pull/6022
188
213
  [🔒️rubygems-guides-pr]: https://github.com/rubygems/guides/pull/325
@@ -191,4 +216,5 @@ Run `kettle-release`.
191
216
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
192
217
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
193
218
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
219
+ [🚎appraisal2]: https://github.com/appraisal-rb/appraisal2
194
220
  [🏃‍♂️runner-tool-cache]: https://github.com/ruby/ruby-builder/releases/tag/toolcache
data/FUNDING.md ADDED
@@ -0,0 +1,77 @@
1
+ <!-- RELEASE-NOTES-FOOTER-START -->
2
+
3
+ Official Discord 👉️ [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
4
+
5
+ Many paths lead to being a sponsor or a backer of this project. Are you on such a path?
6
+
7
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal]
8
+
9
+ [![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]
10
+
11
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
12
+ [⛳liberapay]: https://liberapay.com/pboling/donate
13
+ [🖇osc-backers]: https://opencollective.com/galtzo-floss#backer
14
+ [🖇osc-backers-i]: https://opencollective.com/galtzo-floss/backers/badge.svg?style=flat
15
+ [🖇osc-sponsors]: https://opencollective.com/galtzo-floss#sponsor
16
+ [🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
17
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
18
+ [🖇sponsor]: https://github.com/sponsors/pboling
19
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
20
+ [🖇polar]: https://polar.sh/pboling
21
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
22
+ [🖇kofi]: https://ko-fi.com/O5O86SNP4
23
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
24
+ [🖇patreon]: https://patreon.com/galtzo
25
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
26
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
27
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
28
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
29
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
30
+ [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=flat
31
+
32
+ <!-- RELEASE-NOTES-FOOTER-END -->
33
+
34
+ # 🤑 Request for Help
35
+
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.
39
+ I'm hoping to be able to pay for my kids' health insurance this month,
40
+ so if you value the work I am doing, I need your support.
41
+ Please consider sponsoring me or the project.
42
+
43
+ To join the community or get help 👇️ Join the Discord.
44
+
45
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
46
+
47
+ To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
48
+
49
+ [![Sponsor galtzo-floss/stone_checksums 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]
50
+
51
+ # Another Way to Support Open Source Software
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).
57
+
58
+ 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
+
60
+ 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.
61
+
62
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
63
+
64
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
65
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/galtzo-floss
66
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss
67
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/galtzo-floss
68
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/galtzo-floss?style=for-the-badge
69
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss?style=for-the-badge
70
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/galtzo-floss?style=for-the-badge
71
+ [🖇osc]: https://opencollective.com/galtzo-floss
72
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
73
+ [🖇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
74
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
75
+ [🖇floss-funding.dev]: https://floss-funding.dev
76
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
77
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
data/README.md CHANGED
@@ -1,3 +1,32 @@
1
+ | 📍 NOTE |
2
+ |-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
3
+ | RubyGems (the [GitHub org][rubygems-org], not the website) [suffered][draper-security] a [hostile takeover][ellen-takeover] in September 2025. |
4
+ | Ultimately [4 maintainers][simi-removed] were [hard removed][martin-removed] and a reason has been given for only 1 of those, while 2 others resigned in protest. |
5
+ | It is a [complicated story][draper-takeover] which is difficult to [parse quickly][draper-lies]. |
6
+ | I'm adding notes like this to gems because I [don't condone theft][draper-theft] of repositories or gems from their rightful owners. |
7
+ | If a similar theft happened with my repos/gems, I'd hope some would stand up for me. |
8
+ | Disenfranchised former-maintainers have started [gem.coop][gem-coop]. |
9
+ | Once available I will publish there exclusively; unless RubyCentral makes amends with the community. |
10
+ | The ["Technology for Humans: Joel Draper"][reinteractive-podcast] podcast episode by [reinteractive][reinteractive] is the most cogent summary I'm aware of. |
11
+ | See [here][gem-naming], [here][gem-coop] and [here][martin-ann] for more info on what comes next. |
12
+ | What I'm doing: A (WIP) proposal for [bundler/gem scopes][gem-scopes], and a (WIP) proposal for a federated [gem server][gem-server]. |
13
+
14
+ [rubygems-org]: https://github.com/rubygems/
15
+ [draper-security]: https://joel.drapper.me/p/ruby-central-security-measures/
16
+ [draper-takeover]: https://joel.drapper.me/p/ruby-central-takeover/
17
+ [ellen-takeover]: https://pup-e.com/blog/goodbye-rubygems/
18
+ [simi-removed]: https://www.reddit.com/r/ruby/s/gOk42POCaV
19
+ [martin-removed]: https://bsky.app/profile/martinemde.com/post/3m3occezxxs2q
20
+ [draper-lies]: https://joel.drapper.me/p/ruby-central-fact-check/
21
+ [draper-theft]: https://joel.drapper.me/p/ruby-central/
22
+ [reinteractive]: https://reinteractive.com/ruby-on-rails
23
+ [gem-coop]: https://gem.coop
24
+ [gem-naming]: https://github.com/gem-coop/gem.coop/issues/12
25
+ [martin-ann]: https://martinemde.com/2025/10/05/announcing-gem-coop.html
26
+ [gem-scopes]: https://github.com/galtzo-floss/bundle-namespace
27
+ [gem-server]: https://github.com/galtzo-floss/gem-server
28
+ [reinteractive-podcast]: https://youtu.be/_H4qbtC5qzU?si=BvuBU90R2wAqD2E6
29
+
1
30
  [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-i]][🖼️galtzo-discord] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![stone_checksums Logo by Aboling0, CC BY-SA 4.0][🖼️stone_checksums-i]][🖼️stone_checksums]
2
31
 
3
32
  [🖼️galtzo-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
@@ -9,15 +38,15 @@
9
38
 
10
39
  # 🗿 StoneChecksums - Generate SHA-256 and SHA-512 checksums of a RubyGem
11
40
 
12
- [![Version][👽versioni]][👽version] [![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]
41
+ [![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] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
13
42
 
14
- If ☝️ `ci_badges.map(&:color).detect { it != "green"}` [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
43
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
15
44
 
16
45
  ---
17
46
 
18
- OTOH, if `ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS is now my full-time job.
47
+ `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
48
 
20
- [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![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]
49
+ [![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
21
50
 
22
51
  ## 🌻 Synopsis
23
52
 
@@ -34,17 +63,39 @@ bin/generate_checksums
34
63
 
35
64
  ## 💡 Info you can shake a stick at
36
65
 
66
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
67
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
68
+ | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
69
+ | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] ![Truffle Ruby 23.0 Compat][💎truby-23.0i] <br/> [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
70
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
71
+ | Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] <br/> [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
72
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
73
+ | 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] |
74
+ | 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] |
75
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![Compatible with Apache Software Projects: Verified by SkyWalking Eyes][📄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] |
76
+ | 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] |
77
+ | 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] |
78
+ | `...` 💖 | [![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] |
79
+
80
+ ### Compatibility
81
+
82
+ Compatible with MRI Ruby 2.2.0+, and concordant releases of JRuby, and TruffleRuby.
83
+
84
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
85
+ |------------------------------------------------|--------------------------------------------------------|
86
+ | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
87
+
37
88
  ### Federated DVCS
38
89
 
39
90
  <details>
40
- <summary>Find this repo on other forges (Coming soon!)</summary>
91
+ <summary>Find this repo on federated forges</summary>
41
92
 
42
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
43
- |-------------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
44
- | 🧪 [kettle-rb/kettle-dev on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
45
- | 🧊 [kettle-rb/kettle-dev on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
46
- | 🐙 [kettle-rb/kettle-dev on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | | 💯 Full Matrix | [💚][gh-discussions] |
47
- | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
93
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
94
+ |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
95
+ | 🧪 [galtzo-floss/stone_checksums on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
96
+ | 🧊 [galtzo-floss/stone_checksums on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
97
+ | 🐙 [galtzo-floss/stone_checksums on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
98
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
48
99
 
49
100
  </details>
50
101
 
@@ -52,47 +103,40 @@ bin/generate_checksums
52
103
 
53
104
  ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/stone_checksums)](https://tidelift.com/subscription/pkg/rubygems-stone_checksums?utm_source=rubygems-stone_checksums&utm_medium=referral&utm_campaign=readme)
54
105
 
106
+ Available as part of the Tidelift Subscription.
107
+
55
108
  <details>
56
109
  <summary>Need enterprise-level guarantees?</summary>
57
110
 
111
+ 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.
112
+
58
113
  [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
59
114
 
60
- - 💡Subscribe for support guarantees covering _all_ FLOSS dependencies
115
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
61
116
  - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
62
117
  - 💡Tidelift pays maintainers to maintain the software you depend on!<br/>📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is "[never gonna let you down][🧮kloc]", and *supports* open source maintainers
63
118
 
64
119
  Alternatively:
65
120
 
66
- - [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
121
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
67
122
  - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
68
123
  - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
69
124
 
70
125
  </details>
71
126
 
72
- | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
73
- |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
74
- | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
75
- | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] <br/> [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎9-t-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
76
- | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
77
- | Works with MRI Ruby 2 | ![Ruby 2.0 Compat][💎ruby-2.0i] ![Ruby 2.1 Compat][💎ruby-2.1i] ![Ruby 2.2 Compat][💎ruby-2.2i] <br/> [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
78
- | Works with MRI Ruby 1 | ![Ruby 1.9 Compat][💎ruby-1.9i] |
79
- | 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] |
80
- | 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] [![Wiki][📜wiki-img]][📜wiki] |
81
- | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
82
- | 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] |
83
- | Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
84
- | 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] |
85
- | `...` 💖 | [![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] |
86
-
87
127
  ## ✨ Installation
88
128
 
89
129
  Install the gem and add to the application's Gemfile by executing:
90
130
 
91
- $ bundle add stone_checksums
131
+ ```console
132
+ bundle add stone_checksums
133
+ ```
92
134
 
93
135
  If bundler is not being used to manage dependencies, install the gem by executing:
94
136
 
95
- $ gem install stone_checksums
137
+ ```console
138
+ gem install stone_checksums
139
+ ```
96
140
 
97
141
  ### 🔒 Secure Installation
98
142
 
@@ -200,19 +244,25 @@ and [Tidelift][🏙️entsup-tidelift].
200
244
 
201
245
  ### Open Collective for Individuals
202
246
 
247
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/galtzo-floss#backer)]
248
+
249
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
250
+
203
251
  <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
204
252
  No backers yet. Be the first!
205
253
  <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
206
254
 
207
- Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/galtzo-floss#backer)]
208
-
209
255
  ### Open Collective for Organizations
210
256
 
257
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/galtzo-floss#sponsor)]
258
+
259
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
260
+
211
261
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
212
262
  No sponsors yet. Be the first!
213
263
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
214
264
 
215
- Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/galtzo-floss#sponsor)]
265
+ [kettle-readme-backers]: https://github.com/galtzo-floss/stone_checksums/blob/main/exe/kettle-readme-backers
216
266
 
217
267
  ### Another way to support open-source
218
268
 
@@ -227,7 +277,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
227
277
 
228
278
  **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
229
279
 
230
- [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![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]
280
+ [![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]
231
281
 
232
282
  ## 🔐 Security
233
283
 
@@ -249,11 +299,11 @@ See [CONTRIBUTING.md][🤝contributing].
249
299
 
250
300
  ### Code Coverage
251
301
 
252
- [![Coverage Graph][🔑codecov-g]][🔑codecov]
302
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
253
303
 
254
- [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
304
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
255
305
 
256
- [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov]
306
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
257
307
 
258
308
  ### 🪇 Code of Conduct
259
309
 
@@ -329,7 +379,7 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
329
379
 
330
380
  <ul>
331
381
  <li>
332
- Copyright (c) 2023, 2025 Peter H. Boling, of
382
+ Copyright (c) 2022 - 2025 Peter H. Boling, of
333
383
  <a href="https://discord.gg/3qme4XHNKN">
334
384
  Galtzo.com
335
385
  <picture>
@@ -341,31 +391,35 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
341
391
 
342
392
  ## 🤑 A request for help
343
393
 
344
- Maintainers have teeth, and need to pay their dentists.
345
- After getting laid off in an RIF in March, and filled with many dozens of rejections,
346
- I'm now spending ~80 hours a week building open source tools.
394
+ Maintainers have teeth and need to pay their dentists.
395
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
396
+ I began spending most of my time building open source tools.
347
397
  I'm hoping to be able to pay for my kids' health insurance this month,
348
398
  so if you value the work I am doing, I need your support.
349
399
  Please consider sponsoring me or the project.
350
400
 
351
- [![Sponsor galtzo-floss/stone_checksums 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]
401
+ To join the community or get help 👇️ Join the Discord.
352
402
 
353
- To say "thanks for maintaining such a great tool" 👇️ Join the Discord or ☝️ send money.
403
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
354
404
 
355
- To join the community or get help 👇️ Join the Discord.
405
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
356
406
 
357
- [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
407
+ [![Sponsor galtzo-floss/stone_checksums 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]
358
408
 
359
409
  ### Please give the project a star ⭐ ♥.
360
410
 
361
411
  Thanks for RTFM. ☺️
362
412
 
363
- [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611
413
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
364
414
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
365
415
  [⛳liberapay]: https://liberapay.com/pboling/donate
366
416
  [🖇osc-all-img]: https://img.shields.io/opencollective/all/galtzo-floss
367
417
  [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss
368
418
  [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/galtzo-floss
419
+ [🖇osc-backers]: https://opencollective.com/galtzo-floss#backer
420
+ [🖇osc-backers-i]: https://opencollective.com/galtzo-floss/backers/badge.svg?style=flat
421
+ [🖇osc-sponsors]: https://opencollective.com/galtzo-floss#sponsor
422
+ [🖇osc-sponsors-i]: https://opencollective.com/galtzo-floss/sponsors/badge.svg?style=flat
369
423
  [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/galtzo-floss?style=for-the-badge
370
424
  [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/galtzo-floss?style=for-the-badge
371
425
  [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/galtzo-floss?style=for-the-badge
@@ -373,13 +427,13 @@ Thanks for RTFM. ☺️
373
427
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
374
428
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
375
429
  [🖇sponsor]: https://github.com/sponsors/pboling
376
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg
430
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
377
431
  [🖇polar]: https://polar.sh/pboling
378
- [🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg
432
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
379
433
  [🖇kofi]: https://ko-fi.com/O5O86SNP4
380
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg
434
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
381
435
  [🖇patreon]: https://patreon.com/galtzo
382
- [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-a51611.svg?style=flat
436
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
383
437
  [🖇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
384
438
  [🖇buyme]: https://www.buymeacoffee.com/pboling
385
439
  [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
@@ -388,25 +442,29 @@ Thanks for RTFM. ☺️
388
442
  [🖇floss-funding.dev]: https://floss-funding.dev
389
443
  [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
390
444
  [✉️discord-invite]: https://discord.gg/3qme4XHNKN
391
- [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
445
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
446
+ [✉️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
447
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
392
448
 
393
449
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
394
450
  [⛳️gem-namespace]: https://github.com/galtzo-floss/stone_checksums
395
451
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-StoneChecksums-3C2D2D.svg?style=square&logo=ruby&logoColor=white
396
- [⛳️gem-name]: https://rubygems.org/gems/stone_checksums
452
+ [⛳️gem-name]: https://bestgems.org/gems/stone_checksums
397
453
  [⛳️name-img]: https://img.shields.io/badge/name-stone__checksums-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
454
+ [⛳️tag-img]: https://img.shields.io/github/tag/galtzo-floss/stone_checksums.svg
455
+ [⛳️tag]: http://github.com/galtzo-floss/stone_checksums/releases
398
456
  [🚂maint-blog]: http://www.railsbling.com/tags/stone_checksums
399
457
  [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
400
458
  [🚂maint-contact]: http://www.railsbling.com/contact
401
459
  [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
402
460
  [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
403
461
  [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
404
- [💖✌️wellfound]: https://wellfound.com/u/peter-boling/u/peter-boling
462
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
405
463
  [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
406
464
  [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
407
465
  [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
408
466
  [💖🐘ruby-mast]: https://ruby.social/@galtzo
409
- [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https%3A%2F%2Fruby.social&style=flat&logo=mastodon&label=Ruby%20%40galtzo
467
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
410
468
  [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
411
469
  [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
412
470
  [💖🌳linktree]: https://linktr.ee/galtzo
@@ -436,22 +494,24 @@ Thanks for RTFM. ☺️
436
494
  [📜src-gh]: https://github.com/galtzo-floss/stone_checksums
437
495
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
438
496
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
439
- [📜wiki]: https://gitlab.com/galtzo-floss/stone_checksums/-/wikis/home
440
- [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
441
- [👽dl-rank]: https://rubygems.org/gems/stone_checksums
497
+ [📜gl-wiki]: https://gitlab.com/galtzo-floss/stone_checksums/-/wikis/home
498
+ [📜gh-wiki]: https://github.com/galtzo-floss/stone_checksums/wiki
499
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
500
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
501
+ [👽dl-rank]: https://bestgems.org/gems/stone_checksums
442
502
  [👽dl-ranki]: https://img.shields.io/gem/rd/stone_checksums.svg
443
503
  [👽oss-help]: https://www.codetriage.com/galtzo-floss/stone_checksums
444
504
  [👽oss-helpi]: https://www.codetriage.com/galtzo-floss/stone_checksums/badges/users.svg
445
- [👽version]: https://rubygems.org/gems/stone_checksums
505
+ [👽version]: https://bestgems.org/gems/stone_checksums
446
506
  [👽versioni]: https://img.shields.io/gem/v/stone_checksums.svg
447
- [🔑qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums
448
- [🔑qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums/maintainability.svg
449
- [🔑qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums/metrics/code?sort=coverageRating
450
- [🔑qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums/coverage.svg
451
- [🔑codecov]: https://codecov.io/gh/galtzo-floss/stone_checksums
452
- [🔑codecovi]: https://codecov.io/gh/galtzo-floss/stone_checksums/graph/badge.svg
453
- [🔑coveralls]: https://coveralls.io/github/galtzo-floss/stone_checksums?branch=main
454
- [🔑coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/stone_checksums/badge.svg?branch=main
507
+ [🏀qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums
508
+ [🏀qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums/maintainability.svg
509
+ [🏀qlty-cov]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums/metrics/code?sort=coverageRating
510
+ [🏀qlty-covi]: https://qlty.sh/gh/galtzo-floss/projects/stone_checksums/coverage.svg
511
+ [🏀codecov]: https://codecov.io/gh/galtzo-floss/stone_checksums
512
+ [🏀codecovi]: https://codecov.io/gh/galtzo-floss/stone_checksums/graph/badge.svg
513
+ [🏀coveralls]: https://coveralls.io/github/galtzo-floss/stone_checksums?branch=main
514
+ [🏀coveralls-img]: https://coveralls.io/repos/github/galtzo-floss/stone_checksums/badge.svg?branch=main
455
515
  [🖐codeQL]: https://github.com/galtzo-floss/stone_checksums/security/code-scanning
456
516
  [🖐codeQL-img]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/codeql-analysis.yml/badge.svg
457
517
  [🚎1-an-wf]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/ancient.yml
@@ -476,13 +536,14 @@ Thanks for RTFM. ☺️
476
536
  [🚎10-j-wfi]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/jruby.yml/badge.svg
477
537
  [🚎11-c-wf]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/current.yml
478
538
  [🚎11-c-wfi]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/current.yml/badge.svg
539
+ [🚎12-crh-wf]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/dep-heads.yml
540
+ [🚎12-crh-wfi]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/dep-heads.yml/badge.svg
479
541
  [🚎13-🔒️-wf]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/locked_deps.yml
480
542
  [🚎13-🔒️-wfi]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/locked_deps.yml/badge.svg
481
543
  [🚎14-🔓️-wf]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/unlocked_deps.yml
482
544
  [🚎14-🔓️-wfi]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/unlocked_deps.yml/badge.svg
483
- [💎ruby-1.9i]: https://img.shields.io/badge/Ruby-1.9_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
484
- [💎ruby-2.0i]: https://img.shields.io/badge/Ruby-2.0_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
485
- [💎ruby-2.1i]: https://img.shields.io/badge/Ruby-2.1_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
545
+ [🚎15-🪪-wf]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/license-eye.yml
546
+ [🚎15-🪪-wfi]: https://github.com/galtzo-floss/stone_checksums/actions/workflows/license-eye.yml/badge.svg
486
547
  [💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
487
548
  [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
488
549
  [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
@@ -496,7 +557,7 @@ Thanks for RTFM. ☺️
496
557
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
497
558
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
498
559
  [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
499
- [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
560
+ [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=pink
500
561
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
501
562
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
502
563
  [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
@@ -514,7 +575,7 @@ Thanks for RTFM. ☺️
514
575
  [🤝cb-pulls]: https://codeberg.org/galtzo-floss/stone_checksums/pulls
515
576
  [🤝cb-donate]: https://donate.codeberg.org/
516
577
  [🤝contributing]: CONTRIBUTING.md
517
- [🔑codecov-g]: https://codecov.io/gh/galtzo-floss/stone_checksums/graphs/tree.svg
578
+ [🏀codecov-g]: https://codecov.io/gh/galtzo-floss/stone_checksums/graphs/tree.svg
518
579
  [🖐contrib-rocks]: https://contrib.rocks
519
580
  [🖐contributors]: https://github.com/galtzo-floss/stone_checksums/graphs/contributors
520
581
  [🖐contributors-img]: https://contrib.rocks/image?repo=galtzo-floss/stone_checksums
@@ -530,23 +591,25 @@ Thanks for RTFM. ☺️
530
591
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
531
592
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
532
593
  [📌gitmoji]:https://gitmoji.dev
533
- [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
594
+ [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
534
595
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
535
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.097-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
596
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.112-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
536
597
  [🔐security]: SECURITY.md
537
598
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
538
599
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
539
600
  [📄license]: LICENSE.txt
540
601
  [📄license-ref]: https://opensource.org/licenses/MIT
541
602
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
603
+ [📄license-compat]: https://dev.to/galtzo/how-to-check-license-compatibility-41h0
604
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
542
605
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
543
606
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
544
607
  [🚎yard-current]: http://rubydoc.info/gems/stone_checksums
545
- [🚎yard-head]: https://rspec-stubbed-env.galtzo.com
608
+ [🚎yard-head]: https://stone-checksums.galtzo.com
546
609
  [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
547
610
  [💎SHA_checksums]: https://gitlab.com/galtzo-floss/stone_checksums/-/tree/main/checksums
548
611
  [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
549
- [💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
612
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
550
613
  [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
551
614
  [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
552
615
  [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
data/REEK ADDED
File without changes
data/RUBOCOP.md ADDED
@@ -0,0 +1,71 @@
1
+ # RuboCop Usage Guide
2
+
3
+ ## Overview
4
+
5
+ A tale of two RuboCop plugin gems.
6
+
7
+ ### RuboCop Gradual
8
+
9
+ This project uses `rubocop_gradual` instead of vanilla RuboCop for code style checking. The `rubocop_gradual` tool allows for gradual adoption of RuboCop rules by tracking violations in a lock file.
10
+
11
+ ### RuboCop LTS
12
+
13
+ This project uses `rubocop-lts` to ensure, on a best-effort basis, compatibility with Ruby >= 1.9.2.
14
+ RuboCop rules are meticulously configured by the `rubocop-lts` family of gems to ensure that a project is compatible with a specific version of Ruby. See: https://rubocop-lts.gitlab.io for more.
15
+
16
+ ## Checking RuboCop Violations
17
+
18
+ To check for RuboCop violations in this project, always use:
19
+
20
+ ```bash
21
+ bundle exec rake rubocop_gradual:check
22
+ ```
23
+
24
+ **Do not use** the standard RuboCop commands like:
25
+ - `bundle exec rubocop`
26
+ - `rubocop`
27
+
28
+ ## Understanding the Lock File
29
+
30
+ The `.rubocop_gradual.lock` file tracks all current RuboCop violations in the project. This allows the team to:
31
+
32
+ 1. Prevent new violations while gradually fixing existing ones
33
+ 2. Track progress on code style improvements
34
+ 3. Ensure CI builds don't fail due to pre-existing violations
35
+
36
+ ## Common Commands
37
+
38
+ - **Check violations**
39
+ - `bundle exec rake rubocop_gradual`
40
+ - `bundle exec rake rubocop_gradual:check`
41
+ - **(Safe) Autocorrect violations, and update lockfile if no new violations**
42
+ - `bundle exec rake rubocop_gradual:autocorrect`
43
+ - **Force update the lock file (w/o autocorrect) to match violations present in code**
44
+ - `bundle exec rake rubocop_gradual:force_update`
45
+
46
+ ## Workflow
47
+
48
+ 1. Before submitting a PR, run `bundle exec rake rubocop_gradual:autocorrect`
49
+ a. or just the default `bundle exec rake`, as autocorrection is a pre-requisite of the default task.
50
+ 2. If there are new violations, either:
51
+ - Fix them in your code
52
+ - Run `bundle exec rake rubocop_gradual:force_update` to update the lock file (only for violations you can't fix immediately)
53
+ 3. Commit the updated `.rubocop_gradual.lock` file along with your changes
54
+
55
+ ## Never add inline RuboCop disables
56
+
57
+ Do not add inline `rubocop:disable` / `rubocop:enable` comments anywhere in the codebase (including specs, except when following the few existing `rubocop:disable` patterns for a rule already being disabled elsewhere in the code). We handle exceptions in two supported ways:
58
+
59
+ - Permanent/structural exceptions: prefer adjusting the RuboCop configuration (e.g., in `.rubocop.yml`) to exclude a rule for a path or file pattern when it makes sense project-wide.
60
+ - Temporary exceptions while improving code: record the current violations in `.rubocop_gradual.lock` via the gradual workflow:
61
+ - `bundle exec rake rubocop_gradual:autocorrect` (preferred; will autocorrect what it can and update the lock only if no new violations were introduced)
62
+ - If needed, `bundle exec rake rubocop_gradual:force_update` (as a last resort when you cannot fix the newly reported violations immediately)
63
+
64
+ In general, treat the rules as guidance to follow; fix violations rather than ignore them. For example, RSpec conventions in this project expect `described_class` to be used in specs that target a specific class under test.
65
+
66
+ ## Benefits of rubocop_gradual
67
+
68
+ - Allows incremental adoption of code style rules
69
+ - Prevents CI failures due to pre-existing violations
70
+ - Provides a clear record of code style debt
71
+ - Enables focused efforts on improving code quality over time
data/lib/gem_checksums.rb CHANGED
@@ -25,31 +25,31 @@ module GemChecksums
25
25
  GIT_DRY_RUN_ENV = ENV.fetch("GEM_CHECKSUMS_GIT_DRY_RUN", "false").casecmp("true") == 0
26
26
  CHECKSUMS_DIR = ENV.fetch("GEM_CHECKSUMS_CHECKSUMS_DIR", "checksums")
27
27
  PACKAGE_DIR = ENV.fetch("GEM_CHECKSUMS_PACKAGE_DIR", "pkg")
28
- BUILD_TIME_WARNING = <<~BUILD_TIME_WARNING
29
- WARNING: Build time not provided via environment variable SOURCE_DATE_EPOCH.
30
- When using Bundler < 2.7.0, you must set SOURCE_DATE_EPOCH *before* building
31
- the gem to ensure consistent SHA-256 & SHA-512 checksums.
32
-
33
- PREFERRED: Upgrade to Bundler >= 2.7.0, which uses a constant timestamp for gem builds,
34
- making SOURCE_DATE_EPOCH unnecessary for reproducible checksums.
35
-
36
- IMPORTANT: If you choose to set the build time via SOURCE_DATE_EPOCH,
37
- you must re-build the gem, i.e. `bundle exec rake build` or `gem build`.
38
-
39
- How to set the build time (only needed for Bundler < 2.7.0):
40
-
41
- In zsh shell:
42
- - export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH
43
- - If the echo above has no output, then it didn't work.
44
- - Note that you'll need the `zsh/datetime` module enabled.
45
-
46
- In fish shell:
47
- - set -x SOURCE_DATE_EPOCH (date +%s)
48
- - echo $SOURCE_DATE_EPOCH
49
-
50
- In bash shell:
51
- - export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH
52
-
28
+ BUILD_TIME_WARNING = <<-BUILD_TIME_WARNING
29
+ WARNING: Build time not provided via environment variable SOURCE_DATE_EPOCH.
30
+ When using Bundler < 2.7.0, you must set SOURCE_DATE_EPOCH *before* building
31
+ the gem to ensure consistent SHA-256 & SHA-512 checksums.
32
+
33
+ PREFERRED: Upgrade to Bundler >= 2.7.0, which uses a constant timestamp for gem builds,
34
+ making SOURCE_DATE_EPOCH unnecessary for reproducible checksums.
35
+
36
+ IMPORTANT: If you choose to set the build time via SOURCE_DATE_EPOCH,
37
+ you must re-build the gem, i.e. `bundle exec rake build` or `gem build`.
38
+
39
+ How to set the build time (only needed for Bundler < 2.7.0):
40
+
41
+ In zsh shell:
42
+ - export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH
43
+ - If the echo above has no output, then it didn't work.
44
+ - Note that you'll need the `zsh/datetime` module enabled.
45
+
46
+ In fish shell:
47
+ - set -x SOURCE_DATE_EPOCH (date +%s)
48
+ - echo $SOURCE_DATE_EPOCH
49
+
50
+ In bash shell:
51
+ - export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH
52
+
53
53
  BUILD_TIME_WARNING
54
54
 
55
55
  # Make this gem's rake tasks available in your Rakefile:
@@ -108,11 +108,11 @@ module GemChecksums
108
108
 
109
109
  unless proceed
110
110
  # Non-interactive prompt: advise and abort
111
- prompt_msg = <<~PROMPT
112
- Detected Bundler #{bundler_ver || "(unknown)"} which is older than 2.7.0.
113
- For reproducible builds without SOURCE_DATE_EPOCH, please update Bundler to >= 2.7.0.
114
- If you still want to proceed with this older Bundler, you must set SOURCE_DATE_EPOCH and re-run.
115
- Tip: set GEM_CHECKSUMS_ASSUME_YES=true to proceed non-interactively (still requires SOURCE_DATE_EPOCH).
111
+ prompt_msg = <<-PROMPT
112
+ Detected Bundler #{bundler_ver || "(unknown)"} which is older than 2.7.0.
113
+ For reproducible builds without SOURCE_DATE_EPOCH, please update Bundler to >= 2.7.0.
114
+ If you still want to proceed with this older Bundler, you must set SOURCE_DATE_EPOCH and re-run.
115
+ Tip: set GEM_CHECKSUMS_ASSUME_YES=true to proceed non-interactively (still requires SOURCE_DATE_EPOCH).
116
116
  PROMPT
117
117
  warn(prompt_msg)
118
118
  # Continue to enforce SOURCE_DATE_EPOCH below; if not set, this will raise.
@@ -174,34 +174,34 @@ module GemChecksums
174
174
 
175
175
  version = gem_name[VERSION_REGEX]
176
176
 
177
- git_cmd = <<~GIT_MSG.rstrip
178
- git add #{CHECKSUMS_DIR}/* && \
179
- git commit #{git_dry_run_flag} -m "🔒️ Checksums for v#{version}"
177
+ git_cmd = <<-GIT_MSG.rstrip
178
+ git add #{CHECKSUMS_DIR}/* && \
179
+ git commit #{git_dry_run_flag} -m "🔒️ Checksums for v#{version}"
180
180
  GIT_MSG
181
181
 
182
182
  if git_dry_run_flag
183
- git_cmd += <<~CLEANUP_MSG
184
- && \
185
- echo "Cleaning up in dry run mode" && \
186
- git reset #{digest512_64bit_path} && \
187
- git reset #{digest256_32bit_path} && \
188
- rm -f #{digest512_64bit_path} && \
189
- rm -f #{digest256_32bit_path}
183
+ git_cmd += <<-CLEANUP_MSG
184
+ && \
185
+ echo "Cleaning up in dry run mode" && \
186
+ git reset #{digest512_64bit_path} && \
187
+ git reset #{digest256_32bit_path} && \
188
+ rm -f #{digest512_64bit_path} && \
189
+ rm -f #{digest256_32bit_path}
190
190
  CLEANUP_MSG
191
191
  end
192
192
 
193
- puts <<~RESULTS
194
- [ GEM: #{gem_name} ]
195
- [ VERSION: #{version} ]
196
- [ GEM PKG LOCATION: #{gem_pkg} ]
197
- [ CHECKSUM SHA-256: #{digest256_32bit} ]
198
- [ CHECKSUM SHA-512: #{digest512_64bit} ]
199
- [ CHECKSUM SHA-256 PATH: #{digest256_32bit_path} ]
200
- [ CHECKSUM SHA-512 PATH: #{digest512_64bit_path} ]
201
-
202
- ... Running ...
203
-
204
- #{git_cmd}
193
+ puts <<-RESULTS
194
+ [ GEM: #{gem_name} ]
195
+ [ VERSION: #{version} ]
196
+ [ GEM PKG LOCATION: #{gem_pkg} ]
197
+ [ CHECKSUM SHA-256: #{digest256_32bit} ]
198
+ [ CHECKSUM SHA-512: #{digest512_64bit} ]
199
+ [ CHECKSUM SHA-256 PATH: #{digest256_32bit_path} ]
200
+ [ CHECKSUM SHA-512 PATH: #{digest512_64bit_path} ]
201
+
202
+ ... Running ...
203
+
204
+ #{git_cmd}
205
205
  RESULTS
206
206
 
207
207
  if git_dry_run_flag
@@ -6,6 +6,6 @@ module StoneChecksums
6
6
  module Version
7
7
  # Current gem version
8
8
  # @return [String]
9
- VERSION = "1.0.2"
9
+ VERSION = "1.0.3"
10
10
  end
11
11
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stone_checksums
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.1'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.1.8
49
+ version: 1.1.9
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,9 +56,85 @@ dependencies:
56
56
  version: '1.1'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.1.8
59
+ version: 1.1.9
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: kettle-dev
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.1'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '1.1'
74
+ - !ruby/object:Gem::Dependency
75
+ name: bundler-audit
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 0.9.2
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: 0.9.2
88
+ - !ruby/object:Gem::Dependency
89
+ name: rake
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '13.0'
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '13.0'
102
+ - !ruby/object:Gem::Dependency
103
+ name: require_bench
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '1.0'
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 1.0.4
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '1.0'
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 1.0.4
122
+ - !ruby/object:Gem::Dependency
123
+ name: appraisal2
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '3.0'
129
+ type: :development
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: '3.0'
136
+ - !ruby/object:Gem::Dependency
137
+ name: kettle-test
62
138
  requirement: !ruby/object:Gem::Requirement
63
139
  requirements:
64
140
  - - "~>"
@@ -66,7 +142,7 @@ dependencies:
66
142
  version: '1.0'
67
143
  - - ">="
68
144
  - !ruby/object:Gem::Version
69
- version: 1.0.10
145
+ version: 1.0.6
70
146
  type: :development
71
147
  prerelease: false
72
148
  version_requirements: !ruby/object:Gem::Requirement
@@ -76,27 +152,41 @@ dependencies:
76
152
  version: '1.0'
77
153
  - - ">="
78
154
  - !ruby/object:Gem::Version
79
- version: 1.0.10
155
+ version: 1.0.6
80
156
  - !ruby/object:Gem::Dependency
81
- name: rspec-pending_for
157
+ name: ruby-progressbar
82
158
  requirement: !ruby/object:Gem::Requirement
83
159
  requirements:
84
160
  - - "~>"
85
161
  - !ruby/object:Gem::Version
86
- version: '0.1'
162
+ version: '1.13'
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '1.13'
170
+ - !ruby/object:Gem::Dependency
171
+ name: gitmoji-regex
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '1.0'
87
177
  - - ">="
88
178
  - !ruby/object:Gem::Version
89
- version: 0.1.18
179
+ version: 1.0.3
90
180
  type: :development
91
181
  prerelease: false
92
182
  version_requirements: !ruby/object:Gem::Requirement
93
183
  requirements:
94
184
  - - "~>"
95
185
  - !ruby/object:Gem::Version
96
- version: '0.1'
186
+ version: '1.0'
97
187
  - - ">="
98
188
  - !ruby/object:Gem::Version
99
- version: 0.1.18
189
+ version: 1.0.3
100
190
  description: "\U0001F5FF Generate both SHA256 & SHA512 checksums into the checksums
101
191
  directory, and git commit them.\n gem install stone_checksums\nThen, use the rake
102
192
  task or the script:\n rake build:generate_checksums\n gem_checksums\nControl options
@@ -109,17 +199,25 @@ executables:
109
199
  extensions: []
110
200
  extra_rdoc_files:
111
201
  - CHANGELOG.md
202
+ - CITATION.cff
112
203
  - CODE_OF_CONDUCT.md
113
204
  - CONTRIBUTING.md
205
+ - FUNDING.md
114
206
  - LICENSE.txt
115
207
  - README.md
208
+ - REEK
209
+ - RUBOCOP.md
116
210
  - SECURITY.md
117
211
  files:
118
212
  - CHANGELOG.md
213
+ - CITATION.cff
119
214
  - CODE_OF_CONDUCT.md
120
215
  - CONTRIBUTING.md
216
+ - FUNDING.md
121
217
  - LICENSE.txt
122
218
  - README.md
219
+ - REEK
220
+ - RUBOCOP.md
123
221
  - SECURITY.md
124
222
  - exe/gem_checksums
125
223
  - lib/gem_checksums.rb
@@ -135,10 +233,10 @@ licenses:
135
233
  - MIT
136
234
  metadata:
137
235
  homepage_uri: https://stone-checksums.galtzo.com/
138
- source_code_uri: https://github.com/galtzo-floss/stone_checksums/tree/v1.0.2
139
- changelog_uri: https://github.com/galtzo-floss/stone_checksums/blob/v1.0.2/CHANGELOG.md
236
+ source_code_uri: https://github.com/galtzo-floss/stone_checksums/tree/v1.0.3
237
+ changelog_uri: https://github.com/galtzo-floss/stone_checksums/blob/v1.0.3/CHANGELOG.md
140
238
  bug_tracker_uri: https://github.com/galtzo-floss/stone_checksums/issues
141
- documentation_uri: https://www.rubydoc.info/gems/stone_checksums/1.0.2
239
+ documentation_uri: https://www.rubydoc.info/gems/stone_checksums/1.0.3
142
240
  funding_uri: https://github.com/sponsors/pboling
143
241
  wiki_uri: https://github.com/galtzo-floss/stone_checksums/wiki
144
242
  news_uri: https://www.railsbling.com/tags/stone_checksums
@@ -150,6 +248,8 @@ rdoc_options:
150
248
  libraries"
151
249
  - "--main"
152
250
  - README.md
251
+ - "--exclude"
252
+ - "^sig/"
153
253
  - "--line-numbers"
154
254
  - "--inline-source"
155
255
  - "--quiet"
@@ -166,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
266
  - !ruby/object:Gem::Version
167
267
  version: '0'
168
268
  requirements: []
169
- rubygems_version: 3.7.1
269
+ rubygems_version: 3.7.2
170
270
  specification_version: 4
171
271
  summary: "\U0001F5FF Generate both SHA256 & SHA512 checksums of RubyGem libraries"
172
272
  test_files: []
metadata.gz.sig CHANGED
Binary file