snaky_hash 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a4ebce56adbdd1bb1cd6ac0fe46f3b891e0c0cf689ec611e6ca00e03c503fc1
4
- data.tar.gz: ae1ffc55d9c653904a2c65bdfeb1b1724c6bce5eab251a225b036baaa5c165c5
3
+ metadata.gz: 6994e51a3a7343a5b2b2b1d0d055721203ed81764991032a0f81ae6c2931646f
4
+ data.tar.gz: 8453695e75b616782ab21c4cef71fc3870c1a1984b7c7f477babde05c2eef252
5
5
  SHA512:
6
- metadata.gz: 21e5beae61652b1307f346b676618562e1a713ff3db552e6dfc379683088e6e9de721eaca35dd32788564c77113d015af0d592def73697a2b25b5d8258a337b7
7
- data.tar.gz: 26327dc66ec45f4ab558e1cd383615107a72587b700df71837302ddef530d7b83acd5b70fb9601ad2c14f3d9c26290c956e99e941f1ce0568fed075317dacd81
6
+ metadata.gz: 0516c0b68ff581232463f5f6d81802fe3f2314693ce9270ce56d677bf62090163b5663bbb4a4e1d8ede5c26d9c51404cc1fa03005509a399b17e98cc4536aea2
7
+ data.tar.gz: 26816588362b496f9753f8087aabf650a8eaf024038e8f55e5216ad112d2b2c61f1f8ebcc225e184618e822c62a3e9f183bd4635c5c76ce8039bc209e922d860
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,29 +1,62 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
5
  The format (since v2) is based on [Keep a Changelog v1](https://keepachangelog.com/en/1.0.0/),
5
6
  and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.0.0.html).
6
7
 
7
8
  ## [Unreleased]
9
+
8
10
  ### Added
11
+
9
12
  ### Changed
13
+
10
14
  ### Deprecated
15
+
11
16
  ### Removed
17
+
12
18
  ### Fixed
19
+
13
20
  ### Security
14
21
 
22
+ ## [2.0.4] - 2026-05-16
23
+
24
+ - TAG: [v2.0.4][2.0.4t]
25
+ - COVERAGE: 100.00% -- 133/133 lines in 7 files
26
+ - BRANCH COVERAGE: 100.00% -- 38/38 branches in 7 files
27
+ - 100.00% documented
28
+
29
+ ### Added
30
+
31
+ - Incident Response Plan in IRP.md
32
+ - SnakyHash::VERSION (Traditional Constant Location)
33
+ - kettle-dev & kettle-test dev harnesses
34
+
35
+ ### Changed
36
+
37
+ - Contributor Conenant updated to version 2.1
38
+
39
+ ### Fixed
40
+
41
+ - Specs
42
+
15
43
  ## [2.0.3] - 2025-05-23
44
+
16
45
  - TAG: [v2.0.3][2.0.3t]
17
46
  - COVERAGE: 100.00% -- 132/132 lines in 7 files
18
47
  - BRANCH COVERAGE: 100.00% -- 38/38 branches in 7 files
19
48
  - 100.00% documented
49
+
20
50
  ### Added
51
+
21
52
  - `#dump` instance method injected by `extend SnakyHash::Serializer` (@pboling)
22
53
  - `dump_hash_extensions` - new feature, analogous to `load_hash_extensions` (@pboling)
23
54
  - `dump_value_extensions` - alternate name for `dump_extensions` (@pboling)
24
55
  - `load_value_extensions` - alternate name for `load_extensions` (@pboling)
25
56
  - Clarifying documentation (@pboling)
57
+
26
58
  ### Fixed
59
+
27
60
  - [gh4](https://github.com/oauth-xx/snaky_hash/pull/4) - Serializer extensions dump and load empty values properly (@pboling)
28
61
  - Fixed `dump_extensions`, `load_extensions`, `load_hash_extensions`
29
62
  - Intended usage is primarily JSON, and oauth2 gem
@@ -31,11 +64,14 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
31
64
  - Previous logic was inherited from design decisions made by `serialized_hashie` gem; doesn't apply here
32
65
 
33
66
  ## [2.0.2] - 2025-05-21
67
+
34
68
  - TAG: [v2.0.2][2.0.2t]
35
69
  - COVERAGE: 100.00% -- 119/119 lines in 7 files
36
70
  - BRANCH COVERAGE: 100.00% -- 35/35 branches in 7 files
37
71
  - 100.00% documented
72
+
38
73
  ### Added
74
+
39
75
  - Gem is signed by 20-year cert (@pboling)
40
76
  - Expires 2045-04-29
41
77
  - Gemspec metadata updates (@pboling)
@@ -48,42 +84,62 @@ and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.
48
84
  - 100% documented! (@pboling)
49
85
 
50
86
  ## [2.0.1] - 2022-09-23
87
+
51
88
  - TAG: [v2.0.1][2.0.1t]
89
+
52
90
  ### Added
91
+
53
92
  - Certificate for signing gem releases (@pboling)
54
93
  - Gemspec metadata (@pboling)
55
94
  - funding_uri
56
95
  - mailing_list_uri
57
96
  - Checksums for released gems (@pboling)
97
+
58
98
  ### Changed
99
+
59
100
  - Gem releases are now cryptographically signed (@pboling)
60
101
 
61
102
  ## [2.0.0] - 2022-08-29
103
+
62
104
  - TAG: [v2.0.0][2.0.0t]
105
+
63
106
  ### Changed
107
+
64
108
  - **BREAKING**: `SnakeHash::Snake` is now a mixin, now with support for symbol or string keys
65
109
  ```ruby
66
110
  class MySnakedHash < Hashie::Mash
67
111
  include SnakyHash::Snake.new(key_type: :string) # or :symbol
68
112
  end
69
113
  ```
114
+
70
115
  ### Added
116
+
71
117
  - `SnakyHash::StringKeyed`: a Hashie::Mash class with snake-cased String keys
72
118
  - `SnakyHash::SymbolKeyed`: a Hashie::Mash class with snake-cased Symbol keys
73
119
 
74
120
  ## [1.0.1] - 2022-08-26
121
+
75
122
  - TAG: [v1.0.1][1.0.1t]
123
+
76
124
  ### Added
125
+
77
126
  - Missing LICENSE.txt file to release
127
+
78
128
  ### Removed
129
+
79
130
  - Accidentally added bundler dependency (vestige of transpec process) is now removed
80
131
 
81
132
  ## [1.0.0] - 2022-08-26
133
+
82
134
  - TAG: [v1.0.0][1.0.0t]
135
+
83
136
  ### Added
137
+
84
138
  - Initial release
85
139
 
86
- [Unreleased]: https://gitlab.com/oauth-xx/snaky_hash/-/compare/v2.0.3...main
140
+ [Unreleased]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.4...HEAD
141
+ [2.0.4]: https://github.com/ruby-oauth/snaky_hash/compare/v2.0.3...v2.0.4
142
+ [2.0.4t]: https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.4
87
143
  [2.0.3]: https://gitlab.com/oauth-xx/snaky_hash/-/compare/v2.0.2...v2.0.3
88
144
  [2.0.3t]: https://gitlab.com/oauth-xx/snaky_hash/-/releases/tag/v2.0.3
89
145
  [2.0.2]: https://gitlab.com/oauth-xx/snaky_hash/-/compare/v2.0.1...v2.0.2
data/CITATION.cff ADDED
@@ -0,0 +1,23 @@
1
+ cff-version: 1.2.0
2
+ title: snaky_hash
3
+ message: >-
4
+ If you use this work and you want to cite it,
5
+ then you can use the metadata from this file.
6
+ type: software
7
+ authors:
8
+ - given-names: Peter Hurn
9
+ family-names: Boling
10
+ email: peter@railsbling.com
11
+ affiliation: railsbling.com
12
+ orcid: 'https://orcid.org/0009-0008-8519-441X'
13
+ - given-names: Aboling0
14
+ email: aboling@railsbling.com
15
+ affiliation: railsbling.com
16
+ identifiers:
17
+ - type: url
18
+ value: 'https://github.com/oauth-xx/snaky_hash'
19
+ description: snaky_hash
20
+ repository-code: 'https://github.com/oauth-xx/snaky_hash'
21
+ abstract: >-
22
+ snaky_hash
23
+ license: See license file
data/CODE_OF_CONDUCT.md CHANGED
@@ -7,8 +7,8 @@ We as members, contributors, and leaders pledge to make participation in our
7
7
  community a harassment-free experience for everyone, regardless of age, body
8
8
  size, visible or invisible disability, ethnicity, sex characteristics, gender
9
9
  identity and expression, level of experience, education, socio-economic status,
10
- nationality, personal appearance, race, religion, or sexual identity
11
- and orientation.
10
+ nationality, personal appearance, race, caste, color, religion, or sexual
11
+ identity and orientation.
12
12
 
13
13
  We pledge to act and interact in ways that contribute to an open, welcoming,
14
14
  diverse, inclusive, and healthy community.
@@ -23,17 +23,17 @@ community include:
23
23
  * Giving and gracefully accepting constructive feedback
24
24
  * Accepting responsibility and apologizing to those affected by our mistakes,
25
25
  and learning from the experience
26
- * Focusing on what is best not just for us as individuals, but for the
27
- overall community
26
+ * Focusing on what is best not just for us as individuals, but for the overall
27
+ community
28
28
 
29
29
  Examples of unacceptable behavior include:
30
30
 
31
- * The use of sexualized language or imagery, and sexual attention or
32
- advances of any kind
31
+ * The use of sexualized language or imagery, and sexual attention or advances of
32
+ any kind
33
33
  * Trolling, insulting or derogatory comments, and personal or political attacks
34
34
  * Public or private harassment
35
- * Publishing others' private information, such as a physical or email
36
- address, without their explicit permission
35
+ * Publishing others' private information, such as a physical or email address,
36
+ without their explicit permission
37
37
  * Other conduct which could reasonably be considered inappropriate in a
38
38
  professional setting
39
39
 
@@ -53,7 +53,7 @@ decisions when appropriate.
53
53
 
54
54
  This Code of Conduct applies within all community spaces, and also applies when
55
55
  an individual is officially representing the community in public spaces.
56
- Examples of representing our community include using an official e-mail address,
56
+ Examples of representing our community include using an official email address,
57
57
  posting via an official social media account, or acting as an appointed
58
58
  representative at an online or offline event.
59
59
 
@@ -61,7 +61,7 @@ representative at an online or offline event.
61
61
 
62
62
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
63
63
  reported to the community leaders responsible for enforcement at
64
- [INSERT CONTACT METHOD].
64
+ [![Contact BDFL][🚂bdfl-contact-img]][🚂bdfl-contact].
65
65
  All complaints will be reviewed and investigated promptly and fairly.
66
66
 
67
67
  All community leaders are obligated to respect the privacy and security of the
@@ -83,15 +83,15 @@ behavior was inappropriate. A public apology may be requested.
83
83
 
84
84
  ### 2. Warning
85
85
 
86
- **Community Impact**: A violation through a single incident or series
87
- of actions.
86
+ **Community Impact**: A violation through a single incident or series of
87
+ actions.
88
88
 
89
89
  **Consequence**: A warning with consequences for continued behavior. No
90
90
  interaction with the people involved, including unsolicited interaction with
91
91
  those enforcing the Code of Conduct, for a specified period of time. This
92
92
  includes avoiding interactions in community spaces as well as external channels
93
- like social media. Violating these terms may lead to a temporary or
94
- permanent ban.
93
+ like social media. Violating these terms may lead to a temporary or permanent
94
+ ban.
95
95
 
96
96
  ### 3. Temporary Ban
97
97
 
@@ -107,27 +107,29 @@ Violating these terms may lead to a permanent ban.
107
107
  ### 4. Permanent Ban
108
108
 
109
109
  **Community Impact**: Demonstrating a pattern of violation of community
110
- standards, including sustained inappropriate behavior, harassment of an
110
+ standards, including sustained inappropriate behavior, harassment of an
111
111
  individual, or aggression toward or disparagement of classes of individuals.
112
112
 
113
- **Consequence**: A permanent ban from any sort of public interaction within
114
- the community.
113
+ **Consequence**: A permanent ban from any sort of public interaction within the
114
+ community.
115
115
 
116
116
  ## Attribution
117
117
 
118
118
  This Code of Conduct is adapted from the [Contributor Covenant][homepage],
119
- version 2.0, available at
120
- [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
119
+ version 2.1, available at
120
+ [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
121
121
 
122
122
  Community Impact Guidelines were inspired by
123
123
  [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
124
124
 
125
125
  For answers to common questions about this code of conduct, see the FAQ at
126
- [https://www.contributor-covenant.org/faq][FAQ]. Translations are available
127
- at [https://www.contributor-covenant.org/translations][translations].
126
+ [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
127
+ [https://www.contributor-covenant.org/translations][translations].
128
128
 
129
129
  [homepage]: https://www.contributor-covenant.org
130
- [v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
130
+ [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
131
131
  [Mozilla CoC]: https://github.com/mozilla/diversity
132
132
  [FAQ]: https://www.contributor-covenant.org/faq
133
133
  [translations]: https://www.contributor-covenant.org/translations
134
+ [🚂bdfl-contact]: http://www.railsbling.com/contact
135
+ [🚂bdfl-contact-img]: https://img.shields.io/badge/Contact-BDFL-0093D0.svg?style=flat&logo=rubyonrails&logoColor=red
data/IRP.md ADDED
@@ -0,0 +1,107 @@
1
+ # Incident Response Plan (IRP)
2
+
3
+ Status: Draft
4
+
5
+ ## Purpose
6
+
7
+ This Incident Response Plan (IRP) defines the steps the project maintainer(s) will follow when handling security incidents related to the `snaky_hash` gem. It is written for a small project with a single primary maintainer and is intended to be practical, concise, and actionable.
8
+
9
+ ## Scope
10
+
11
+ Applies to security incidents that affect the `snaky_hash` codebase, releases (gems), CI/CD infrastructure related to building and publishing the gem, repository credentials, or any compromise of project infrastructure that could impact users.
12
+
13
+ ## Key assumptions
14
+ - This project is maintained primarily by a single maintainer.
15
+ - Public vulnerability disclosure is handled via Tidelift (see `SECURITY.md`).
16
+ - The maintainer will act as incident commander unless otherwise delegated.
17
+
18
+ ## Contact & Roles
19
+
20
+ - Incident Commander: Primary maintainer (repo owner). Responsible for coordinating triage, remediation, and communications.
21
+ - Secondary Contact: (optional) A trusted collaborator or organization contact if available.
22
+
23
+ ### If you are an external reporter
24
+ - Do not publicly disclose details of an active vulnerability before coordination via Tidelift.
25
+ - See `SECURITY.md` for Tidelift disclosure instructions. If the reporter has questions and cannot use Tidelift, they may open a direct encrypted report as described in `SECURITY.md` (if available) or email the maintainer contact listed in the repository.
26
+
27
+ ## Incident Handling Workflow (high level)
28
+ 1. Identification & Reporting
29
+ - Reports may arrive via Tidelift, issue tracker, direct email, or third-party advisories.
30
+ - Immediately acknowledge receipt (within 24-72 hours) via the reporting channel.
31
+
32
+ 2. Triage & Initial Assessment (first 72 hours)
33
+ - Confirm the report is not duplicative and gather: reproducer, affected versions, attack surface, exploitability, and CVSS-like severity estimate.
34
+ - Verify the issue against the codebase and reproduce locally if possible.
35
+ - Determine scope: which versions are affected, whether the issue is in code paths executed in common setups, and whether a workaround exists.
36
+
37
+ 3. Containment & Mitigation
38
+ - If a simple mitigation or workaround (configuration change, safe default, or recommended upgrade) exists, document it clearly in the issue/Tidelift advisory.
39
+ - If immediate removal of a release is required (rare), consult Tidelift for coordinated takedown and notify package hosts if applicable.
40
+
41
+ 4. Remediation & Patch
42
+ - Prepare a fix in a branch with tests and changelog entries. Prefer minimal, well-tested changes.
43
+ - Include tests that reproduce the faulty behavior and demonstrate the fix.
44
+ - Hardening: add fuzz tests, input validation, or additional checks as appropriate.
45
+
46
+ 5. Release & Disclosure
47
+ - Coordinate disclosure through Tidelift per `SECURITY.md` timelines. Aim for a coordinated disclosure and patch release to minimize risk to users.
48
+ - Publish a patch release (increment gem version) and an advisory via Tidelift.
49
+ - Update `CHANGELOG.md` and repository release notes with non-sensitive details.
50
+
51
+ 6. Post-Incident
52
+ - Produce a short postmortem: timeline, root cause, actions taken, and follow-ups.
53
+ - Add/adjust tests and CI checks to prevent regressions.
54
+ - If credentials or infrastructure were compromised, rotate secrets and audit access.
55
+
56
+ ## Severity classification (guidance)
57
+ - High/Critical: Remote code execution, data exfiltration, or any vulnerability that can be exploited without user interaction. Immediate action and prioritized patching.
58
+ - Medium: Privilege escalation, sensitive information leaks that require specific conditions. Patch in the next release cycle with advisory.
59
+ - Low: Minor information leaks, UI issues, or non-exploitable bugs. Fix normally and include in the next scheduled release.
60
+
61
+ ## Preservation of evidence
62
+ - Preserve all reporter-provided data, logs, and reproducer code in a secure location (local encrypted storage or private branch) for the investigation.
63
+ - Do not publish evidence that would enable exploitation before coordinated disclosure.
64
+
65
+ ## Communication templates
66
+ Acknowledgement (to reporter)
67
+
68
+ "Thank you for reporting this issue. I've received your report and will triage it within 72 hours. If you can, please provide reproduction steps, affected versions, and any exploit PoC. I will coordinate disclosure through Tidelift per the project's security policy."
69
+
70
+ Public advisory (after patch is ready)
71
+
72
+ "A security advisory for snaky_hash (versions X.Y.Z) has been published via Tidelift. Please upgrade to version A.B.C which patches [brief description]. See the advisory for details and recommended mitigations."
73
+
74
+ ## Runbook: Quick steps for a maintainer to patch and release
75
+ 1. Create a branch: `git checkout -b fix/security-brief-description`
76
+ 2. Reproduce the issue locally and add a regression spec in `spec/`.
77
+ 3. Implement the fix and run the test suite: `bundle exec rspec` (or the project's preferred test command).
78
+ 4. Bump version in `lib/snaky_hash/version.rb` following semantic versioning.
79
+ 5. Update `CHANGELOG.md` with an entry describing the fix (avoid exploit details).
80
+ 6. Commit and push the branch, open a PR, and merge after approvals.
81
+ 7. Build and push the gem: `gem build snaky_hash.gemspec && gem push pkg/...` (coordinate with Tidelift before public push if disclosure is coordinated).
82
+ 8. Publish a release on GitHub and ensure the Tidelift advisory is posted.
83
+
84
+ ## Operational notes
85
+ - Secrets: Use local encrypted storage for any sensitive reporter data. If repository or CI secrets may be compromised, rotate them immediately and update dependent services.
86
+ - Access control: Limit who can publish gems and who has admin access to the repo. Keep an up-to-date list of collaborators in a secure place.
87
+
88
+ ## Legal & regulatory
89
+ - If the incident involves user data or has legal implications, consult legal counsel or the maintainers' employer as appropriate. The maintainer should document the timeline and all communications.
90
+
91
+ ## Retrospective & continuous improvement
92
+ After an incident, perform a brief post-incident review covering:
93
+ - What happened and why
94
+ - What was done to contain and remediate
95
+ - What tests or process changes will prevent recurrence
96
+ - Assign owners and deadlines for follow-up tasks
97
+
98
+ ## References
99
+ - See `SECURITY.md` for the project's official disclosure channel (Tidelift).
100
+
101
+ ## Appendix: Example checklist for an incident
102
+ - [ ] Acknowledge report to reporter (24-72 hours)
103
+ - [ ] Reproduce and classify severity
104
+ - [ ] Prepare and test a fix in a branch
105
+ - [ ] Coordinate disclosure via Tidelift
106
+ - [ ] Publish patch release and advisory
107
+ - [ ] Postmortem and follow-up actions
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2022, 2025 Peter Boling
3
+ Copyright (c) 2022, 2025-2026 Peter Boling
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 🐍 SnakyHash
2
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]
3
+ [![Version][👽versioni]][👽version] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![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
4
 
5
5
  ---
6
6
 
@@ -119,7 +119,7 @@ and are developed in tight collaboration with the oauth and oauth2 gems.
119
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
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
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] |
122
+ | Documentation | [![Discussion][⛳gg-discussions-img]][⛳gg-discussions] [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![BDFL Blog][🚂bdfl-blog-img]][🚂bdfl-blog] [![Wiki][📜wiki-img]][📜wiki] |
123
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
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
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] |
@@ -347,8 +347,8 @@ See [CONTRIBUTING.md][🤝contributing] for more detailed instructions.
347
347
 
348
348
  ### 🪇 Code of Conduct
349
349
 
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].
350
+ Everyone interacting with this project's codebases, issue trackers,
351
+ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].
352
352
 
353
353
  ## 🌈 Contributors
354
354
 
@@ -415,7 +415,7 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
415
415
 
416
416
  <ul>
417
417
  <li>
418
- 2022, 2025 Peter H. Boling, of
418
+ 2022, 2025-2026 Peter H. Boling, of
419
419
  <a href="https://railsbling.com">
420
420
  RailsBling.com
421
421
  <picture>
@@ -489,8 +489,6 @@ or one of the others at the head of this README.
489
489
  [📜wiki-img]: https://img.shields.io/badge/wiki-examples-943CD2.svg?style=for-the-badge&logo=Wiki&logoColor=white
490
490
  [👽dl-rank]: https://rubygems.org/gems/snaky_hash
491
491
  [👽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
492
  [👽version]: https://rubygems.org/gems/snaky_hash
495
493
  [👽versioni]: https://img.shields.io/gem/v/snaky_hash.svg
496
494
  [🔑qlty-mnt]: https://qlty.sh/gh/oauth-xx/projects/snaky_hash
@@ -501,8 +499,6 @@ or one of the others at the head of this README.
501
499
  [🔑codecovi♻️]: https://codecov.io/gh/oauth-xx/snaky_hash/graph/badge.svg?token=XqaZixl4ss
502
500
  [🔑coveralls]: https://coveralls.io/github/oauth-xx/snaky_hash?branch=main
503
501
  [🔑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
502
  [🖐codeQL]: https://github.com/oauth-xx/snaky_hash/security/code-scanning
507
503
  [🖐codeQL-img]: https://github.com/oauth-xx/snaky_hash/actions/workflows/codeql-analysis.yml/badge.svg
508
504
  [🚎1-an-wf]: https://github.com/oauth-xx/snaky_hash/actions/workflows/ancient.yml
@@ -618,4 +614,4 @@ CodeCov currently fails to parse the coverage upload.
618
614
 
619
615
  [![Coverage Graph][🔑codecov-g♻️]][🔑codecov]
620
616
 
621
- </details>
617
+ </details>
data/REEK ADDED
@@ -0,0 +1,27 @@
1
+ spec/snaky_hash/snake_spec.rb -- 1 warning:
2
+ [4]:IrresponsibleModule: TheSnakedHash has no descriptive comment [https://github.com/troessner/reek/blob/v6.5.0/docs/Irresponsible-Module.md]
3
+ lib/snaky_hash/extensions.rb -- 1 warning:
4
+ [11]:InstanceVariableAssumption: SnakyHash::Extensions assumes too much for instance variable '@extensions' [https://github.com/troessner/reek/blob/v6.5.0/docs/Instance-Variable-Assumption.md]
5
+ lib/snaky_hash/serializer.rb -- 7 warnings:
6
+ [132]:NilCheck: SnakyHash::Serializer#blank? performs a nil-check [https://github.com/troessner/reek/blob/v6.5.0/docs/Nil-Check.md]
7
+ [180]:TooManyStatements: SnakyHash::Serializer#load_hash has approx 6 statements [https://github.com/troessner/reek/blob/v6.5.0/docs/Too-Many-Statements.md]
8
+ [99]:TooManyStatements: SnakyHash::Serializer::BackportedInstanceMethods#transform_values has approx 7 statements [https://github.com/troessner/reek/blob/v6.5.0/docs/Too-Many-Statements.md]
9
+ [58]:TooManyStatements: SnakyHash::Serializer::Modulizer#to_extended_mod has approx 13 statements [https://github.com/troessner/reek/blob/v6.5.0/docs/Too-Many-Statements.md]
10
+ [170]:UncommunicativeVariableName: SnakyHash::Serializer#dump_value has the variable name 'v' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md]
11
+ [214]:UncommunicativeVariableName: SnakyHash::Serializer#load_value has the variable name 'v' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md]
12
+ [131]:UtilityFunction: SnakyHash::Serializer#blank? doesn't depend on instance state (maybe move it to another class?) [https://github.com/troessner/reek/blob/v6.5.0/docs/Utility-Function.md]
13
+ lib/snaky_hash/snake.rb -- 11 warnings:
14
+ [30]:BooleanParameter: SnakyHash::Snake#initialize has boolean parameter 'serializer' [https://github.com/troessner/reek/blob/v6.5.0/docs/Boolean-Parameter.md]
15
+ [69, 75]:DuplicateMethodCall: SnakyHash::Snake::SnakyModulizer#to_mod calls 'define_method(:convert_key)' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md]
16
+ [69, 75]:DuplicateMethodCall: SnakyHash::Snake::SnakyModulizer#to_mod calls 'key.respond_to?(:to_sym)' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md]
17
+ [69, 75]:DuplicateMethodCall: SnakyHash::Snake::SnakyModulizer#to_mod calls 'key.to_s' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md]
18
+ [87, 91]:DuplicateMethodCall: SnakyHash::Snake::SnakyModulizer#to_mod calls 'self.class' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md]
19
+ [69, 75]:DuplicateMethodCall: SnakyHash::Snake::SnakyModulizer#to_mod calls 'underscore_string(key.to_s)' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md]
20
+ [88, 90]:DuplicateMethodCall: SnakyHash::Snake::SnakyModulizer#to_mod calls 'val.dup' 2 times [https://github.com/troessner/reek/blob/v6.5.0/docs/Duplicate-Method-Call.md]
21
+ [69, 75]:ManualDispatch: SnakyHash::Snake::SnakyModulizer#to_mod manually dispatches method call [https://github.com/troessner/reek/blob/v6.5.0/docs/Manual-Dispatch.md]
22
+ [93]:NestedIterators: SnakyHash::Snake::SnakyModulizer#to_mod contains iterators nested 2 deep [https://github.com/troessner/reek/blob/v6.5.0/docs/Nested-Iterators.md]
23
+ [56]:TooManyStatements: SnakyHash::Snake::SnakyModulizer#to_mod has approx 17 statements [https://github.com/troessner/reek/blob/v6.5.0/docs/Too-Many-Statements.md]
24
+ [93]:UncommunicativeVariableName: SnakyHash::Snake::SnakyModulizer#to_mod has the variable name 'e' [https://github.com/troessner/reek/blob/v6.5.0/docs/Uncommunicative-Variable-Name.md]
25
+ .yard_gfm_support.rb -- 1 warning:
26
+ [9, 9]:FeatureEnvy: KramdownGfmDocument#initialize refers to 'options' more than self (maybe move it to another class?) [https://github.com/troessner/reek/blob/v6.5.0/docs/Feature-Envy.md]
27
+ 21 total warnings
File without changes
@@ -24,7 +24,7 @@ module SnakyHash
24
24
  base.include(ConvenienceInstanceMethods)
25
25
  # :nocov:
26
26
  # This will be run in CI on Ruby 2.3, but we only collect coverage from current Ruby
27
- unless base.instance_methods.include?(:transform_values)
27
+ unless base.method_defined?(:transform_values)
28
28
  base.include(BackportedInstanceMethods)
29
29
  end
30
30
  # :nocov:
File without changes
File without changes
File without changes
@@ -8,6 +8,7 @@ module SnakyHash
8
8
  # Current version of SnakyHash
9
9
  #
10
10
  # @return [String] the current version in semantic versioning format
11
- VERSION = "2.0.3"
11
+ VERSION = "2.0.4"
12
12
  end
13
+ VERSION = Version::VERSION # Traditional Constant Location
13
14
  end
data/lib/snaky_hash.rb CHANGED
File without changes
@@ -0,0 +1,4 @@
1
+ module SnakyHash
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
data.tar.gz.sig CHANGED
@@ -1,3 +1,4 @@
1
- ����
2
- ��#�e��Ycr�\�$��bo�φ�ᔻw뇀�7�@��o>mi�
3
- ��>�#+�qK�^���.�x�AY#�I&�d�!ԭKoc.+�߅"�H�}|�~�G�̣$0�㫏��< ���i��c&U��Shs�Ǖ�V�=!tsڼ-���;�(�DТI�p�})ʂ{]�%��"p��������X�U��O�pر,w��ZR��.o�@�M3%[LB#��Œ˷-��%wC��?֔�X�+��DL��m����^P�y\��Rx�g;g���C���Y3,"�\����_��8�W١q^N ��S�uY�)N /W��i|����xu�s9�Z�؍��2��
1
+ �m����U��4T7l`(~�0IJV�k ���T��Z���z(�gA(�)��l��4pe�YƱC&��>��������Ƞ�m~�@�(��a\�gw�iFx��4��~�:�`��\Yj��LQ��'s�;�D�?���/»:��*�()����;������ZϵPʱl���:�@�˶x=��jٍi2�'�)'�����A���֖,9�Yo��ؐs:�B�W��#
2
+ j�{���w����-.h��9�9l��셴|�p l�!�.���������0�f��I%E���[�og�/R�%���ǀF!�+���ι��ZGq�e��2�x�~cP].�m4Y�@�l�8XL
3
+ m��0�@�k9)
4
+ X5��b��>�
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snaky_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -35,7 +35,7 @@ cert_chain:
35
35
  DVjBtqT23eugOqQ73umLcYDZkc36vnqGxUBSsXrzY9pzV5gGr2I8YUxMqf6ATrZt
36
36
  L9nRqA==
37
37
  -----END CERTIFICATE-----
38
- date: 2025-05-23 00:00:00.000000000 Z
38
+ date: 1980-01-02 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: hashie
@@ -78,25 +78,33 @@ dependencies:
78
78
  - !ruby/object:Gem::Version
79
79
  version: '3'
80
80
  - !ruby/object:Gem::Dependency
81
- name: backports
81
+ name: kettle-dev
82
82
  requirement: !ruby/object:Gem::Requirement
83
83
  requirements:
84
84
  - - "~>"
85
85
  - !ruby/object:Gem::Version
86
- version: '3.25'
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: 3.25.1
86
+ version: '2.0'
90
87
  type: :development
91
88
  prerelease: false
92
89
  version_requirements: !ruby/object:Gem::Requirement
93
90
  requirements:
94
91
  - - "~>"
95
92
  - !ruby/object:Gem::Version
96
- version: '3.25'
97
- - - ">="
93
+ version: '2.0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: bundler-audit
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
98
99
  - !ruby/object:Gem::Version
99
- version: 3.25.1
100
+ version: 0.9.2
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: 0.9.2
100
108
  - !ruby/object:Gem::Dependency
101
109
  name: rake
102
110
  requirement: !ruby/object:Gem::Requirement
@@ -112,21 +120,47 @@ dependencies:
112
120
  - !ruby/object:Gem::Version
113
121
  version: '13.0'
114
122
  - !ruby/object:Gem::Dependency
115
- name: rspec
123
+ name: require_bench
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '1.0'
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 1.0.4
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.0'
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: 1.0.4
142
+ - !ruby/object:Gem::Dependency
143
+ name: appraisal2
116
144
  requirement: !ruby/object:Gem::Requirement
117
145
  requirements:
118
146
  - - "~>"
119
147
  - !ruby/object:Gem::Version
120
- version: '3.13'
148
+ version: '3.0'
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 3.0.6
121
152
  type: :development
122
153
  prerelease: false
123
154
  version_requirements: !ruby/object:Gem::Requirement
124
155
  requirements:
125
156
  - - "~>"
126
157
  - !ruby/object:Gem::Version
127
- version: '3.13'
158
+ version: '3.0'
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: 3.0.6
128
162
  - !ruby/object:Gem::Dependency
129
- name: rspec-block_is_expected
163
+ name: kettle-test
130
164
  requirement: !ruby/object:Gem::Requirement
131
165
  requirements:
132
166
  - - "~>"
@@ -134,7 +168,7 @@ dependencies:
134
168
  version: '1.0'
135
169
  - - ">="
136
170
  - !ruby/object:Gem::Version
137
- version: 1.0.6
171
+ version: 1.0.10
138
172
  type: :development
139
173
  prerelease: false
140
174
  version_requirements: !ruby/object:Gem::Requirement
@@ -144,34 +178,51 @@ dependencies:
144
178
  version: '1.0'
145
179
  - - ">="
146
180
  - !ruby/object:Gem::Version
147
- version: 1.0.6
181
+ version: 1.0.10
148
182
  - !ruby/object:Gem::Dependency
149
- name: rspec-pending_for
183
+ name: ruby-progressbar
150
184
  requirement: !ruby/object:Gem::Requirement
151
185
  requirements:
152
186
  - - "~>"
153
187
  - !ruby/object:Gem::Version
154
- version: '0.1'
188
+ version: '1.13'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '1.13'
196
+ - !ruby/object:Gem::Dependency
197
+ name: stone_checksums
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '1.0'
155
203
  - - ">="
156
204
  - !ruby/object:Gem::Version
157
- version: 0.1.17
205
+ version: 1.0.3
158
206
  type: :development
159
207
  prerelease: false
160
208
  version_requirements: !ruby/object:Gem::Requirement
161
209
  requirements:
162
210
  - - "~>"
163
211
  - !ruby/object:Gem::Version
164
- version: '0.1'
212
+ version: '1.0'
165
213
  - - ">="
166
214
  - !ruby/object:Gem::Version
167
- version: 0.1.17
215
+ version: 1.0.3
168
216
  - !ruby/object:Gem::Dependency
169
- name: stone_checksums
217
+ name: gitmoji-regex
170
218
  requirement: !ruby/object:Gem::Requirement
171
219
  requirements:
172
220
  - - "~>"
173
221
  - !ruby/object:Gem::Version
174
222
  version: '1.0'
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: 1.0.3
175
226
  type: :development
176
227
  prerelease: false
177
228
  version_requirements: !ruby/object:Gem::Requirement
@@ -179,25 +230,54 @@ dependencies:
179
230
  - - "~>"
180
231
  - !ruby/object:Gem::Version
181
232
  version: '1.0'
182
- description: 'A Hashie::Mash joint to make #snakelife better'
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: 1.0.3
236
+ - !ruby/object:Gem::Dependency
237
+ name: backports
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '3.25'
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: 3.25.1
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - "~>"
251
+ - !ruby/object:Gem::Version
252
+ version: '3.25'
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: 3.25.1
256
+ description: "\U0001F40D A Hashie::Mash joint to make #snakelife better"
183
257
  email:
184
- - peter.boling@gmail.com
258
+ - floss@galtzo.com
185
259
  - oauth-ruby@googlegroups.com
186
260
  executables: []
187
261
  extensions: []
188
262
  extra_rdoc_files:
189
263
  - CHANGELOG.md
264
+ - CITATION.cff
190
265
  - CODE_OF_CONDUCT.md
191
266
  - CONTRIBUTING.md
267
+ - IRP.md
192
268
  - LICENSE.txt
193
269
  - README.md
270
+ - REEK
194
271
  - SECURITY.md
195
272
  files:
196
273
  - CHANGELOG.md
274
+ - CITATION.cff
197
275
  - CODE_OF_CONDUCT.md
198
276
  - CONTRIBUTING.md
277
+ - IRP.md
199
278
  - LICENSE.txt
200
279
  - README.md
280
+ - REEK
201
281
  - SECURITY.md
202
282
  - lib/snaky_hash.rb
203
283
  - lib/snaky_hash/extensions.rb
@@ -206,30 +286,29 @@ files:
206
286
  - lib/snaky_hash/string_keyed.rb
207
287
  - lib/snaky_hash/symbol_keyed.rb
208
288
  - lib/snaky_hash/version.rb
209
- homepage: https://github.com/oauth-xx/snaky_hash
289
+ - sig/snaky_hash.rbs
290
+ homepage: https://github.com/ruby-oauth/snaky_hash
210
291
  licenses:
211
292
  - MIT
212
293
  metadata:
213
294
  homepage_uri: https://snaky-hash.galtzo.com/
214
- source_code_uri: https://github.com/oauth-xx/snaky_hash/releases/tag//v2.0.3
215
- changelog_uri: https://gitlab.com/oauth-xx/snaky_hash/-/blob/v2.0.3/CHANGELOG.md
216
- bug_tracker_uri: https://gitlab.com/oauth-xx/snaky_hash/-/issues
217
- documentation_uri: https://www.rubydoc.info/gems/snaky_hash/2.0.3
218
- wiki_uri: https://gitlab.com/oauth-xx/snaky_hash/-/wiki
295
+ source_code_uri: https://github.com/ruby-oauth/snaky_hash/tree/v2.0.4
296
+ changelog_uri: https://github.com/ruby-oauth/snaky_hash/blob/v2.0.4/CHANGELOG.md
297
+ bug_tracker_uri: https://github.com/ruby-oauth/snaky_hash/issues
298
+ documentation_uri: https://www.rubydoc.info/gems/snaky_hash/2.0.4
219
299
  mailing_list_uri: https://groups.google.com/g/oauth-ruby
220
- funding_uri: https://liberapay.com/pboling
300
+ funding_uri: https://github.com/sponsors/pboling
301
+ wiki_uri: https://gitlab.com/ruby-oauth/snaky_hash/-/wiki
221
302
  news_uri: https://www.railsbling.com/tags/snaky_hash
303
+ discord_uri: https://discord.gg/3qme4XHNKN
222
304
  rubygems_mfa_required: 'true'
223
305
  rdoc_options:
224
306
  - "--title"
225
- - snaky_hash - A very snaky hash
307
+ - "snaky_hash - \U0001F40D A very snaky hash"
226
308
  - "--main"
227
- - CHANGELOG.md
228
- - CODE_OF_CONDUCT.md
229
- - CONTRIBUTING.md
230
- - LICENSE.txt
231
309
  - README.md
232
- - SECURITY.md
310
+ - "--exclude"
311
+ - "^sig/"
233
312
  - "--line-numbers"
234
313
  - "--inline-source"
235
314
  - "--quiet"
@@ -246,7 +325,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
325
  - !ruby/object:Gem::Version
247
326
  version: '0'
248
327
  requirements: []
249
- rubygems_version: 3.6.9
328
+ rubygems_version: 4.0.11
250
329
  specification_version: 4
251
- summary: A very snaky hash
330
+ summary: "\U0001F40D A very snaky hash"
252
331
  test_files: []
metadata.gz.sig CHANGED
Binary file