snaky_hash 2.0.6 → 2.0.8
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +126 -1
- data/LICENSE.md +1 -1
- data/README.md +89 -57
- data/lib/snaky_hash/serializer.rb +6 -6
- data/lib/snaky_hash/snake.rb +2 -2
- data/lib/snaky_hash/version.rb +4 -1
- data/lib/snaky_hash.rb +2 -1
- data/sig/snaky_hash.rbs +4 -0
- data.tar.gz.sig +0 -0
- metadata +54 -50
- metadata.gz.sig +0 -0
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -272
- data/FUNDING.md +0 -74
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- data/sig/snaky_hash/version.rbs +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 758b27173bac790a9c6fab78895150e790f8c09af7731796d6af9c8ff2700609
|
|
4
|
+
data.tar.gz: ac8872b41a36398bd4fb682beef5715b7b7be54adefd970cd1fe37985bdc3a09
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a8d402e67904d262643d8d449e65276e1f008da55731b4e7546a1167254aa2300f007a35571f1950b9dcc051f79a61c597ee2ce73e18c6ed67c7f7bb0921ba48
|
|
7
|
+
data.tar.gz: ef80fa53810783a818d96cd1b514d645cc4a541fbacbfaf9e7db10f26a9313cc1fdcacd2c82f6b2564bb41f140065dce9bcc3f41bad194d8c90ecd14384e278a
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,127 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.0.8] - 2026-10-23
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.0.8][2.0.8t]
|
|
36
|
+
- COVERAGE: 100.00% -- 133/133 lines in 7 files
|
|
37
|
+
- BRANCH COVERAGE: 100.00% -- 38/38 branches in 7 files
|
|
38
|
+
- 100.00% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- kettle-jem-template-20260720-005 - README Support & Community links now
|
|
43
|
+
include RubyForum.
|
|
44
|
+
- kettle-jem-template-20260726-001 - Projects now include YARD lint
|
|
45
|
+
configuration and documentation dependencies so documentation issues fail
|
|
46
|
+
before generated docs are refreshed.
|
|
47
|
+
- kettle-jem-template-20260727-001 - Spec harness documentation now lists the
|
|
48
|
+
RSpec helpers provided by `kettle-test`.
|
|
49
|
+
|
|
50
|
+
- kettle-jem-template-20260913-001 - Templating now also surfaces a review
|
|
51
|
+
entry in `dependency_conflicts.resolve` when a direct development
|
|
52
|
+
dependency doesn't support one or more of this project's declared
|
|
53
|
+
`engines:` and has no template-managed modular home (e.g. `sqlite3` on
|
|
54
|
+
`jruby`). Review each entry and pick a resolution per the project's own
|
|
55
|
+
engine support needs.
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
|
|
59
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
60
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
61
|
+
|
|
62
|
+
- kettle-jem-template-20260720-002 - Development Gemfiles now use the released
|
|
63
|
+
`tree_sitter_language_pack` gem 1.13.3 or newer by default.
|
|
64
|
+
- kettle-jem-template-20260725-002 - Version specs now use `anonymous_loader` to
|
|
65
|
+
cover `version.rb` without redefining constants, or are removed when version
|
|
66
|
+
specs are not managed for the project.
|
|
67
|
+
- kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
|
|
68
|
+
setup-ruby-flash planning and can prepare appraisal-only jobs without
|
|
69
|
+
installing the main Gemfile bundle.
|
|
70
|
+
|
|
71
|
+
- kettle-jem-template-20260801-001 - Generated README gem dashboard links now
|
|
72
|
+
use ClickGems instead of BestGems.
|
|
73
|
+
|
|
74
|
+
- [kc] kettle-jem/prepare: updated 17 project files:
|
|
75
|
+
- configuration (1)
|
|
76
|
+
- dependencies (16)
|
|
77
|
+
|
|
78
|
+
- [kc] kettle-jem/template: updated 53 project files:
|
|
79
|
+
- code and tests (3)
|
|
80
|
+
- configuration (1)
|
|
81
|
+
- dependencies (10)
|
|
82
|
+
- documentation (2)
|
|
83
|
+
- other (5)
|
|
84
|
+
- workflows (32)
|
|
85
|
+
|
|
86
|
+
### Fixed
|
|
87
|
+
|
|
88
|
+
- kettle-jem-template-20260720-003 - StructuredMerge Git diff driver config now
|
|
89
|
+
uses the installed `smorg-rb` driver command.
|
|
90
|
+
- kettle-jem-template-20260725-001 - Release pull request branches beginning
|
|
91
|
+
with `feature/release` now run JRuby and TruffleRuby workflows.
|
|
92
|
+
- kettle-jem-template-20260726-002 - Generated version files now document their
|
|
93
|
+
version namespace and constants, reducing warning-only YARD lint output.
|
|
94
|
+
- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
|
|
95
|
+
QLTY, and Codecov as optional, so provider outages do not fail CI when local
|
|
96
|
+
coverage thresholds still pass.
|
|
97
|
+
- kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
|
|
98
|
+
same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
|
|
99
|
+
installs are not reported as project lint debt.
|
|
100
|
+
- kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
|
|
101
|
+
TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
|
|
102
|
+
before the test suite starts.
|
|
103
|
+
- kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
|
|
104
|
+
setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
|
|
105
|
+
lockfile parser failures on Git and path dependencies.
|
|
106
|
+
- kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
|
|
107
|
+
missing canonical version spec when a project only has shim namespace version
|
|
108
|
+
specs.
|
|
109
|
+
- kettle-jem-template-20260729-001 - Generated JRuby 9.4 workflows now use the
|
|
110
|
+
legacy manual bundle install path, avoiding setup-time Bundler full-index
|
|
111
|
+
failures against `gem.coop`.
|
|
112
|
+
- kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
|
|
113
|
+
relative to the gemspec directory, so release package contents stay correct
|
|
114
|
+
even when the gemspec is loaded from another working directory.
|
|
115
|
+
|
|
116
|
+
- kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
|
|
117
|
+
managed configuration block bindings structurally, preventing mixed block
|
|
118
|
+
parameter names from producing invalid configuration after a merge.
|
|
119
|
+
- kettle-jem-template-20260801-003 - Generated project metadata and
|
|
120
|
+
documentation now normalize configured underscore hostnames to valid
|
|
121
|
+
hyphenated hostnames.
|
|
122
|
+
- kettle-jem-template-20260801-004 - Generated organization README logos now
|
|
123
|
+
use GitHub's stable organization avatar endpoint instead of assuming a
|
|
124
|
+
matching Galtzo-hosted asset exists.
|
|
125
|
+
- kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
|
|
126
|
+
preserving comments and trailing commas during template updates.
|
|
127
|
+
|
|
128
|
+
## [2.0.7] - 2026-07-14
|
|
129
|
+
|
|
130
|
+
- TAG: [v2.0.7][2.0.7t]
|
|
131
|
+
- COVERAGE: 100.00% -- 133/133 lines in 7 files
|
|
132
|
+
- BRANCH COVERAGE: 100.00% -- 38/38 branches in 7 files
|
|
133
|
+
- 92.86% documented
|
|
134
|
+
|
|
135
|
+
### Added
|
|
136
|
+
|
|
137
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
138
|
+
|
|
139
|
+
### Changed
|
|
140
|
+
|
|
141
|
+
- Retemplated generated project metadata, support documentation, CI workflows,
|
|
142
|
+
binstubs, and development dependency floors with `kettle-jem` v7.0.0.
|
|
143
|
+
|
|
144
|
+
### Fixed
|
|
145
|
+
|
|
146
|
+
- Corrected RubyGems homepage metadata to point at the gem documentation site.
|
|
147
|
+
- Corrected persisted Open Collective and repository topology metadata used by
|
|
148
|
+
future template runs.
|
|
149
|
+
|
|
150
|
+
- Package configured license files in gem release file lists.
|
|
151
|
+
|
|
152
|
+
- Removed stale local-path `version_gem` state from the main lockfile.
|
|
153
|
+
|
|
33
154
|
## [2.0.6] - 2026-06-11
|
|
34
155
|
|
|
35
156
|
- TAG: [v2.0.6][2.0.6t]
|
|
@@ -173,7 +294,11 @@ end
|
|
|
173
294
|
|
|
174
295
|
- Initial release
|
|
175
296
|
|
|
176
|
-
[Unreleased]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.
|
|
297
|
+
[Unreleased]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.8...HEAD
|
|
298
|
+
[2.0.8]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.7...v2.0.8
|
|
299
|
+
[2.0.8t]: https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.8
|
|
300
|
+
[2.0.7]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.6...v2.0.7
|
|
301
|
+
[2.0.7t]: https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.7
|
|
177
302
|
[2.0.6]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.5...v2.0.6
|
|
178
303
|
[2.0.6t]: https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.6
|
|
179
304
|
[2.0.5]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.4...v2.0.5
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
<a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by
|
|
1
|
+
<a href="https://github.com/ruby-oauth"><img alt="ruby-oauth Logo by GitHub" src="https://github.com/ruby-oauth.png?size=192" width="14%" align="right"/></a>
|
|
2
2
|
|
|
3
3
|
# 🔮 SnakyHash
|
|
4
4
|
|
|
5
|
-
[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![
|
|
5
|
+
[![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
|
|
6
6
|
|
|
7
|
-
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the
|
|
7
|
+
`if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
`if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
|
|
12
12
|
|
|
13
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
13
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
14
14
|
|
|
15
|
-
<details>
|
|
15
|
+
<details markdown="1">
|
|
16
16
|
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
17
17
|
|
|
18
18
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
@@ -25,13 +25,13 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
25
25
|
|
|
26
26
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
27
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.
|
|
30
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
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 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
29
|
+
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-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 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
30
|
+
| Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
|
|
31
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
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
|
|
33
|
+
| Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork] [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor] |
|
|
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
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
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
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] |
|
|
@@ -40,33 +40,65 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
40
40
|
|
|
41
41
|
### Compatibility
|
|
42
42
|
|
|
43
|
-
Compatible with MRI Ruby 2.2.0+,
|
|
43
|
+
Compatible with MRI Ruby 2.2.0+, JRuby, and TruffleRuby.
|
|
44
44
|
CI workflows and Appraisals are generated for MRI Ruby 2.4+.
|
|
45
45
|
This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
|
|
46
46
|
may be higher than the gem's runtime compatibility floor when legacy Rubies are
|
|
47
47
|
not practical for the current toolchain.
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
<a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
|
|
50
|
+
|
|
51
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
52
|
+
|
|
53
|
+
<details markdown="1">
|
|
54
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
55
|
+
|
|
56
|
+
| Gem | Source | Role | Total downloads |
|
|
57
|
+
|-----|--------|------|---------------------|
|
|
58
|
+
| [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](https://clickgems.clickhouse.com/dashboard/appraisal2) |
|
|
59
|
+
| [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
|
|
60
|
+
| [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
|
|
61
|
+
| [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
|
|
62
|
+
| [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
|
|
63
|
+
| [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [](https://clickgems.clickhouse.com/dashboard/kettle-test) |
|
|
64
|
+
| [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
|
|
65
|
+
| [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
|
|
66
|
+
|
|
67
|
+
</details>
|
|
68
|
+
|
|
69
|
+
### Runtime and Platform Support
|
|
70
|
+
|
|
71
|
+
Support tiers describe what this project's CI actually exercises, not what may
|
|
72
|
+
work in an untested environment:
|
|
73
|
+
|
|
74
|
+
- **Parallel support**: CI runs the test suite with multiple workers available.
|
|
75
|
+
- **Unsupported**: the engine/platform combination is not covered by CI and is
|
|
76
|
+
not a project compatibility claim.
|
|
77
|
+
|
|
78
|
+
| Ruby engine/version | Linux | macOS | Windows | Notes |
|
|
79
|
+
|---------------------|-------|-------|---------|-------|
|
|
80
|
+
| MRI 3.1-3.4 | Parallel support | Unsupported | Unsupported | Versioned Ruby workflows run on Linux. |
|
|
81
|
+
| MRI current | Parallel support | Parallel support | Unsupported | Current Ruby workflow covers the declared OS platforms. |
|
|
82
|
+
| MRI head | Parallel support | Unsupported | Unsupported | CI is allowed to fail while Ruby is in development. |
|
|
83
|
+
| JRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Engine workflows run on Linux; macOS and Windows are not exercised by CI. |
|
|
84
|
+
| TruffleRuby (all CI lanes) | Parallel support | Unsupported | Unsupported | Never shipped a Windows build (zero Windows assets across 66 releases scanned 2026-10-10); setup-ruby hard-fails ([source](https://github.com/ruby/setup-ruby/blob/master/README.md)) |
|
|
52
85
|
|
|
53
86
|
### Federated DVCS
|
|
54
87
|
|
|
55
88
|
<details markdown="1">
|
|
56
89
|
<summary>Find this repo on federated forges (Coming soon!)</summary>
|
|
57
90
|
|
|
58
|
-
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
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 |
|
|
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] |
|
|
91
|
+
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
92
|
+
|-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
|
|
93
|
+
| 🧪 [ruby-oauth/snaky_hash on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
|
|
94
|
+
| 🧊 [ruby-oauth/snaky_hash on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
|
|
95
|
+
| 🐙 [ruby-oauth/snaky_hash on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
|
|
64
96
|
|
|
65
97
|
</details>
|
|
66
98
|
|
|
67
|
-
|
|
99
|
+
### Enterprise Support
|
|
68
100
|
|
|
69
|
-
|
|
101
|
+
[](https://tidelift.com/subscription/pkg/rubygems-snaky_hash?utm_source=rubygems-snaky_hash&utm_medium=referral&utm_campaign=readme)
|
|
70
102
|
|
|
71
103
|
Available as part of the Tidelift Subscription.
|
|
72
104
|
|
|
@@ -83,6 +115,7 @@ The maintainers of this and thousands of other packages are working with Tidelif
|
|
|
83
115
|
|
|
84
116
|
Alternatively:
|
|
85
117
|
|
|
118
|
+
- [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
86
119
|
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
87
120
|
- [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork]
|
|
88
121
|
- [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor]
|
|
@@ -105,6 +138,18 @@ gem install snaky_hash
|
|
|
105
138
|
|
|
106
139
|
## ⚙️ Configuration
|
|
107
140
|
|
|
141
|
+
Choose the storage key type when including `SnakyHash::Snake`: `:string`
|
|
142
|
+
stores converted keys as strings and `:symbol` stores them as symbols. Set
|
|
143
|
+
`serializer: true` when the host object also needs SnakyHash’s serialization
|
|
144
|
+
helpers. There is no global initializer; configuration belongs on each hash
|
|
145
|
+
class that includes the module.
|
|
146
|
+
|
|
147
|
+
```ruby
|
|
148
|
+
class StringKeyedPayload < Hashie::Mash
|
|
149
|
+
include SnakyHash::Snake.new(key_type: :string, serializer: true)
|
|
150
|
+
end
|
|
151
|
+
```
|
|
152
|
+
|
|
108
153
|
## 🔧 Basic Usage
|
|
109
154
|
|
|
110
155
|
```ruby
|
|
@@ -307,7 +352,7 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
|
|
|
307
352
|
No sponsors yet. Be the first!
|
|
308
353
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
309
354
|
|
|
310
|
-
[kettle-readme-backers]: https://github.com/ruby-oauth/snaky_hash/blob/main/
|
|
355
|
+
[kettle-readme-backers]: https://github.com/ruby-oauth/snaky_hash/blob/main/bin/kettle-readme-backers
|
|
311
356
|
|
|
312
357
|
### Another way to support open-source
|
|
313
358
|
|
|
@@ -319,7 +364,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
319
364
|
|
|
320
365
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
321
366
|
|
|
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
|
|
367
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
323
368
|
|
|
324
369
|
## 🔐 Security
|
|
325
370
|
|
|
@@ -328,8 +373,7 @@ See [SECURITY.md][🔐security].
|
|
|
328
373
|
## 🤝 Contributing
|
|
329
374
|
|
|
330
375
|
If you need some ideas of where to help, you could work on adding more code coverage,
|
|
331
|
-
|
|
332
|
-
or use the gem and think about how it could be better.
|
|
376
|
+
check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
|
|
333
377
|
|
|
334
378
|
We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
|
|
335
379
|
|
|
@@ -365,19 +409,6 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
365
409
|
|
|
366
410
|
Also see GitLab Contributors: [https://gitlab.com/ruby-oauth/snaky_hash/-/graphs/main][🚎contributors-gl]
|
|
367
411
|
|
|
368
|
-
<details>
|
|
369
|
-
<summary>⭐️ Star History</summary>
|
|
370
|
-
|
|
371
|
-
<a href="https://star-history.com/ruby-oauth/snaky_hash&Date">
|
|
372
|
-
<picture>
|
|
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" />
|
|
376
|
-
</picture>
|
|
377
|
-
</a>
|
|
378
|
-
|
|
379
|
-
</details>
|
|
380
|
-
|
|
381
412
|
## 📌 Versioning
|
|
382
413
|
|
|
383
414
|
This library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.
|
|
@@ -407,7 +438,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
407
438
|
## 📄 License
|
|
408
439
|
|
|
409
440
|
The gem is available as open source under the terms of
|
|
410
|
-
the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
441
|
+
the [MIT](https://github.com/ruby-oauth/snaky_hash/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
411
442
|
|
|
412
443
|
### © Copyright
|
|
413
444
|
|
|
@@ -429,11 +460,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
|
|
|
429
460
|
so if you value the work I am doing, I need your support.
|
|
430
461
|
Please consider sponsoring me or the project.
|
|
431
462
|
|
|
432
|
-
To join the community or get help
|
|
463
|
+
To join the community or get help, use the RubyForum or Discord.
|
|
433
464
|
|
|
465
|
+
[![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
434
466
|
[![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
435
467
|
|
|
436
|
-
To say "thanks!" ☝️ Join the
|
|
468
|
+
To say "thanks!" ☝️ Join the community or 👇️ send money.
|
|
437
469
|
|
|
438
470
|
[![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
471
|
|
|
@@ -460,12 +492,8 @@ Thanks for RTFM. ☺️
|
|
|
460
492
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
461
493
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
462
494
|
[🖇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
495
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
466
496
|
[🖇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
497
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
470
498
|
[🖇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
499
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -478,11 +506,14 @@ Thanks for RTFM. ☺️
|
|
|
478
506
|
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
479
507
|
[✉️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
508
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
509
|
+
[✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
|
|
510
|
+
[✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
|
|
511
|
+
[✉️ruby-forum]: https://www.rubyforum.org/tag/ruby-oauth
|
|
481
512
|
|
|
482
513
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
483
514
|
[⛳️gem-namespace]: https://github.com/ruby-oauth/snaky_hash
|
|
484
515
|
[⛳️namespace-img]: https://img.shields.io/badge/namespace-SnakyHash-3C2D2D.svg?style=square&logo=ruby&logoColor=white
|
|
485
|
-
[⛳️gem-name]: https://
|
|
516
|
+
[⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/snaky_hash
|
|
486
517
|
[⛳️name-img]: https://img.shields.io/badge/name-snaky__hash-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
|
|
487
518
|
[⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/snaky_hash.svg
|
|
488
519
|
[⛳️tag]: https://github.com/ruby-oauth/snaky_hash/releases
|
|
@@ -523,7 +554,7 @@ Thanks for RTFM. ☺️
|
|
|
523
554
|
[📜src-gl]: https://gitlab.com/ruby-oauth/snaky_hash
|
|
524
555
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
525
556
|
[📜src-cb]: https://codeberg.org/ruby-oauth/snaky_hash
|
|
526
|
-
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=
|
|
557
|
+
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
|
|
527
558
|
[📜src-gh]: https://github.com/ruby-oauth/snaky_hash
|
|
528
559
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
529
560
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
@@ -531,9 +562,9 @@ Thanks for RTFM. ☺️
|
|
|
531
562
|
[📜gh-wiki]: https://github.com/ruby-oauth/snaky_hash/wiki
|
|
532
563
|
[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
|
|
533
564
|
[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
|
|
534
|
-
[👽dl-rank]: https://
|
|
535
|
-
[👽dl-ranki]: https://img.shields.io/gem/
|
|
536
|
-
[👽version]: https://
|
|
565
|
+
[👽dl-rank]: https://clickgems.clickhouse.com/dashboard/snaky_hash
|
|
566
|
+
[👽dl-ranki]: https://img.shields.io/gem/dt/snaky_hash.svg
|
|
567
|
+
[👽version]: https://clickgems.clickhouse.com/dashboard/snaky_hash
|
|
537
568
|
[👽versioni]: https://img.shields.io/gem/v/snaky_hash.svg
|
|
538
569
|
[🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash
|
|
539
570
|
[🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/maintainability.svg
|
|
@@ -555,11 +586,12 @@ Thanks for RTFM. ☺️
|
|
|
555
586
|
[🚎jruby-9.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.2.yml
|
|
556
587
|
[🚎jruby-9.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.3.yml
|
|
557
588
|
[🚎jruby-9.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.4.yml
|
|
589
|
+
[🚎jruby-10.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-10.0.yml
|
|
558
590
|
[🚎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
591
|
[🚎truby-23.1-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-23.1.yml
|
|
561
592
|
[🚎truby-24.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-24.2.yml
|
|
562
593
|
[🚎truby-25.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-25.0.yml
|
|
594
|
+
[🚎truby-33.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-33.0.yml
|
|
563
595
|
[🚎2-cov-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/coverage.yml
|
|
564
596
|
[🚎2-cov-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/coverage.yml/badge.svg
|
|
565
597
|
[🚎3-hd-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/heads.yml
|
|
@@ -591,18 +623,18 @@ Thanks for RTFM. ☺️
|
|
|
591
623
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
592
624
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
593
625
|
[💎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
|
|
595
626
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
596
627
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
597
628
|
[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
598
|
-
[💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
599
629
|
[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
600
630
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
601
631
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
632
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
602
633
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
603
634
|
[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
604
635
|
[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
605
636
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
637
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
606
638
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
607
639
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
608
640
|
[🤝gh-issues]: https://github.com/ruby-oauth/snaky_hash/issues
|
|
@@ -636,7 +668,7 @@ Thanks for RTFM. ☺️
|
|
|
636
668
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
637
669
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
638
670
|
[📄license]: LICENSE.md
|
|
639
|
-
[📄license-ref]: MIT.md
|
|
671
|
+
[📄license-ref]: https://github.com/ruby-oauth/snaky_hash/blob/main/MIT.md
|
|
640
672
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
641
673
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
642
674
|
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
|
@@ -659,7 +691,7 @@ Thanks for RTFM. ☺️
|
|
|
659
691
|
| Package | snaky_hash |
|
|
660
692
|
| Description | 🔮 A Hashie::Mash joint to make #snakelife better |
|
|
661
693
|
| Homepage | https://github.com/ruby-oauth/snaky_hash |
|
|
662
|
-
| Source | https://github.com/ruby-oauth/snaky_hash
|
|
694
|
+
| Source | https://github.com/ruby-oauth/snaky_hash |
|
|
663
695
|
| License | `MIT` |
|
|
664
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
696
|
+
| Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/snaky_hash, https://www.buymeacoffee.com/pboling |
|
|
665
697
|
<!-- kettle-jem:metadata:end -->
|
|
@@ -22,12 +22,12 @@ module SnakyHash
|
|
|
22
22
|
extended_module = Modulizer.to_extended_mod
|
|
23
23
|
base.extend(extended_module)
|
|
24
24
|
base.include(ConvenienceInstanceMethods)
|
|
25
|
-
# :
|
|
25
|
+
# simplecov:disable
|
|
26
26
|
# This will be run in CI on Ruby 2.3, but we only collect coverage from current Ruby
|
|
27
27
|
unless base.method_defined?(:transform_values)
|
|
28
28
|
base.include(BackportedInstanceMethods)
|
|
29
29
|
end
|
|
30
|
-
# :
|
|
30
|
+
# simplecov:enable
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
@@ -87,7 +87,7 @@ module SnakyHash
|
|
|
87
87
|
|
|
88
88
|
# Provides backported methods for older Ruby versions
|
|
89
89
|
module BackportedInstanceMethods
|
|
90
|
-
# :
|
|
90
|
+
# simplecov:disable
|
|
91
91
|
# Transforms values of a hash using the given block
|
|
92
92
|
#
|
|
93
93
|
# @yield [Object] block to transform each value
|
|
@@ -105,7 +105,7 @@ module SnakyHash
|
|
|
105
105
|
end
|
|
106
106
|
result
|
|
107
107
|
end
|
|
108
|
-
# :
|
|
108
|
+
# simplecov:enable
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
# Provides convenient instance methods for serialization
|
|
@@ -189,11 +189,11 @@ module SnakyHash
|
|
|
189
189
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.7")
|
|
190
190
|
res
|
|
191
191
|
else
|
|
192
|
-
# :
|
|
192
|
+
# simplecov:disable
|
|
193
193
|
# In Ruby <= 2.6 Hash#transform_values returned a new vanilla Hash,
|
|
194
194
|
# rather than a hash of the class being transformed.
|
|
195
195
|
self[res]
|
|
196
|
-
# :
|
|
196
|
+
# simplecov:enable
|
|
197
197
|
end
|
|
198
198
|
end
|
|
199
199
|
|
data/lib/snaky_hash/snake.rb
CHANGED
|
@@ -56,7 +56,7 @@ module SnakyHash
|
|
|
56
56
|
def to_mod(key_type)
|
|
57
57
|
Module.new do
|
|
58
58
|
case key_type
|
|
59
|
-
when :string
|
|
59
|
+
when :string
|
|
60
60
|
# Converts a key to a string if it is symbolizable, after underscoring
|
|
61
61
|
#
|
|
62
62
|
# @note checks for to_sym instead of to_s, because nearly everything responds_to?(:to_s)
|
|
@@ -67,7 +67,7 @@ module SnakyHash
|
|
|
67
67
|
# @param key [Object] the key to convert
|
|
68
68
|
# @return [String, Object] the converted key or original if not convertible
|
|
69
69
|
define_method(:convert_key) { |key| key.respond_to?(:to_sym) ? underscore_string(key.to_s) : key }
|
|
70
|
-
when :symbol
|
|
70
|
+
when :symbol
|
|
71
71
|
# Converts a key to a symbol if possible, after underscoring
|
|
72
72
|
#
|
|
73
73
|
# @param key [Object] the key to convert
|
data/lib/snaky_hash/version.rb
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module SnakyHash
|
|
4
|
+
# Version namespace for this gem.
|
|
4
5
|
module Version
|
|
5
|
-
|
|
6
|
+
# Current gem version.
|
|
7
|
+
VERSION = "2.0.8"
|
|
6
8
|
end
|
|
9
|
+
# Current gem version exposed at the traditional constant location.
|
|
7
10
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
8
11
|
end
|
data/lib/snaky_hash.rb
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
require "hashie"
|
|
5
5
|
require "version_gem"
|
|
6
6
|
|
|
7
|
-
require_relative "snaky_hash/version"
|
|
8
7
|
require_relative "snaky_hash/extensions"
|
|
9
8
|
require_relative "snaky_hash/serializer"
|
|
10
9
|
require_relative "snaky_hash/snake"
|
|
11
10
|
require_relative "snaky_hash/string_keyed"
|
|
12
11
|
require_relative "snaky_hash/symbol_keyed"
|
|
12
|
+
require_relative "snaky_hash/version"
|
|
13
13
|
|
|
14
14
|
# SnakyHash provides hash-like objects with automatic key conversion capabilities
|
|
15
15
|
#
|
|
@@ -37,6 +37,7 @@ end
|
|
|
37
37
|
# Enable version introspection via VersionGem
|
|
38
38
|
#
|
|
39
39
|
# @api private
|
|
40
|
+
|
|
40
41
|
SnakyHash::Version.class_eval do
|
|
41
42
|
extend VersionGem::Basic
|
|
42
43
|
end
|
data/sig/snaky_hash.rbs
CHANGED
data.tar.gz.sig
CHANGED
|
Binary file
|