snaky_hash 2.0.3 → 2.0.5

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.
data/README.md CHANGED
@@ -1,171 +1,109 @@
1
- # 🐍 SnakyHash
2
-
3
- [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![Depfu][🔑depfui♻️]][🔑depfu] [![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] [![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]
4
-
5
- ---
6
-
7
- [![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]
8
-
9
- This library is similar in purpose to the HashWithIndifferentAccess that is famously used in Rails, but does a lot more.
10
-
11
- This gem is used by `oauth` and `oauth2` gems to normalize hash keys to `snake_case` and lookups,
12
- and provide a nice psuedo-object interface.
13
-
14
- It can be thought of as a mashup of:
1
+ <a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/ruby-oauth/avatar-128px.svg" width="14%" align="right"/></a>
15
2
 
16
- * `Rash` (specifically the [`rash_alt`](https://github.com/shishi/rash_alt) flavor), which is a special `Mash`, made popular by the `hashie` gem, and
17
- * `serialized_hashie` [gem by krystal](https://github.com/krystal/serialized-hashie), rewritten, with some behavior changes
18
-
19
- Classes that `include SnakyHash::Snake.new` should inherit from `Hashie::Mash`.
20
-
21
- ## New for v2.0.2: Serialization Support
22
-
23
- The serialization support is set to `false` by default, for backwards compatibility, but may be switched to `true` in the next major release, which will be v3. Example:
24
-
25
- ```ruby
26
- # This class has `dump` and `load` abilities!
27
- class MyStringKeyedHash < Hashie::Mash
28
- include SnakyHash::Snake.new(
29
- key_type: :string,
30
- serializer: true,
31
- )
32
- end
33
- ```
3
+ # 🐍 SnakyHash
34
4
 
35
- Also new dump & load plugin extensions to control the way your data is dumped and loaded.
5
+ [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽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]
36
6
 
37
- ### Note for use with oauth2 gem
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
38
8
 
39
- The serializer is being introduced as a disabled option for backwards compatibility.
40
- In snaky_hash v3 it will default to `true`.
41
- If you want to start using the serializer immediately, reopen the `SnakyHash::StringKeyed` class and add the `SnakyHash::Serializer` module like this:
9
+ ---
42
10
 
43
- ```ruby
44
- SnakyHash::StringKeyed.class_eval do
45
- extend SnakyHash::Serializer
46
- end
47
- ```
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.
48
12
 
49
- or you can create a custom class
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 on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
50
14
 
51
- ```ruby
52
- class MyHash < Hashie::Mash
53
- include SnakyHash::Snake.new(key_type: :string, serializer: true)
54
- # Which is the same as:
55
- # include SnakyHash::Snake.new(key_type: :string)
56
- # extend SnakyHash::Serializer
57
- end
58
- ```
59
-
60
- You can then add serialization extensions as needed. See [serialization](#serialization) and [extensions](#extensions) for more.
15
+ <details>
16
+ <summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
61
17
 
62
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
63
- |-----------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
64
- | 🧪 [oauth-xx/snaky_hash on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
65
- | 🧊 [oauth-xx/snaky_hash on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | ➖ | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
66
- | 🐙 [oauth-xx/snaky_hash on GitHub][📜src-gh] | A Dirty Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | ➖ |
67
- | 🤼 [OAuth Ruby Google Group][⛳gg-discussions] | "Active" | ➖ | ➖ | ➖ | ➖ | [💚][⛳gg-discussions] |
68
- | 🎮️ [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] |
18
+ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
69
19
 
70
- ## Upgrading Runtime Gem Dependencies
20
+ </details>
71
21
 
72
- Due to oauth and oauth2 gems depending on this gem,
73
- this project sits underneath a large portion of the authorization systems on the internet.
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>
74
23
 
75
- That means it is painful for the Ruby community when this gem forces updates to its runtime dependencies.
24
+ ## 💡 Info you can shake a stick at
76
25
 
77
- As a result, great care, and a lot of time, have been invested to ensure this gem is working with all the
78
- leading versions per each minor version of Ruby of all the runtime dependencies it can install with.
26
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
27
+ |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
28
+ | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
29
+ | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![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 current Compat][💎truby-c-i]][🚎9-t-wf]|
30
+ | Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
31
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![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]|
32
+ | Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
33
+ | 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] |
34
+ | 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] |
35
+ | 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] |
36
+ | 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] |
37
+ | 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] |
38
+ | 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] |
39
+ | `...` 💖 | [![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] |
40
+
41
+ ### Compatibility
42
+
43
+ Compatible with MRI Ruby 2.2.0+, and concordant releases of JRuby, and TruffleRuby.
44
+ CI workflows and Appraisals are generated for MRI Ruby 2.4+.
45
+ This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
46
+ may be higher than the gem's runtime compatibility floor when legacy Rubies are
47
+ not practical for the current toolchain.
48
+
49
+ | 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |
50
+ |------------------------------------------------|--------------------------------------------------------|
51
+ | 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |
52
+
53
+ ### Federated DVCS
54
+
55
+ <details markdown="1">
56
+ <summary>Find this repo on federated forges (Coming soon!)</summary>
57
+
58
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
59
+ |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
60
+ | 🧪 [ruby-oauth/snaky_hash on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
61
+ | 🧊 [ruby-oauth/snaky_hash on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
62
+ | 🐙 [ruby-oauth/snaky_hash on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
63
+ | 🎮️ [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] |
79
64
 
80
- What does that mean specifically for the runtime dependencies?
65
+ </details>
81
66
 
82
- We have 100% test coverage of lines and branches, and this test suite runs across a large matrix
83
- covering the latest patch for each of the following minor versions:
67
+ [gh-discussions]: https://github.com/ruby-oauth/snaky_hash/discussions
84
68
 
85
- * MRI Ruby @ v2.3, v2.4, v2.5, v2.6, v2.7, v3.0, v3.1, v3.2, v3.3, v3.4, HEAD
86
- * NOTE: This gem will still install on ruby v2.2, but vanilla GitHub Actions no longer supports testing against it, so YMMV.
87
- * JRuby @ v9.2, v9.3, v9.4, v10.0, HEAD
88
- * TruffleRuby @ v23.1, v23.2, HEAD
89
- * gem `hashie` @ v0, v1, v2, v3, v4, v5, HEAD ⏩️ [hashie/hashie](https://github.com/hashie/hashie)
90
- * gem `version_gem` - @v1, HEAD ⏩️ [oauth-xx/version_gem](https://gitlab.com/oauth-xx/version_gem)
69
+ ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/snaky_hash)](https://tidelift.com/subscription/pkg/rubygems-snaky_hash?utm_source=rubygems-snaky_hash&utm_medium=referral&utm_campaign=readme)
91
70
 
92
- NOTE: `version_gem`, and this library, were both extracted from the ouaht2 gem. They are part of the `oauth-xx` org,
93
- and are developed in tight collaboration with the oauth and oauth2 gems.
71
+ Available as part of the Tidelift Subscription.
94
72
 
95
- ### You should upgrade this gem with confidence\*.
73
+ <details markdown="1">
74
+ <summary>Need enterprise-level guarantees?</summary>
96
75
 
97
- - This gem follows a _strict & correct_ (according to the maintainer of SemVer; [more info][sv-pub-api]) interpretation of SemVer.
98
- - Dropping support for **any** of the runtime dependency versions above will be a major version bump.
99
- - If you aren't on one of the minor versions above, make getting there a priority.
100
- - You should upgrade the dependencies of this gem with confidence\*.
101
- - Please do upgrade, and then, when it goes smooth as butter [please sponsor me][🖇sponsor]. Thanks!
76
+ 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.
102
77
 
103
- [sv-pub-api]: #-is-platform-support-part-of-the-public-api
78
+ [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]
104
79
 
105
- \* MIT license; I am unable to make guarantees.
80
+ - 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies
81
+ - 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]
82
+ - 💡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
106
83
 
107
- | 🚚 Test matrix brought to you by | 🔎 appraisal++ |
108
- |----------------------------------|-------------------------------------------------------------------------|
109
- | Adds back support for old Rubies | ✨ [appraisal PR #250](https://github.com/thoughtbot/appraisal/pull/250) |
110
- | Adds support for `eval_gemfile` | ✨ [appraisal PR #248](https://github.com/thoughtbot/appraisal/pull/248) |
111
- | Please review | my PRs! |
84
+ Alternatively:
112
85
 
113
- ## 💡 Info you can shake a stick at
86
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
87
+ - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
88
+ - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
114
89
 
115
- | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
116
- |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
117
- | Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎10-j-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎10-j-wf] [![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] |
118
- | Works with Truffle Ruby | [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf] |
119
- | 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] |
120
- | Works with MRI Ruby 2 | [![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] |
121
- | 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] |
122
- | Documentation | [![Discussion][⛳gg-discussions-img]][⛳gg-discussions] [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![HEAD on RubyDoc.info][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
123
- | 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] |
124
- | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] |
125
- | 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] |
126
- | Enterprise Support | [![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]<br/>💡Subscribe for support guarantees covering _all_ FLOSS dependencies!<br/>💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]!<br/>💡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! |
127
- | Comrade BDFL 🎖️ | [![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 BDFL][🚂bdfl-contact-img]][🚂bdfl-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
128
- | `...` 💖 | [![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] |
90
+ </details>
129
91
 
130
92
  ## ✨ Installation
131
93
 
132
94
  Install the gem and add to the application's Gemfile by executing:
133
95
 
134
- $ bundle add snaky_hash
135
-
136
- If bundler is not being used to manage dependencies, install the gem by executing:
137
-
138
- $ gem install snaky_hash
139
-
140
- ### 🔒 Secure Installation
141
-
142
- `snaky_hash` is cryptographically signed, and has verifiable [SHA-256 and SHA-512][💎SHA_checksums] checksums by
143
- [stone_checksums][💎stone_checksums]. Be sure the gem you install hasn’t been tampered with
144
- by following the instructions below.
145
-
146
- Add my public key (if you haven’t already, expires 2045-04-29) as a trusted certificate:
147
-
148
- ```shell
149
- gem cert --add <(curl -Ls https://raw.github.com/oauth-xx/snaky_hash/main/certs/pboling.pem)
96
+ ```console
97
+ bundle add snaky_hash
150
98
  ```
151
99
 
152
- You only need to do that once. Then proceed to install with:
153
-
154
- ```shell
155
- gem install snaky_hash -P MediumSecurity
156
- ```
157
-
158
- The `MediumSecurity` trust profile will verify signed gems, but allow the installation of unsigned dependencies.
159
-
160
- This is necessary because not all of `snaky_hash`’s dependencies are signed, so we cannot use `HighSecurity`.
161
-
162
- If you want to up your security game full-time:
100
+ If bundler is not being used to manage dependencies, install the gem by executing:
163
101
 
164
- ```shell
165
- bundle config set --global trust-policy MediumSecurity
102
+ ```console
103
+ gem install snaky_hash
166
104
  ```
167
105
 
168
- NOTE: Be prepared to track down certs for signed gems and add them the same way you added mine.
106
+ ## ⚙️ Configuration
169
107
 
170
108
  ## 🔧 Basic Usage
171
109
 
@@ -326,6 +264,63 @@ snake.very_fine_hat # => 'cheese'
326
264
 
327
265
  See [CONTRIBUTING.md][🤝contributing].
328
266
 
267
+ ## 🦷 FLOSS Funding
268
+
269
+ While ruby-oauth tools are free software and will always be, the project would benefit immensely from some funding.
270
+ Raising a monthly budget of... "dollars" would make the project more sustainable.
271
+
272
+ We welcome both individual and corporate sponsors! We also offer a
273
+ wide array of funding channels to account for your preferences.
274
+ Currently, [Open Collective][🖇osc] is our preferred funding platform.
275
+
276
+ **If you're working in a company that's making significant use of ruby-oauth tools we'd
277
+ appreciate it if you suggest to your company to become a ruby-oauth sponsor.**
278
+
279
+ You can support the development of ruby-oauth tools via
280
+ [GitHub Sponsors][🖇sponsor],
281
+ [Liberapay][⛳liberapay],
282
+ [PayPal][🖇paypal],
283
+ [Open Collective][🖇osc]
284
+ and [Tidelift][🏙️entsup-tidelift].
285
+
286
+ | 📍 NOTE |
287
+ |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
288
+ | If doing a sponsorship in the form of donation is problematic for your company <br/> from an accounting standpoint, we'd recommend the use of Tidelift, <br/> where you can get a support-like subscription instead. |
289
+
290
+ ### Open Collective for Individuals
291
+
292
+ Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/ruby-oauth#backer)]
293
+
294
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
295
+
296
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:START -->
297
+ No backers yet. Be the first!
298
+ <!-- OPENCOLLECTIVE-INDIVIDUALS:END -->
299
+
300
+ ### Open Collective for Organizations
301
+
302
+ Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/ruby-oauth#sponsor)]
303
+
304
+ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.
305
+
306
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
307
+ No sponsors yet. Be the first!
308
+ <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
309
+
310
+ [kettle-readme-backers]: https://github.com/ruby-oauth/snaky_hash/blob/main/exe/kettle-readme-backers
311
+
312
+ ### Another way to support open-source
313
+
314
+ 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).
315
+
316
+ 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`.
317
+
318
+ 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.
319
+
320
+ **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
321
+
322
+ [![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 efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]
323
+
329
324
  ## 🔐 Security
330
325
 
331
326
  See [SECURITY.md][🔐security].
@@ -333,22 +328,34 @@ See [SECURITY.md][🔐security].
333
328
  ## 🤝 Contributing
334
329
 
335
330
  If you need some ideas of where to help, you could work on adding more code coverage,
336
- or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues], or [PRs][🤝gh-pulls],
331
+ or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
337
332
  or use the gem and think about how it could be better.
338
333
 
339
334
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
340
335
 
341
336
  See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
342
337
 
338
+ ### 🚀 Release Instructions
339
+
340
+ See [CONTRIBUTING.md][🤝contributing].
341
+
343
342
  ### Code Coverage
344
343
 
345
- [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls]
346
- [![QLTY Test Coverage][🔑qlty-covi♻️]][🔑qlty-cov]
344
+ <details markdown="1">
345
+ <summary>Coverage service badges</summary>
346
+
347
+ [![Coverage Graph][🏀codecov-g]][🏀codecov]
348
+
349
+ [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]
350
+
351
+ [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]
352
+
353
+ </details>
347
354
 
348
355
  ### 🪇 Code of Conduct
349
356
 
350
- Everyone interacting in this project's codebases, issue trackers,
351
- chat rooms and mailing lists is expected to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
357
+ Everyone interacting with this project's codebases, issue trackers,
358
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
352
359
 
353
360
  ## 🌈 Contributors
354
361
 
@@ -356,106 +363,141 @@ chat rooms and mailing lists is expected to follow the [![Contributor Covenant 2
356
363
 
357
364
  Made with [contributors-img][🖐contrib-rocks].
358
365
 
359
- Also see GitLab Contributors: [https://gitlab.com/oauth-xx/snaky_hash/-/graphs/main][🚎contributors-gl]
366
+ Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/snaky_hash/-/graphs/main][🚎contributors-gl]
360
367
 
361
- ## ⭐️ Star History
368
+ <details>
369
+ <summary>⭐️ Star History</summary>
362
370
 
363
- <a href="https://star-history.com/#oauth-xx/snaky_hash&Date">
371
+ <a href="https://star-history.com/ruby-oauth/snaky_hash&Date">
364
372
  <picture>
365
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oauth-xx/snaky_hash&type=Date&theme=dark" />
366
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oauth-xx/snaky_hash&type=Date" />
367
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oauth-xx/snaky_hash&type=Date" />
373
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/snaky_hash&type=Date&theme=dark" />
374
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ruby-oauth/snaky_hash&type=Date" />
375
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ruby-oauth/snaky_hash&type=Date" />
368
376
  </picture>
369
377
  </a>
370
378
 
371
- ## 📌 Versioning
379
+ </details>
372
380
 
373
- This Library adheres to [![Semantic Versioning 2.0.0][📌semver-img]][📌semver].
374
- Violations of this scheme should be reported as bugs.
375
- Specifically, if a minor or patch version is released that breaks backward compatibility,
376
- a new version should be immediately released that restores compatibility.
377
- Breaking changes to the public API will only be introduced with new major versions.
381
+ ## 📌 Versioning
378
382
 
379
- ### 📌 Is "Platform Support" part of the public API?
383
+ This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
384
+ For most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
380
385
 
381
- Yes. But I'm obligated to include notes...
386
+ For example:
382
387
 
383
- SemVer should, but doesn't explicitly, say that dropping support for specific Platforms
384
- is a *breaking change* to an API.
385
- It is obvious to many, but not all, and since the spec is silent, the bike shedding is endless.
388
+ ```ruby
389
+ spec.add_dependency("snaky_hash", "~> 2.0")
390
+ ```
386
391
 
387
- > dropping support for a platform is both obviously and objectively a breaking change
392
+ <details markdown="1">
393
+ <summary>📌 Is "Platform Support" part of the public API? More details inside.</summary>
388
394
 
389
- - Jordan Harband (@ljharb, maintainer of SemVer) [in SemVer issue 716][📌semver-breaking]
395
+ Dropping support for a platform can be a breaking change for affected users.
396
+ If a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.
390
397
 
391
398
  To get a better understanding of how SemVer is intended to work over a project's lifetime,
392
399
  read this article from the creator of SemVer:
393
400
 
394
401
  - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
395
402
 
396
- As a result of this policy, and the interpretive lens used by the maintainer,
397
- you can (and should) specify a dependency on these libraries using
398
- the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
399
-
400
- For example:
401
-
402
- ```ruby
403
- spec.add_dependency("snaky_hash", "~> 2.0")
404
- ```
403
+ </details>
405
404
 
406
- See [CHANGELOG.md][📌changelog] for list of releases.
405
+ See [CHANGELOG.md][📌changelog] for a list of releases.
407
406
 
408
407
  ## 📄 License
409
408
 
410
409
  The gem is available as open source under the terms of
411
- the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
412
- See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
410
+ the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
413
411
 
414
412
  ### © Copyright
415
413
 
416
- <ul>
417
- <li>
418
- 2022, 2025 Peter H. Boling, of
419
- <a href="https://railsbling.com">
420
- RailsBling.com
421
- <picture>
422
- <img alt="Rails Bling" height="20" src="https://railsbling.com/images/logos/RailsBling-TrainLogo.svg" />
423
- </picture>
424
- </a>, and snaky_hash contributors
425
- </li>
426
- </ul>
414
+ See [LICENSE.md][📄license] for the official copyright notice.
415
+
416
+ <details markdown="1">
417
+ <summary>Copyright holders</summary>
427
418
 
428
- ## 🤑 One more thing
419
+ - Copyright (c) 2022, 2025-2026 Peter H. Boling
429
420
 
430
- You made it to the bottom of the page,
431
- so perhaps you'll indulge me for another 20 seconds.
432
- I maintain many dozens of gems, including this one,
433
- because I want Ruby to be a great place for people to solve problems, big and small.
434
- Please consider supporting my efforts via the giant yellow link below,
435
- or one of the others at the head of this README.
421
+ </details>
436
422
 
437
- [![Buy me a latte][🖇buyme-img]][🖇buyme]
423
+ ## 🤑 A request for help
438
424
 
439
- [⛳gg-discussions]: https://groups.google.com/g/oauth-ruby
440
- [⛳gg-discussions-img]: https://img.shields.io/badge/google-group-0093D0.svg?style=for-the-badge&logo=google&logoColor=orange
425
+ Maintainers have teeth and need to pay their dentists.
426
+ After getting laid off in an RIF in March, and encountering difficulty finding a new one,
427
+ I began spending most of my time building open source tools.
428
+ I'm hoping to be able to pay for my kids' health insurance this month,
429
+ so if you value the work I am doing, I need your support.
430
+ Please consider sponsoring me or the project.
431
+
432
+ To join the community or get help 👇️ Join the Discord.
433
+
434
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
435
+
436
+ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
437
+
438
+ [![Sponsor ruby-oauth/snaky_hash 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]
439
+
440
+ ### Please give the project a star ⭐ ♥.
441
+
442
+ 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.
443
+
444
+ Thanks for RTFM. ☺️
445
+
446
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
447
+ [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
448
+ [⛳liberapay]: https://liberapay.com/pboling/donate
449
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth
450
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth
451
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth
452
+ [🖇osc-backers]: https://opencollective.com/ruby-oauth#backer
453
+ [🖇osc-backers-i]: https://opencollective.com/ruby-oauth/backers/badge.svg?style=flat
454
+ [🖇osc-sponsors]: https://opencollective.com/ruby-oauth#sponsor
455
+ [🖇osc-sponsors-i]: https://opencollective.com/ruby-oauth/sponsors/badge.svg?style=flat
456
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge
457
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge
458
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge
459
+ [🖇osc]: https://opencollective.com/ruby-oauth
460
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
461
+ [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
462
+ [🖇sponsor]: https://github.com/sponsors/pboling
463
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
464
+ [🖇polar]: https://polar.sh/pboling
465
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
466
+ [🖇kofi]: https://ko-fi.com/pboling
467
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
468
+ [🖇patreon]: https://patreon.com/galtzo
469
+ [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
470
+ [🖇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
471
+ [🖇buyme]: https://www.buymeacoffee.com/pboling
472
+ [🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat&logo=paypal
473
+ [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
474
+ [🖇paypal]: https://www.paypal.com/paypalme/peterboling
475
+ [🖇floss-funding.dev]: https://floss-funding.dev
476
+ [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
477
+ [✉️discord-invite]: https://discord.gg/3qme4XHNKN
478
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
479
+ [✉️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
480
+ [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
441
481
 
442
482
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
443
- [⛳️gem-namespace]: https://github.com/oauth-xx/snaky_hash
444
- [⛳️namespace-img]: https://img.shields.io/badge/namespace-OAuth2-brightgreen.svg?style=flat&logo=ruby&logoColor=white
445
- [⛳️gem-name]: https://rubygems.org/gems/snaky_hash
446
- [⛳️name-img]: https://img.shields.io/badge/name-snaky_hash-brightgreen.svg?style=flat&logo=rubygems&logoColor=red
447
- [🚂bdfl-blog]: http://www.railsbling.com/tags/snaky_hash
448
- [🚂bdfl-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
449
- [🚂bdfl-contact]: http://www.railsbling.com/contact
450
- [🚂bdfl-contact-img]: https://img.shields.io/badge/Contact-BDFL-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
483
+ [⛳️gem-namespace]: https://github.com/ruby-oauth/snaky_hash
484
+ [⛳️namespace-img]: https://img.shields.io/badge/namespace-SnakyHash-3C2D2D.svg?style=square&logo=ruby&logoColor=white
485
+ [⛳️gem-name]: https://bestgems.org/gems/snaky_hash
486
+ [⛳️name-img]: https://img.shields.io/badge/name-snaky__hash-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
487
+ [⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/snaky_hash.svg
488
+ [⛳️tag]: https://github.com/ruby-oauth/snaky_hash/releases
489
+ [🚂maint-blog]: http://www.railsbling.com/tags/snaky_hash
490
+ [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
491
+ [🚂maint-contact]: http://www.railsbling.com/contact
492
+ [🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
451
493
  [💖🖇linkedin]: http://www.linkedin.com/in/peterboling
452
- [💖🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-LinkedIn-0B66C2?style=flat&logo=newjapanprowrestling
453
- [💖✌️wellfound]: https://angel.co/u/peter-boling
494
+ [💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat&logo=newjapanprowrestling
495
+ [💖✌️wellfound]: https://wellfound.com/u/peter-boling
454
496
  [💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat&logo=wellfound
455
497
  [💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling
456
498
  [💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat&logo=crunchbase
457
499
  [💖🐘ruby-mast]: https://ruby.social/@galtzo
458
- [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https%3A%2F%2Fruby.social&style=flat&logo=mastodon&label=Ruby%20%40galtzo
500
+ [💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social&style=flat&logo=mastodon&label=Ruby%20@galtzo
459
501
  [💖🦋bluesky]: https://bsky.app/profile/galtzo.com
460
502
  [💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat&logo=bluesky&logoColor=white
461
503
  [💖🌳linktree]: https://linktr.ee/galtzo
@@ -472,77 +514,74 @@ or one of the others at the head of this README.
472
514
  [👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge&logo=Upwork&logoColor=white
473
515
  [👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github
474
516
  [👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge&logo=CodeMentor&logoColor=white
475
- [🏙️entsup-tidelift]: https://tidelift.com/subscription
517
+ [🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-snaky_hash?utm_source=rubygems-snaky_hash&utm_medium=referral&utm_campaign=readme
476
518
  [🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge&logo=sonar&logoColor=white
477
519
  [🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar
478
520
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
479
521
  [🚂railsbling]: http://www.railsbling.com
480
522
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
481
- [📜src-gl]: https://gitlab.com/oauth-xx/snaky_hash/
523
+ [📜src-gl]: https://gitlab.com/ruby-oauth/snaky_hash
482
524
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
483
- [📜src-cb]: https://codeberg.org/oauth-xx/snaky_hash
525
+ [📜src-cb]: https://codeberg.org/ruby-oauth/snaky_hash
484
526
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
485
- [📜src-gh]: https://github.com/oauth-xx/snaky_hash
527
+ [📜src-gh]: https://github.com/ruby-oauth/snaky_hash
486
528
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
487
529
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
488
- [📜wiki]: https://gitlab.com/oauth-xx/snaky_hash/-/wikis/home
489
- [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
490
- [👽dl-rank]: https://rubygems.org/gems/snaky_hash
530
+ [📜gl-wiki]: https://gitlab.com/ruby-oauth/snaky_hash/-/wikis/home
531
+ [📜gh-wiki]: https://github.com/ruby-oauth/snaky_hash/wiki
532
+ [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
533
+ [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
534
+ [👽dl-rank]: https://bestgems.org/gems/snaky_hash
491
535
  [👽dl-ranki]: https://img.shields.io/gem/rd/snaky_hash.svg
492
- [👽oss-help]: https://www.codetriage.com/oauth-xx/snaky_hash
493
- [👽oss-helpi]: https://www.codetriage.com/oauth-xx/snaky_hash/badges/users.svg
494
- [👽version]: https://rubygems.org/gems/snaky_hash
536
+ [👽version]: https://bestgems.org/gems/snaky_hash
495
537
  [👽versioni]: https://img.shields.io/gem/v/snaky_hash.svg
496
- [🔑qlty-mnt]: https://qlty.sh/gh/oauth-xx/projects/snaky_hash
497
- [🔑qlty-mnti♻️]: https://qlty.sh/badges/84e960b2-4ed2-4b47-9913-02c32680ec98/maintainability.svg
498
- [🔑qlty-cov]: https://qlty.sh/gh/oauth-xx/projects/snaky_hash
499
- [🔑qlty-covi♻️]: https://qlty.sh/badges/84e960b2-4ed2-4b47-9913-02c32680ec98/test_coverage.svg
500
- [🔑codecov]: https://codecov.io/gh/oauth-xx/snaky_hash
501
- [🔑codecovi♻️]: https://codecov.io/gh/oauth-xx/snaky_hash/graph/badge.svg?token=XqaZixl4ss
502
- [🔑coveralls]: https://coveralls.io/github/oauth-xx/snaky_hash?branch=main
503
- [🔑coveralls-img]: https://coveralls.io/repos/github/oauth-xx/snaky_hash/badge.svg?branch=main
504
- [🔑depfu]: https://depfu.com/github/oauth-xx/snaky_hash?project_id=63073
505
- [🔑depfui♻️]: https://badges.depfu.com/badges/7019dcf43672ba8c0e77e7fdd1063398/count.svg
506
- [🖐codeQL]: https://github.com/oauth-xx/snaky_hash/security/code-scanning
507
- [🖐codeQL-img]: https://github.com/oauth-xx/snaky_hash/actions/workflows/codeql-analysis.yml/badge.svg
508
- [🚎1-an-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/ancient.yml
509
- [🚎1-an-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/ancient.yml/badge.svg
510
- [🚎2-cov-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/coverage.yml
511
- [🚎2-cov-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/coverage.yml/badge.svg
512
- [🚎3-hd-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/heads.yml
513
- [🚎3-hd-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/heads.yml/badge.svg
514
- [🚎4-lg-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/legacy.yml
515
- [🚎4-lg-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/legacy.yml/badge.svg
516
- [🚎5-st-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/style.yml
517
- [🚎5-st-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/style.yml/badge.svg
518
- [🚎6-s-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/supported.yml
519
- [🚎6-s-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/supported.yml/badge.svg
520
- [🚎7-us-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/unsupported.yml
521
- [🚎7-us-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/unsupported.yml/badge.svg
522
- [🚎8-ho-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/hoary.yml
523
- [🚎8-ho-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/hoary.yml/badge.svg
524
- [🚎9-t-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/truffle.yml
525
- [🚎9-t-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/truffle.yml/badge.svg
526
- [🚎10-j-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/jruby.yml
527
- [🚎10-j-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/jruby.yml/badge.svg
528
- [🚎11-c-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/current.yml
529
- [🚎11-c-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/current.yml/badge.svg
530
- [🚎12-crh-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/current-runtime-heads.yml
531
- [🚎12-crh-wfi]: https://github.com/oauth-xx/snaky_hash/actions/workflows/current-runtime-heads.yml/badge.svg
532
- [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay
533
- [⛳liberapay]: https://liberapay.com/pboling/donate
534
- [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
535
- [🖇sponsor]: https://github.com/sponsors/pboling
536
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-yellow.svg
537
- [🖇polar]: https://polar.sh/pboling
538
- [🖇kofi-img]: https://img.shields.io/badge/a_more_different_coffee-✓-yellow.svg
539
- [🖇kofi]: https://ko-fi.com/O5O86SNP4
540
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
541
- [🖇patreon]: https://patreon.com/galtzo
542
- [🖇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
543
- [🖇buyme]: https://www.buymeacoffee.com/pboling
544
- [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-yellow.svg?style=flat
545
- [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
538
+ [🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash
539
+ [🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/maintainability.svg
540
+ [🏀qlty-cov]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/metrics/code?sort=coverageRating
541
+ [🏀qlty-covi]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/coverage.svg
542
+ [🏀codecov]: https://codecov.io/gh/ruby-oauth/snaky_hash
543
+ [🏀codecovi]: https://codecov.io/gh/ruby-oauth/snaky_hash/graph/badge.svg
544
+ [🏀coveralls]: https://coveralls.io/github/ruby-oauth/snaky_hash?branch=main
545
+ [🏀coveralls-img]: https://coveralls.io/repos/github/ruby-oauth/snaky_hash/badge.svg?branch=main
546
+ [🚎ruby-2.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.4.yml
547
+ [🚎ruby-2.5-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.5.yml
548
+ [🚎ruby-2.6-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.6.yml
549
+ [🚎ruby-2.7-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.7.yml
550
+ [🚎ruby-3.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.0.yml
551
+ [🚎ruby-3.1-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.1.yml
552
+ [🚎ruby-3.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.2.yml
553
+ [🚎ruby-3.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.3.yml
554
+ [🚎ruby-3.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.4.yml
555
+ [🚎jruby-9.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.2.yml
556
+ [🚎jruby-9.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.3.yml
557
+ [🚎jruby-9.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.4.yml
558
+ [🚎truby-22.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-22.3.yml
559
+ [🚎truby-23.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-23.0.yml
560
+ [🚎truby-23.1-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-23.1.yml
561
+ [🚎truby-24.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-24.2.yml
562
+ [🚎truby-25.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-25.0.yml
563
+ [🚎2-cov-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/coverage.yml
564
+ [🚎2-cov-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/coverage.yml/badge.svg
565
+ [🚎3-hd-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/heads.yml
566
+ [🚎3-hd-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/heads.yml/badge.svg
567
+ [🚎5-st-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/style.yml
568
+ [🚎5-st-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/style.yml/badge.svg
569
+ [🚎9-t-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffle.yml
570
+ [🚎9-t-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffle.yml/badge.svg
571
+ [🚎10-j-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby.yml
572
+ [🚎10-j-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby.yml/badge.svg
573
+ [🚎11-c-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/current.yml
574
+ [🚎11-c-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/current.yml/badge.svg
575
+ [🚎12-crh-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/dep-heads.yml
576
+ [🚎12-crh-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/dep-heads.yml/badge.svg
577
+ [🚎13-🔒️-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/locked_deps.yml
578
+ [🚎13-🔒️-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/locked_deps.yml/badge.svg
579
+ [🚎14-🔓️-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/unlocked_deps.yml
580
+ [🚎14-🔓️-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/unlocked_deps.yml/badge.svg
581
+ [🚎15-🪪-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/license-eye.yml
582
+ [🚎15-🪪-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/license-eye.yml/badge.svg
583
+ [💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
584
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
546
585
  [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
547
586
  [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
548
587
  [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
@@ -551,71 +590,76 @@ or one of the others at the head of this README.
551
590
  [💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge&logo=ruby&logoColor=white
552
591
  [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
553
592
  [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
593
+ [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
594
+ [💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
554
595
  [💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
555
596
  [💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
556
597
  [💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
557
598
  [💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
558
599
  [💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
600
+ [💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
601
+ [💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
559
602
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
560
- [💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
561
- [💎jruby-9.1i]: https://img.shields.io/badge/JRuby-9.1-FBE742?style=for-the-badge&logo=ruby&logoColor=red
562
603
  [💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
563
604
  [💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
564
605
  [💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
565
606
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
566
607
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
567
- [🤝gh-issues]: https://github.com/oauth-xx/snaky_hash/issues
568
- [🤝gh-pulls]: https://github.com/oauth-xx/snaky_hash/pulls
569
- [🤝gl-issues]: https://gitlab.com/oauth-xx/snaky_hash/-/issues
570
- [🤝gl-pulls]: https://gitlab.com/oauth-xx/snaky_hash/-/merge_requests
571
- [🤝cb-issues]: https://codeberg.org/oauth-xx/snaky_hash/issues
572
- [🤝cb-pulls]: https://codeberg.org/oauth-xx/snaky_hash/pulls
608
+ [🤝gh-issues]: https://github.com/ruby-oauth/snaky_hash/issues
609
+ [🤝gh-pulls]: https://github.com/ruby-oauth/snaky_hash/pulls
610
+ [🤝gl-issues]: https://gitlab.com/ruby-oauth/snaky_hash/-/issues
611
+ [🤝gl-pulls]: https://gitlab.com/ruby-oauth/snaky_hash/-/merge_requests
612
+ [🤝cb-issues]: https://codeberg.org/ruby-oauth/snaky_hash/issues
613
+ [🤝cb-pulls]: https://codeberg.org/ruby-oauth/snaky_hash/pulls
573
614
  [🤝cb-donate]: https://donate.codeberg.org/
574
- [🤝contributing]: CONTRIBUTING.md
575
- [🔑codecov-g♻️]: https://codecov.io/gh/oauth-xx/snaky_hash/graphs/tree.svg?token=XqaZixl4ss
615
+ [🤝contributing]: https://github.com/ruby-oauth/snaky_hash/blob/main/CONTRIBUTING.md
616
+ [🏀codecov-g]: https://codecov.io/gh/ruby-oauth/snaky_hash/graph/badge.svg
576
617
  [🖐contrib-rocks]: https://contrib.rocks
577
- [🖐contributors]: https://github.com/oauth-xx/snaky_hash/graphs/contributors
578
- [🖐contributors-img]: https://contrib.rocks/image?repo=oauth-xx/snaky_hash
579
- [🚎contributors-gl]: https://gitlab.com/oauth-xx/snaky_hash/-/graphs/main
580
- [🪇conduct]: CODE_OF_CONDUCT.md
618
+ [🖐contributors]: https://github.com/ruby-oauth/snaky_hash/graphs/contributors
619
+ [🖐contributors-img]: https://contrib.rocks/image?repo=ruby-oauth/snaky_hash
620
+ [🚎contributors-gl]: https://gitlab.com/ruby-oauth/snaky_hash/-/graphs/main
621
+ [🪇conduct]: https://github.com/ruby-oauth/snaky_hash/blob/main/CODE_OF_CONDUCT.md
581
622
  [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
582
623
  [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
583
624
  [📌semver]: https://semver.org/spec/v2.0.0.html
584
625
  [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
585
626
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
586
627
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
587
- [📌changelog]: CHANGELOG.md
628
+ [📌changelog]: https://github.com/ruby-oauth/snaky_hash/blob/main/CHANGELOG.md
588
629
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
589
630
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
590
- [📌gitmoji]:https://gitmoji.dev
591
- [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
631
+ [📌gitmoji]: https://gitmoji.dev
632
+ [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
592
633
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
593
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.132-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
594
- [🔐security]: SECURITY.md
634
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.133-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
635
+ [🔐security]: https://github.com/ruby-oauth/snaky_hash/blob/main/SECURITY.md
595
636
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
596
637
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
597
- [📄license]: LICENSE.txt
598
- [📄license-ref]: https://opensource.org/licenses/MIT
638
+ [📄license]: LICENSE.md
639
+ [📄license-ref]: MIT.md
599
640
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
641
+ [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
642
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-✓-259D6C.svg?style=flat&logo=Apache
643
+
600
644
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
601
645
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
602
646
  [🚎yard-current]: http://rubydoc.info/gems/snaky_hash
603
- [🚎yard-head]: https://snaky_hash.galtzo.com
604
- [💎stone_checksums]: https://github.com/pboling/stone_checksums
605
- [💎SHA_checksums]: https://gitlab.com/oauth-xx/snaky_hash/-/tree/main/checksums
647
+ [🚎yard-head]: https://snaky-hash.galtzo.com
648
+ [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
649
+ [💎SHA_checksums]: https://gitlab.com/ruby-oauth/snaky_hash/-/tree/main/checksums
606
650
  [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
607
- [💎rlts-img]: https://img.shields.io/badge/code_style_%26_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
651
+ [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
652
+ [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
653
+ [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
608
654
  [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
609
- [✉️discord-invite]: https://discord.gg/3qme4XHNKN
610
- [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
611
-
612
- <details>
613
- <summary>Deprecated Badges</summary>
614
-
615
- CodeCov currently fails to parse the coverage upload.
616
-
617
- [![CodeCov Test Coverage][🔑codecovi♻️]][🔑codecov]
618
-
619
- [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
620
655
 
621
- </details>
656
+ <!-- kettle-jem:metadata:start -->
657
+ | Field | Value |
658
+ |---|---|
659
+ | Package | snaky_hash |
660
+ | Description | 🐍 A Hashie::Mash joint to make #snakelife better |
661
+ | Homepage | https://github.com/ruby-oauth/snaky_hash |
662
+ | Source | https://github.com/ruby-oauth/snaky_hash/tree/v2.0.4 |
663
+ | License | `MIT` |
664
+ | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/snaky_hash, https://www.buymeacoffee.com/pboling |
665
+ <!-- kettle-jem:metadata:end -->