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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +57 -1
- data/CITATION.cff +23 -0
- data/CODE_OF_CONDUCT.md +24 -22
- data/IRP.md +107 -0
- data/LICENSE.txt +1 -1
- data/README.md +6 -10
- data/REEK +27 -0
- data/lib/snaky_hash/extensions.rb +0 -0
- data/lib/snaky_hash/serializer.rb +1 -1
- data/lib/snaky_hash/snake.rb +0 -0
- data/lib/snaky_hash/string_keyed.rb +0 -0
- data/lib/snaky_hash/symbol_keyed.rb +0 -0
- data/lib/snaky_hash/version.rb +2 -1
- data/lib/snaky_hash.rb +0 -0
- data/sig/snaky_hash.rbs +4 -0
- data.tar.gz.sig +4 -3
- metadata +118 -39
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6994e51a3a7343a5b2b2b1d0d055721203ed81764991032a0f81ae6c2931646f
|
|
4
|
+
data.tar.gz: 8453695e75b616782ab21c4cef71fc3870c1a1984b7c7f477babde05c2eef252
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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://
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
[
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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.
|
|
120
|
-
[https://www.contributor-covenant.org/version/2/
|
|
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
|
-
|
|
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.
|
|
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] [![
|
|
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] [![
|
|
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
|
|
351
|
-
chat rooms and mailing lists
|
|
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.
|
|
27
|
+
unless base.method_defined?(:transform_values)
|
|
28
28
|
base.include(BackportedInstanceMethods)
|
|
29
29
|
end
|
|
30
30
|
# :nocov:
|
data/lib/snaky_hash/snake.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/lib/snaky_hash/version.rb
CHANGED
data/lib/snaky_hash.rb
CHANGED
|
File without changes
|
data/sig/snaky_hash.rbs
ADDED
data.tar.gz.sig
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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.
|
|
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:
|
|
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:
|
|
81
|
+
name: kettle-dev
|
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
|
83
83
|
requirements:
|
|
84
84
|
- - "~>"
|
|
85
85
|
- !ruby/object:Gem::Version
|
|
86
|
-
version: '
|
|
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: '
|
|
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:
|
|
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:
|
|
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.
|
|
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.
|
|
158
|
+
version: '3.0'
|
|
159
|
+
- - ">="
|
|
160
|
+
- !ruby/object:Gem::Version
|
|
161
|
+
version: 3.0.6
|
|
128
162
|
- !ruby/object:Gem::Dependency
|
|
129
|
-
name:
|
|
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.
|
|
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.
|
|
181
|
+
version: 1.0.10
|
|
148
182
|
- !ruby/object:Gem::Dependency
|
|
149
|
-
name:
|
|
183
|
+
name: ruby-progressbar
|
|
150
184
|
requirement: !ruby/object:Gem::Requirement
|
|
151
185
|
requirements:
|
|
152
186
|
- - "~>"
|
|
153
187
|
- !ruby/object:Gem::Version
|
|
154
|
-
version: '
|
|
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.
|
|
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
|
|
212
|
+
version: '1.0'
|
|
165
213
|
- - ">="
|
|
166
214
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: 0.
|
|
215
|
+
version: 1.0.3
|
|
168
216
|
- !ruby/object:Gem::Dependency
|
|
169
|
-
name:
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
|
215
|
-
changelog_uri: https://
|
|
216
|
-
bug_tracker_uri: https://
|
|
217
|
-
documentation_uri: https://www.rubydoc.info/gems/snaky_hash/2.0.
|
|
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://
|
|
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
|
-
-
|
|
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:
|
|
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
|