{"id":7448,"name":null,"description":"🐍 A Hashie::Mash joint to improve #snake_life for everyone","url":"https://github.com/ruby-oauth/snaky_hash","last_synced_at":"2026-08-17T07:00:20.160Z","repository":{"id":294550711,"uuid":"985891868","full_name":"ruby-oauth/snaky_hash","owner":"ruby-oauth","description":"🐍 A Hashie::Mash joint to improve #snake_life for everyone","archived":false,"fork":false,"pushed_at":"2026-07-23T15:33:48.000Z","size":696,"stargazers_count":19,"open_issues_count":4,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-07-27T22:06:35.901Z","etag":null,"topics":["hash","hashie","ruby","rubygem","underscore"],"latest_commit_sha":null,"homepage":"https://snaky-hash.galtzo.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruby-oauth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"buy_me_a_coffee":"pboling","community_bridge":null,"github":["pboling"],"issuehunt":"pboling","ko_fi":"pboling","liberapay":"pboling","open_collective":"ruby-oauth","patreon":"galtzo","polar":"pboling","thanks_dev":"u/gh/pboling","tidelift":"rubygems/snaky_hash"}},"created_at":"2025-05-18T18:27:16.000Z","updated_at":"2026-07-14T07:31:17.000Z","dependencies_parsed_at":"2026-06-27T07:00:45.725Z","dependency_job_id":null,"html_url":"https://github.com/ruby-oauth/snaky_hash","commit_stats":null,"previous_names":["oauth-xx/snaky_hash","ruby-oauth/snaky_hash"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ruby-oauth/snaky_hash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36094773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-30T02:00:05.956Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"ruby-oauth","name":"Ruby OAuth","uuid":"40009","kind":"organization","description":"🔐 Ruby Gems for building with OAuth v1.0a, 2.0, 2.1 and OIDC","email":"floss@galtzo.com","website":"https://opencollective.com/ruby-oauth","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/40009?v=4","repositories_count":7,"last_synced_at":"2026-05-07T06:40:05.814Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ruby-oauth","funding_links":[],"total_stars":2922,"followers":22,"following":0,"created_at":"2022-11-02T16:17:23.129Z","updated_at":"2026-05-07T06:40:05.814Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth/repositories"},"packages":[{"id":14677149,"name":"github.com/ruby-oauth/snaky_hash","ecosystem":"go","description":null,"homepage":null,"licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ruby-oauth/snaky_hash","keywords_array":[],"namespace":null,"versions_count":10,"first_release_published_at":"2022-08-26T21:12:54.000Z","latest_release_published_at":"2026-07-14T07:23:35.000Z","latest_release_number":"v2.0.7+incompatible","last_synced_at":"2026-08-16T06:32:18.753Z","created_at":"2026-06-25T09:47:36.275Z","updated_at":"2026-08-16T06:32:18.753Z","registry_url":"https://pkg.go.dev/github.com/ruby-oauth/snaky_hash","install_command":"go get github.com/ruby-oauth/snaky_hash","documentation_url":"https://pkg.go.dev/github.com/ruby-oauth/snaky_hash#section-documentation","metadata":{},"repo_metadata":{},"repo_metadata_updated_at":"2026-06-25T11:28:11.201Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":4.952621668114293,"dependent_packages_count":4.640821611672857,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":4.796721639893575},"purl":"pkg:golang/github.com/ruby-oauth/snaky_hash","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/ruby-oauth/snaky_hash","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/ruby-oauth/snaky_hash","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/ruby-oauth/snaky_hash/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fruby-oauth%2Fsnaky_hash/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fruby-oauth%2Fsnaky_hash/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fruby-oauth%2Fsnaky_hash/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fruby-oauth%2Fsnaky_hash/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fruby-oauth%2Fsnaky_hash/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fruby-oauth%2Fsnaky_hash/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2281772,"maintainers_count":0,"namespaces_count":839392,"keywords_count":124084,"github":"golang","metadata":{"funded_packages_count":66853,"sync_missing_packages_cursor":{"timestamp":"2026-08-17T00:00:58.969562Z","path":"github.com/Tektoncd/operator","version":"v0.78.0"},"rate_limit":1},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-08-17T05:01:11.862Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}},{"id":5200022,"name":"snaky_hash","ecosystem":"rubygems","description":"🔮 A Hashie::Mash joint to make #snakelife better","homepage":"https://snaky-hash.galtzo.com","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/ruby-oauth/snaky_hash","keywords_array":[],"namespace":null,"versions_count":10,"first_release_published_at":"2022-08-26T21:15:25.853Z","latest_release_published_at":"2026-07-14T07:31:05.163Z","latest_release_number":"2.0.7","last_synced_at":"2026-08-16T06:32:18.942Z","created_at":"2022-08-26T21:30:39.721Z","updated_at":"2026-08-16T06:35:32.284Z","registry_url":"https://rubygems.org/gems/snaky_hash","install_command":"gem install snaky_hash -s https://rubygems.org","documentation_url":"http://www.rubydoc.info/gems/snaky_hash/","metadata":{"funding":"https://github.com/sponsors/pboling"},"repo_metadata":{"id":294550711,"uuid":"985891868","full_name":"ruby-oauth/snaky_hash","owner":"ruby-oauth","description":"🐍 A Hashie::Mash joint to improve #snake_life for everyone","archived":false,"fork":false,"pushed_at":"2026-07-23T15:33:48.000Z","size":696,"stargazers_count":19,"open_issues_count":4,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-07-27T22:06:35.901Z","etag":null,"topics":["hash","hashie","ruby","rubygem","underscore"],"latest_commit_sha":null,"homepage":"https://snaky-hash.galtzo.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruby-oauth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"buy_me_a_coffee":"pboling","community_bridge":null,"github":["pboling"],"issuehunt":"pboling","ko_fi":"pboling","liberapay":"pboling","open_collective":"ruby-oauth","patreon":"galtzo","polar":"pboling","thanks_dev":"u/gh/pboling","tidelift":"rubygems/snaky_hash"}},"created_at":"2025-05-18T18:27:16.000Z","updated_at":"2026-07-14T07:31:17.000Z","dependencies_parsed_at":"2026-06-27T07:00:45.725Z","dependency_job_id":null,"html_url":"https://github.com/ruby-oauth/snaky_hash","commit_stats":null,"previous_names":["oauth-xx/snaky_hash","ruby-oauth/snaky_hash"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ruby-oauth/snaky_hash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36094773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-30T02:00:05.956Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"ruby-oauth","name":"Ruby OAuth","uuid":"40009","kind":"organization","description":"🔐 Ruby Gems for building with OAuth v1.0a, 2.0, 2.1 and OIDC","email":"floss@galtzo.com","website":"https://opencollective.com/ruby-oauth","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/40009?v=4","repositories_count":7,"last_synced_at":"2026-05-07T06:40:05.814Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ruby-oauth","funding_links":[],"total_stars":2922,"followers":22,"following":0,"created_at":"2022-11-02T16:17:23.129Z","updated_at":"2026-05-07T06:40:05.814Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth/repositories"},"tags":[{"name":"v2.0.7","sha":"121a19fa3235bcab26b4085036f8c02eae50bc5b","kind":"tag","published_at":"2026-07-14T07:30:46.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.7","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.7/manifests"},{"name":"v2.0.6","sha":"6e12a7bd96e1cb5e17f7195bfc8ddc6051b88bbd","kind":"tag","published_at":"2026-06-11T09:40:55.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.6","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.6/manifests"},{"name":"v2.0.5","sha":"40a593b2fdaa0e125c5c3cc09e0c481a87302651","kind":"tag","published_at":"2026-06-07T06:28:12.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.5","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.5/manifests"},{"name":"v2.0.4","sha":"7b4250885ccd27bf3d91f481d446f33322686058","kind":"tag","published_at":"2026-05-17T01:54:07.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.4","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.4/manifests"},{"name":"v2.0.3","sha":"fa841e326ec205802ee98662f66143125abb09d7","kind":"tag","published_at":"2025-05-23T02:59:03.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.3","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.3/manifests"},{"name":"v2.0.2","sha":"454a25538959f0fa392f98f3fe09dd5c5912a29c","kind":"tag","published_at":"2025-05-21T21:31:34.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.2","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.2/manifests"},{"name":"v2.0.1","sha":"08871cb9d3d226043cc0bc25bb1c86f0fb8f8a4e","kind":"tag","published_at":"2022-09-23T23:56:37.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.1","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.1/manifests"},{"name":"v2.0.0","sha":"63628366fa881b8f5de66799e715f28664210a83","kind":"tag","published_at":"2022-08-29T09:47:52.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.0","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.0/manifests"},{"name":"v1.0.1","sha":"11725e055c73f2869b60e2d7d9afc40f3ac4e01a","kind":"tag","published_at":"2022-08-26T21:48:42.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v1.0.1","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v1.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"fa6ce5bf118be2dfa7b1a1749b7da1dcac138e1c","kind":"tag","published_at":"2022-08-26T21:15:26.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v1.0.0","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2026-08-16T06:35:32.284Z","dependent_packages_count":2,"downloads":121516528,"downloads_period":"total","dependent_repos_count":922,"rankings":{"downloads":0.7354352218722837,"dependent_repos_count":1.0910178694390826,"dependent_packages_count":5.179800077891731,"stargazers_count":29.416545783968978,"forks_count":31.601465267625827,"docker_downloads_count":0.2139140054409789,"average":11.373029704373147},"purl":"pkg:gem/snaky_hash","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/snaky_hash","docker_dependents_count":149,"docker_downloads_count":556201717,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/snaky_hash","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/snaky_hash/dependencies","status":null,"funding_links":["https://github.com/sponsors/pboling","https://buymeacoffee.com/pboling","https://issuehunt.io/r/pboling","https://ko-fi.com/pboling","https://liberapay.com/pboling","https://opencollective.com/ruby-oauth","https://patreon.com/galtzo","https://polar.sh/pboling","https://thanks.dev/u/gh/pboling","https://tidelift.com/funding/github/rubygems/snaky_hash"],"critical":true,"issue_metadata":{"last_synced_at":"2026-08-05T01:00:30.398Z","issues_count":0,"pull_requests_count":24,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":1206620.6315789474,"issues_closed_count":0,"pull_requests_closed_count":19,"pull_request_authors_count":2,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":1.9583333333333333,"merged_pull_requests_count":7,"bot_issues_count":0,"bot_pull_requests_count":23,"past_year_issues_count":0,"past_year_pull_requests_count":24,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":1206620.6315789474,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":19,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":1.9583333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":23,"past_year_merged_pull_requests_count":7,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/snaky_hash/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/snaky_hash/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/snaky_hash/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/snaky_hash/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/snaky_hash/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/snaky_hash/codemeta","maintainers":[{"uuid":"509","login":"pboling","name":null,"email":null,"url":null,"packages_count":151,"html_url":"https://rubygems.org/profiles/pboling","role":null,"created_at":"2022-11-09T09:58:08.594Z","updated_at":"2022-11-09T09:58:08.594Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/pboling/packages"}],"registry":{"name":"rubygems.org","url":"https://rubygems.org","ecosystem":"rubygems","default":true,"packages_count":211107,"maintainers_count":69807,"namespaces_count":0,"keywords_count":19491,"github":"rubygems","metadata":{"funded_packages_count":8036},"icon_url":"https://github.com/rubygems.png","created_at":"2022-04-04T15:19:23.446Z","updated_at":"2026-08-17T05:00:17.734Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/namespaces"}},{"id":12329489,"name":"snaky_hash","ecosystem":"rubygems","description":"🔮 A Hashie::Mash joint to make #snakelife better","homepage":"https://snaky-hash.galtzo.com","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/ruby-oauth/snaky_hash","keywords_array":[],"namespace":null,"versions_count":9,"first_release_published_at":"2022-08-26T21:48:41.690Z","latest_release_published_at":"2026-07-14T07:31:05.163Z","latest_release_number":"2.0.7","last_synced_at":"2026-08-16T06:31:25.987Z","created_at":"2025-10-07T06:05:59.798Z","updated_at":"2026-08-16T06:35:32.316Z","registry_url":"https://gem.coop/gems/snaky_hash","install_command":"gem install snaky_hash -s https://gem.coop","documentation_url":"http://www.rubydoc.info/gems/snaky_hash/","metadata":{"funding":"https://github.com/sponsors/pboling"},"repo_metadata":{"id":294550711,"uuid":"985891868","full_name":"ruby-oauth/snaky_hash","owner":"ruby-oauth","description":"🐍 A Hashie::Mash joint to improve #snake_life for everyone","archived":false,"fork":false,"pushed_at":"2026-07-23T15:33:48.000Z","size":696,"stargazers_count":19,"open_issues_count":4,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-07-27T22:06:35.901Z","etag":null,"topics":["hash","hashie","ruby","rubygem","underscore"],"latest_commit_sha":null,"homepage":"https://snaky-hash.galtzo.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruby-oauth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"buy_me_a_coffee":"pboling","community_bridge":null,"github":["pboling"],"issuehunt":"pboling","ko_fi":"pboling","liberapay":"pboling","open_collective":"ruby-oauth","patreon":"galtzo","polar":"pboling","thanks_dev":"u/gh/pboling","tidelift":"rubygems/snaky_hash"}},"created_at":"2025-05-18T18:27:16.000Z","updated_at":"2026-07-14T07:31:17.000Z","dependencies_parsed_at":"2026-06-27T07:00:45.725Z","dependency_job_id":null,"html_url":"https://github.com/ruby-oauth/snaky_hash","commit_stats":null,"previous_names":["oauth-xx/snaky_hash","ruby-oauth/snaky_hash"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/ruby-oauth/snaky_hash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36094773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-30T02:00:05.956Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"ruby-oauth","name":"Ruby OAuth","uuid":"40009","kind":"organization","description":"🔐 Ruby Gems for building with OAuth v1.0a, 2.0, 2.1 and OIDC","email":"floss@galtzo.com","website":"https://opencollective.com/ruby-oauth","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/40009?v=4","repositories_count":7,"last_synced_at":"2026-05-07T06:40:05.814Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ruby-oauth","funding_links":[],"total_stars":2922,"followers":22,"following":0,"created_at":"2022-11-02T16:17:23.129Z","updated_at":"2026-05-07T06:40:05.814Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruby-oauth/repositories"},"tags":[{"name":"v2.0.7","sha":"121a19fa3235bcab26b4085036f8c02eae50bc5b","kind":"tag","published_at":"2026-07-14T07:30:46.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.7","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.7","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.7/manifests"},{"name":"v2.0.6","sha":"6e12a7bd96e1cb5e17f7195bfc8ddc6051b88bbd","kind":"tag","published_at":"2026-06-11T09:40:55.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.6","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.6/manifests"},{"name":"v2.0.5","sha":"40a593b2fdaa0e125c5c3cc09e0c481a87302651","kind":"tag","published_at":"2026-06-07T06:28:12.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.5","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.5/manifests"},{"name":"v2.0.4","sha":"7b4250885ccd27bf3d91f481d446f33322686058","kind":"tag","published_at":"2026-05-17T01:54:07.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.4","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.4/manifests"},{"name":"v2.0.3","sha":"fa841e326ec205802ee98662f66143125abb09d7","kind":"tag","published_at":"2025-05-23T02:59:03.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.3","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.3/manifests"},{"name":"v2.0.2","sha":"454a25538959f0fa392f98f3fe09dd5c5912a29c","kind":"tag","published_at":"2025-05-21T21:31:34.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.2","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.2/manifests"},{"name":"v2.0.1","sha":"08871cb9d3d226043cc0bc25bb1c86f0fb8f8a4e","kind":"tag","published_at":"2022-09-23T23:56:37.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.1","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.1/manifests"},{"name":"v2.0.0","sha":"63628366fa881b8f5de66799e715f28664210a83","kind":"tag","published_at":"2022-08-29T09:47:52.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v2.0.0","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v2.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v2.0.0/manifests"},{"name":"v1.0.1","sha":"11725e055c73f2869b60e2d7d9afc40f3ac4e01a","kind":"tag","published_at":"2022-08-26T21:48:42.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v1.0.1","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v1.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"fa6ce5bf118be2dfa7b1a1749b7da1dcac138e1c","kind":"tag","published_at":"2022-08-26T21:15:26.000Z","download_url":"https://codeload.github.com/ruby-oauth/snaky_hash/tar.gz/v1.0.0","html_url":"https://github.com/ruby-oauth/snaky_hash/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ruby-oauth/snaky_hash@v1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2026-08-16T06:35:32.316Z","dependent_packages_count":0,"downloads":121516528,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":0.28437658812971034,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":0.1713828487397684,"average":0.11393985921736968},"purl":"pkg:gem/snaky_hash?repository_url=https://gem.coop","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/snaky_hash","docker_dependents_count":149,"docker_downloads_count":556201717,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/snaky_hash","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/snaky_hash/dependencies","status":null,"funding_links":["https://github.com/sponsors/pboling","https://buymeacoffee.com/pboling","https://issuehunt.io/r/pboling","https://ko-fi.com/pboling","https://liberapay.com/pboling","https://opencollective.com/ruby-oauth","https://patreon.com/galtzo","https://polar.sh/pboling","https://thanks.dev/u/gh/pboling","https://tidelift.com/funding/github/rubygems/snaky_hash"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-05T01:00:30.398Z","issues_count":0,"pull_requests_count":24,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":1206620.6315789474,"issues_closed_count":0,"pull_requests_closed_count":19,"pull_request_authors_count":2,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":1.9583333333333333,"merged_pull_requests_count":7,"bot_issues_count":0,"bot_pull_requests_count":23,"past_year_issues_count":0,"past_year_pull_requests_count":24,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":1206620.6315789474,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":19,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":1.9583333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":23,"past_year_merged_pull_requests_count":7,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/issues","maintainers":[],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/snaky_hash/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/snaky_hash/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/snaky_hash/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/snaky_hash/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/snaky_hash/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/snaky_hash/codemeta","maintainers":[{"uuid":"509","login":"pboling","name":null,"email":null,"url":null,"packages_count":150,"html_url":"https://gem.coop/profiles/pboling","role":null,"created_at":"2025-10-09T22:29:27.589Z","updated_at":"2025-10-09T22:29:27.589Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/pboling/packages"}],"registry":{"name":"gem.coop","url":"https://gem.coop","ecosystem":"rubygems","default":false,"packages_count":195627,"maintainers_count":68819,"namespaces_count":0,"keywords_count":19101,"github":"gem-coop","metadata":{"funded_packages_count":7730},"icon_url":"https://github.com/gem-coop.png","created_at":"2025-10-06T17:24:20.932Z","updated_at":"2026-08-17T05:01:36.400Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/namespaces"}}],"commits":{"id":10481818,"full_name":"ruby-oauth/snaky_hash","default_branch":"main","total_commits":130,"total_committers":4,"total_bot_commits":6,"total_bot_committers":1,"mean_commits":32.5,"dds":0.16153846153846152,"past_year_total_commits":57,"past_year_total_committers":4,"past_year_total_bot_commits":5,"past_year_total_bot_committers":1,"past_year_mean_commits":14.25,"past_year_dds":0.3508771929824561,"last_synced_at":"2026-08-16T06:30:45.795Z","last_synced_commit":"2fea8d39fa077c4fb809ddf761016ca56f938197","created_at":"2025-06-27T16:30:23.753Z","updated_at":"2026-08-16T06:30:45.737Z","committers":[{"name":"Peter H. Boling","email":"peter.boling@gmail.com","login":"pboling","count":109},{"name":"autobolt","email":"autobots@9thbit.net","login":"autobolt","count":14},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":6},{"name":"Leo Arnold","email":"opensource@leoarnold.de","login":null,"count":1}],"past_year_committers":[{"name":"Peter H. Boling","email":"peter.boling@gmail.com","login":"pboling","count":37},{"name":"autobolt","email":"autobots@9thbit.net","login":"autobolt","count":14},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":5},{"name":"Leo Arnold","email":"opensource@leoarnold.de","login":null,"count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-17T00:00:06.017Z","repositories_count":6682503,"commits_count":959939077,"contributors_count":40611445,"owners_count":1344047,"committers_count":3322141,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"ruby-oauth/snaky_hash","html_url":"https://github.com/ruby-oauth/snaky_hash","last_synced_at":"2026-08-05T01:00:30.398Z","status":"error","issues_count":0,"pull_requests_count":24,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":1206620.6315789474,"issues_closed_count":0,"pull_requests_closed_count":19,"pull_request_authors_count":2,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":1.9583333333333333,"merged_pull_requests_count":7,"bot_issues_count":0,"bot_pull_requests_count":23,"past_year_issues_count":0,"past_year_pull_requests_count":24,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":1206620.6315789474,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":19,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":1.9583333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":23,"past_year_merged_pull_requests_count":7,"created_at":"2025-06-27T16:30:24.141Z","updated_at":"2026-08-05T01:00:30.399Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruby-oauth%2Fsnaky_hash/issues","issue_labels_count":{},"pull_request_labels_count":{"github_actions":23,"dependencies":23},"issue_author_associations_count":{},"pull_request_author_associations_count":{"CONTRIBUTOR":22,"NONE":2},"issue_authors":{},"pull_request_authors":{"dependabot[bot]":23,"leoarnold":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-05T00:00:19.964Z","repositories_count":14824899,"issues_count":30011823,"pull_requests_count":99457761,"authors_count":11394539,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{"dependencies":23,"github_actions":23},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":22,"NONE":2},"past_year_issue_authors":{},"past_year_pull_request_authors":{"dependabot[bot]":23,"leoarnold":1},"maintainers":[],"active_maintainers":[]},"events":{"total":{"ReleaseEvent":1,"DeleteEvent":5,"PullRequestEvent":4,"WatchEvent":2,"PushEvent":9,"CreateEvent":7},"last_year":{"ReleaseEvent":1,"DeleteEvent":4,"PullRequestEvent":3,"WatchEvent":2,"PushEvent":8,"CreateEvent":6}},"keywords":["hash","hashie","ruby","rubygem","underscore"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/ruby-3.0.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.817Z","updated_at":"2026-06-27T07:00:42.817Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-3.0.yml","dependencies":[{"id":25877759332,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759333,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-3.1.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.104Z","updated_at":"2026-06-27T07:00:43.104Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-3.1.yml","dependencies":[{"id":25877759337,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759338,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-3.2.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.174Z","updated_at":"2026-06-27T07:00:43.174Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-3.2.yml","dependencies":[{"id":25877759344,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759347,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-3.3.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.498Z","updated_at":"2026-06-27T07:00:43.498Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-3.3.yml","dependencies":[{"id":25877759350,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759351,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/truffleruby-23.1.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:44.079Z","updated_at":"2026-06-27T07:00:44.079Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/truffleruby-23.1.yml","dependencies":[{"id":25877759364,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759365,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-3.4.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.554Z","updated_at":"2026-06-27T07:00:43.554Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-3.4.yml","dependencies":[{"id":25877759353,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759354,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/truffleruby-23.0.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.983Z","updated_at":"2026-06-27T07:00:43.983Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/truffleruby-23.0.yml","dependencies":[{"id":25877759362,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759363,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/truffleruby-24.2.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:44.135Z","updated_at":"2026-06-27T07:00:44.135Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/truffleruby-24.2.yml","dependencies":[{"id":25877759371,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759372,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/auto-assign.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:40.512Z","updated_at":"2026-06-27T07:00:40.512Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/auto-assign.yml","dependencies":[{"id":25877759282,"package_name":"pozil/auto-assign-issue","ecosystem":"actions","requirements":"07fe6dc0e9771842b428f5739098d6140734e226","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/jruby-9.4.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.169Z","updated_at":"2026-06-27T07:00:42.169Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/jruby-9.4.yml","dependencies":[{"id":25877759301,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759302,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/templating.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.644Z","updated_at":"2026-06-27T07:00:43.644Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/templating.yml","dependencies":[{"id":25877759355,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759356,"package_name":"kettle-rb/ts-grammar-action","ecosystem":"actions","requirements":"4adf5a6f4960c7e8d0fcc1d05165e3647eb5cc8c","direct":true,"kind":"composite","optional":false},{"id":25877759358,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/truffleruby-22.3.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:43.913Z","updated_at":"2026-06-27T07:00:43.913Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/truffleruby-22.3.yml","dependencies":[{"id":25877759360,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759361,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/dep-heads.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:41.132Z","updated_at":"2026-06-27T07:00:41.132Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/dep-heads.yml","dependencies":[{"id":25877759288,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759289,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-2.7.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.762Z","updated_at":"2026-06-27T07:00:42.762Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-2.7.yml","dependencies":[{"id":25877759330,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759331,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/jruby-9.2.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:41.815Z","updated_at":"2026-06-27T07:00:41.815Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/jruby-9.2.yml","dependencies":[{"id":25877759292,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759294,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/locked_deps.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.338Z","updated_at":"2026-06-27T07:00:42.338Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/locked_deps.yml","dependencies":[{"id":25877759310,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759311,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/license-eye.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.237Z","updated_at":"2026-06-27T07:00:42.237Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/license-eye.yml","dependencies":[{"id":25877759305,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759306,"package_name":"apache/skywalking-eyes/dependency","ecosystem":"actions","requirements":"61275cc80d0798a405cb070f7d3a8aaf7cf2c2c1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/jruby-9.3.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.012Z","updated_at":"2026-06-27T07:00:42.012Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/jruby-9.3.yml","dependencies":[{"id":25877759295,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759296,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/opencollective.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.395Z","updated_at":"2026-06-27T07:00:42.395Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/opencollective.yml","dependencies":[{"id":25877759316,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759317,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-2.4.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.467Z","updated_at":"2026-06-27T07:00:42.467Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-2.4.yml","dependencies":[{"id":25877759320,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759321,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-2.6.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.706Z","updated_at":"2026-06-27T07:00:42.706Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-2.6.yml","dependencies":[{"id":25877759328,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759329,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby-2.5.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:42.576Z","updated_at":"2026-06-27T07:00:42.576Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/ruby-2.5.yml","dependencies":[{"id":25877759326,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759327,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/truffleruby-25.0.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:44.605Z","updated_at":"2026-06-27T07:00:44.605Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/truffleruby-25.0.yml","dependencies":[{"id":25877759374,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759375,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/unlocked_deps.yml","sha":null,"kind":"manifest","created_at":"2026-06-27T07:00:44.711Z","updated_at":"2026-06-27T07:00:44.711Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/unlocked_deps.yml","dependencies":[{"id":25877759378,"package_name":"actions/checkout","ecosystem":"actions","requirements":"df4cb1c069e1874edd31b4311f1884172cec0e10","direct":true,"kind":"composite","optional":false},{"id":25877759379,"package_name":"kettle-rb/ts-grammar-action","ecosystem":"actions","requirements":"4adf5a6f4960c7e8d0fcc1d05165e3647eb5cc8c","direct":true,"kind":"composite","optional":false},{"id":25877759380,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"12fd324f1d0b43274fdc8130f6980590a667c455","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/coverage.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:42.314Z","updated_at":"2025-05-21T00:43:42.314Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/coverage.yml","dependencies":[{"id":23227843645,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227843646,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":23227843647,"package_name":"coverallsapp/github-action","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false},{"id":23227843648,"package_name":"qltysh/qlty-action/coverage","ecosystem":"actions","requirements":"main","direct":true,"kind":"composite","optional":false},{"id":23227843900,"package_name":"codecov/codecov-action","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false},{"id":23227843901,"package_name":"irongut/CodeCoverageSummary","ecosystem":"actions","requirements":"v1.3.0","direct":true,"kind":"composite","optional":false},{"id":23227843902,"package_name":"marocchino/sticky-pull-request-comment","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/current.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:45.928Z","updated_at":"2025-05-21T00:43:45.928Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/current.yml","dependencies":[{"id":23227844039,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227844040,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/dependency-review.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:45.993Z","updated_at":"2025-05-21T00:43:45.993Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/dependency-review.yml","dependencies":[{"id":23227844041,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227844042,"package_name":"actions/dependency-review-action","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/heads.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:46.049Z","updated_at":"2025-05-21T00:43:46.049Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/heads.yml","dependencies":[{"id":23227844326,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227844327,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/jruby.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:46.315Z","updated_at":"2025-05-21T00:43:46.315Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/jruby.yml","dependencies":[{"id":23227844328,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227844329,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/style.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:46.474Z","updated_at":"2025-05-21T00:43:46.474Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/style.yml","dependencies":[{"id":23227844412,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227844413,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/truffle.yml","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:46.584Z","updated_at":"2025-05-21T00:43:46.584Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/.github/workflows/truffle.yml","dependencies":[{"id":23227844416,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23227844417,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2025-05-21T00:43:46.961Z","updated_at":"2025-05-21T00:43:46.961Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/Gemfile","dependencies":[{"id":23227844712,"package_name":"debug","ecosystem":"rubygems","requirements":"\u003e= 1.0.0","direct":true,"kind":"runtime","optional":false},{"id":23227844713,"package_name":"gem_bench","ecosystem":"rubygems","requirements":"~\u003e 2.0, \u003e= 2.0.5","direct":true,"kind":"runtime","optional":false},{"id":23227845789,"package_name":"appraisal","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2025-05-21T00:43:50.295Z","updated_at":"2025-05-21T00:43:50.295Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/Gemfile.lock","dependencies":[{"id":23227846875,"package_name":"ansi","ecosystem":"rubygems","requirements":"1.5.0","direct":false,"kind":"runtime","optional":false},{"id":23227846876,"package_name":"appraisal","ecosystem":"rubygems","requirements":"3.0.0.rc1","direct":false,"kind":"runtime","optional":false},{"id":23227846877,"package_name":"ast","ecosystem":"rubygems","requirements":"2.4.3","direct":false,"kind":"runtime","optional":false},{"id":23227846878,"package_name":"backports","ecosystem":"rubygems","requirements":"3.25.1","direct":false,"kind":"runtime","optional":false},{"id":23227847987,"package_name":"benchmark","ecosystem":"rubygems","requirements":"0.4.0","direct":false,"kind":"runtime","optional":false},{"id":23227847988,"package_name":"bigdecimal","ecosystem":"rubygems","requirements":"3.1.9","direct":false,"kind":"runtime","optional":false},{"id":23227847989,"package_name":"bundler-audit","ecosystem":"rubygems","requirements":"0.9.2","direct":false,"kind":"runtime","optional":false},{"id":23227849182,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.3.5","direct":false,"kind":"runtime","optional":false},{"id":23227849187,"package_name":"date","ecosystem":"rubygems","requirements":"3.4.1","direct":false,"kind":"runtime","optional":false},{"id":23227849191,"package_name":"debug","ecosystem":"rubygems","requirements":"1.10.0","direct":false,"kind":"runtime","optional":false},{"id":23227849193,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.6.2","direct":false,"kind":"runtime","optional":false},{"id":23227849197,"package_name":"diffy","ecosystem":"rubygems","requirements":"3.4.3","direct":false,"kind":"runtime","optional":false},{"id":23227849966,"package_name":"docile","ecosystem":"rubygems","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":23227849967,"package_name":"dry-configurable","ecosystem":"rubygems","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":23227849968,"package_name":"dry-core","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":23227849969,"package_name":"dry-inflector","ecosystem":"rubygems","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":23227850805,"package_name":"dry-initializer","ecosystem":"rubygems","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":23227851158,"package_name":"dry-logic","ecosystem":"rubygems","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":23227851165,"package_name":"dry-schema","ecosystem":"rubygems","requirements":"1.14.1","direct":false,"kind":"runtime","optional":false},{"id":23227851306,"package_name":"dry-types","ecosystem":"rubygems","requirements":"1.8.2","direct":false,"kind":"runtime","optional":false},{"id":23227851419,"package_name":"erb","ecosystem":"rubygems","requirements":"5.0.1","direct":false,"kind":"runtime","optional":false},{"id":23227851420,"package_name":"gem_bench","ecosystem":"rubygems","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":23227851421,"package_name":"hashie","ecosystem":"rubygems","requirements":"5.0.0","direct":false,"kind":"runtime","optional":false},{"id":23227851422,"package_name":"io-console","ecosystem":"rubygems","requirements":"0.8.0","direct":false,"kind":"runtime","optional":false},{"id":23227851423,"package_name":"irb","ecosystem":"rubygems","requirements":"1.15.2","direct":false,"kind":"runtime","optional":false},{"id":23227851424,"package_name":"json","ecosystem":"rubygems","requirements":"2.12.0","direct":false,"kind":"runtime","optional":false},{"id":23227851425,"package_name":"kettle-soup-cover","ecosystem":"rubygems","requirements":"1.0.9","direct":false,"kind":"runtime","optional":false},{"id":23227852858,"package_name":"kramdown","ecosystem":"rubygems","requirements":"2.5.1","direct":false,"kind":"runtime","optional":false},{"id":23227852859,"package_name":"kramdown-parser-gfm","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":23227852860,"package_name":"language_server-protocol","ecosystem":"rubygems","requirements":"3.17.0.5","direct":false,"kind":"runtime","optional":false},{"id":23227852861,"package_name":"lint_roller","ecosystem":"rubygems","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":23227852862,"package_name":"logger","ecosystem":"rubygems","requirements":"1.7.0","direct":false,"kind":"runtime","optional":false},{"id":23227852863,"package_name":"nokogiri","ecosystem":"rubygems","requirements":"1.18.8","direct":false,"kind":"runtime","optional":false},{"id":23227852864,"package_name":"ostruct","ecosystem":"rubygems","requirements":"0.6.1","direct":false,"kind":"runtime","optional":false},{"id":23227852865,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.27.0","direct":false,"kind":"runtime","optional":false},{"id":23227852866,"package_name":"parser","ecosystem":"rubygems","requirements":"3.3.8.0","direct":false,"kind":"runtime","optional":false},{"id":23227852867,"package_name":"pp","ecosystem":"rubygems","requirements":"0.6.2","direct":false,"kind":"runtime","optional":false},{"id":23227852868,"package_name":"prettyprint","ecosystem":"rubygems","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":23227852869,"package_name":"prism","ecosystem":"rubygems","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":23227852870,"package_name":"psych","ecosystem":"rubygems","requirements":"5.2.6","direct":false,"kind":"runtime","optional":false},{"id":23227852871,"package_name":"racc","ecosystem":"rubygems","requirements":"1.8.1","direct":false,"kind":"runtime","optional":false},{"id":23227852872,"package_name":"rainbow","ecosystem":"rubygems","requirements":"3.1.1","direct":false,"kind":"runtime","optional":false},{"id":23227852873,"package_name":"rake","ecosystem":"rubygems","requirements":"13.2.1","direct":false,"kind":"runtime","optional":false},{"id":23227852874,"package_name":"rdoc","ecosystem":"rubygems","requirements":"6.14.0","direct":false,"kind":"runtime","optional":false},{"id":23227852875,"package_name":"reek","ecosystem":"rubygems","requirements":"6.5.0","direct":false,"kind":"runtime","optional":false},{"id":23227853336,"package_name":"regexp_parser","ecosystem":"rubygems","requirements":"2.10.0","direct":false,"kind":"runtime","optional":false},{"id":23227853337,"package_name":"reline","ecosystem":"rubygems","requirements":"0.6.1","direct":false,"kind":"runtime","optional":false},{"id":23227853338,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.4.1","direct":false,"kind":"runtime","optional":false},{"id":23227853339,"package_name":"rspec","ecosystem":"rubygems","requirements":"3.13.0","direct":false,"kind":"runtime","optional":false},{"id":23227853340,"package_name":"rspec-block_is_expected","ecosystem":"rubygems","requirements":"1.0.6","direct":false,"kind":"runtime","optional":false},{"id":23227853373,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.13.3","direct":false,"kind":"runtime","optional":false},{"id":23227853374,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.13.4","direct":false,"kind":"runtime","optional":false},{"id":23227853375,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.13.4","direct":false,"kind":"runtime","optional":false},{"id":23227853376,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.13.3","direct":false,"kind":"runtime","optional":false},{"id":23227853377,"package_name":"rubocop","ecosystem":"rubygems","requirements":"1.75.6","direct":false,"kind":"runtime","optional":false},{"id":23227853378,"package_name":"rubocop-ast","ecosystem":"rubygems","requirements":"1.44.1","direct":false,"kind":"runtime","optional":false},{"id":23227853379,"package_name":"rubocop-gradual","ecosystem":"rubygems","requirements":"0.3.6","direct":false,"kind":"runtime","optional":false},{"id":23227853398,"package_name":"rubocop-lts","ecosystem":"rubygems","requirements":"8.1.1","direct":false,"kind":"runtime","optional":false},{"id":23227853482,"package_name":"rubocop-md","ecosystem":"rubygems","requirements":"1.2.4","direct":false,"kind":"runtime","optional":false},{"id":23227853688,"package_name":"rubocop-packaging","ecosystem":"rubygems","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":23227854120,"package_name":"rubocop-performance","ecosystem":"rubygems","requirements":"1.25.0","direct":false,"kind":"runtime","optional":false},{"id":23227854121,"package_name":"rubocop-rake","ecosystem":"rubygems","requirements":"0.7.1","direct":false,"kind":"runtime","optional":false},{"id":23227854236,"package_name":"rubocop-rspec","ecosystem":"rubygems","requirements":"3.6.0","direct":false,"kind":"runtime","optional":false},{"id":23227854237,"package_name":"rubocop-ruby2_2","ecosystem":"rubygems","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":23227854513,"package_name":"rubocop-shopify","ecosystem":"rubygems","requirements":"2.17.0","direct":false,"kind":"runtime","optional":false},{"id":23227855663,"package_name":"rubocop-thread_safety","ecosystem":"rubygems","requirements":"0.7.2","direct":false,"kind":"runtime","optional":false},{"id":23227856898,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"1.13.0","direct":false,"kind":"runtime","optional":false},{"id":23227856899,"package_name":"simplecov","ecosystem":"rubygems","requirements":"0.22.0","direct":false,"kind":"runtime","optional":false},{"id":23227856900,"package_name":"simplecov-cobertura","ecosystem":"rubygems","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":23227857371,"package_name":"simplecov-console","ecosystem":"rubygems","requirements":"0.9.3","direct":false,"kind":"runtime","optional":false},{"id":23227858427,"package_name":"simplecov-html","ecosystem":"rubygems","requirements":"0.13.1","direct":false,"kind":"runtime","optional":false},{"id":23227858428,"package_name":"simplecov-lcov","ecosystem":"rubygems","requirements":"0.8.0","direct":false,"kind":"runtime","optional":false},{"id":23227860021,"package_name":"simplecov-rcov","ecosystem":"rubygems","requirements":"0.3.7","direct":false,"kind":"runtime","optional":false},{"id":23227860047,"package_name":"simplecov_json_formatter","ecosystem":"rubygems","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":23227860048,"package_name":"snaky_hash","ecosystem":"rubygems","requirements":"2.0.1","direct":false,"kind":"runtime","optional":false},{"id":23227860049,"package_name":"standard","ecosystem":"rubygems","requirements":"1.50.0","direct":false,"kind":"runtime","optional":false},{"id":23227860170,"package_name":"standard-custom","ecosystem":"rubygems","requirements":"1.0.2","direct":false,"kind":"runtime","optional":false},{"id":23227860210,"package_name":"standard-performance","ecosystem":"rubygems","requirements":"1.8.0","direct":false,"kind":"runtime","optional":false},{"id":23227860254,"package_name":"standard-rubocop-lts","ecosystem":"rubygems","requirements":"1.0.10","direct":false,"kind":"runtime","optional":false},{"id":23227860731,"package_name":"stone_checksums","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":23227861994,"package_name":"stringio","ecosystem":"rubygems","requirements":"3.1.7","direct":false,"kind":"runtime","optional":false},{"id":23227861995,"package_name":"terminal-table","ecosystem":"rubygems","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":23227861996,"package_name":"thor","ecosystem":"rubygems","requirements":"1.3.2","direct":false,"kind":"runtime","optional":false},{"id":23227861997,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"3.1.4","direct":false,"kind":"runtime","optional":false},{"id":23227861998,"package_name":"unicode-emoji","ecosystem":"rubygems","requirements":"4.0.4","direct":false,"kind":"runtime","optional":false},{"id":23227861999,"package_name":"version_gem","ecosystem":"rubygems","requirements":"1.1.8","direct":false,"kind":"runtime","optional":false},{"id":23227862000,"package_name":"yard","ecosystem":"rubygems","requirements":"0.9.37","direct":false,"kind":"runtime","optional":false},{"id":23227862001,"package_name":"yard-junk","ecosystem":"rubygems","requirements":"0.0.10","direct":false,"kind":"runtime","optional":false},{"id":23227864892,"package_name":"yard-relative_markdown_links","ecosystem":"rubygems","requirements":"0.5.0","direct":false,"kind":"runtime","optional":false},{"id":23227864924,"package_name":"zeitwerk","ecosystem":"rubygems","requirements":"2.7.3","direct":false,"kind":"runtime","optional":false},{"id":23227864925,"package_name":"bundler","ecosystem":"rubygems","requirements":"2.6.9","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"snaky_hash.gemspec","sha":null,"kind":"manifest","created_at":"2025-05-21T00:44:18.289Z","updated_at":"2025-05-21T00:44:18.289Z","repository_link":"https://github.com/ruby-oauth/snaky_hash/blob/main/snaky_hash.gemspec","dependencies":[{"id":23227864936,"package_name":"hashie","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":23227864937,"package_name":"version_gem","ecosystem":"rubygems","requirements":"\u003e= 1.1.8, \u003c 3","direct":true,"kind":"runtime","optional":false},{"id":23227864938,"package_name":"rake","ecosystem":"rubygems","requirements":"~\u003e 13.0","direct":true,"kind":"development","optional":false},{"id":23227864939,"package_name":"rspec","ecosystem":"rubygems","requirements":"~\u003e 3.13","direct":true,"kind":"development","optional":false},{"id":23227864940,"package_name":"rspec-block_is_expected","ecosystem":"rubygems","requirements":"~\u003e 1.0, \u003e= 1.0.6","direct":true,"kind":"development","optional":false},{"id":23227864941,"package_name":"stone_checksums","ecosystem":"rubygems","requirements":"~\u003e 1.0","direct":true,"kind":"development","optional":false}]}],"score":25.54917885158676,"created_at":"2025-05-24T00:01:09.902Z","updated_at":"2026-08-17T07:00:20.174Z","avatar_url":"https://github.com/ruby-oauth.png","language":"Ruby","monthly_downloads":0,"readme":"\u003ca href=\"https://github.com/ruby-oauth\"\u003e\u003cimg alt=\"ruby-oauth Logo by Aboling0, CC BY-SA 4.0\" src=\"https://logos.galtzo.com/assets/images/ruby-oauth/avatar-128px.svg\" width=\"14%\" align=\"right\"/\u003e\u003c/a\u003e\n\n# 🔮 SnakyHash\n\n[![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]\n\n`if ci_badges.map(\u0026:color).detect { it != \"green\"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].\n\n---\n\n`if ci_badges.map(\u0026:color).all? { it == \"green\"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.\n\n[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]\n\n\u003cdetails\u003e\n \u003csummary\u003e👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️\u003c/summary\u003e\n\nI've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).\n\n\u003c/details\u003e\n\n## 🌻 Synopsis \u003ca href=\"https://discord.gg/3qme4XHNKN\"\u003e\u003cimg alt=\"Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0\" src=\"https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg\" width=\"8%\" align=\"right\"/\u003e\u003c/a\u003e \u003ca href=\"https://ruby-toolbox.com\"\u003e\u003cimg alt=\"ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5\" src=\"https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg\" width=\"8%\" align=\"right\"/\u003e\u003c/a\u003e\n\n## 💡 Info you can shake a stick at\n\n| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |\n|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 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] \u003cbr/\u003e [![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]|\n| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] \u003cbr/\u003e [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|\n| Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|\n| 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]|\n| Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] \u003cbr/\u003e [![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]|\n| Support \u0026 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] |\n| 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] |\n| 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] |\n| 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] |\n| 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] |\n| Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |\n| `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |\n\n### Compatibility\n\nCompatible with MRI Ruby 2.2.0+, and concordant releases of JRuby, and TruffleRuby.\nCI workflows and Appraisals are generated for MRI Ruby 2.4+.\nThis test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and\nmay be higher than the gem's runtime compatibility floor when legacy Rubies are\nnot practical for the current toolchain.\n\n| 🚚 _Amazing_ test matrix was brought to you by | 🔎 appraisal2 🔎 and the color 💚 green 💚 |\n|------------------------------------------------|--------------------------------------------------------|\n| 👟 Check it out! | ✨ [github.com/appraisal-rb/appraisal2][💎appraisal2] ✨ |\n\n### Federated DVCS\n\n\u003cdetails markdown=\"1\"\u003e\n \u003csummary\u003eFind this repo on federated forges (Coming soon!)\u003c/summary\u003e\n\n| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |\n|-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|\n| 🧪 [ruby-oauth/snaky_hash on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |\n| 🧊 [ruby-oauth/snaky_hash on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |\n| 🐙 [ruby-oauth/snaky_hash on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |\n| 🎮️ [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] |\n\n\u003c/details\u003e\n\n[gh-discussions]: https://github.com/ruby-oauth/snaky_hash/discussions\n\n### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/snaky_hash)](https://tidelift.com/subscription/pkg/rubygems-snaky_hash?utm_source=rubygems-snaky_hash\u0026utm_medium=referral\u0026utm_campaign=readme)\n\nAvailable as part of the Tidelift Subscription.\n\n\u003cdetails markdown=\"1\"\u003e\n \u003csummary\u003eNeed enterprise-level guarantees?\u003c/summary\u003e\n\nThe maintainers of this and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.\n\n[![Get help from me on Tidelift][🏙️entsup-tidelift-img]][🏙️entsup-tidelift]\n\n- 💡Subscribe for support guarantees covering _all_ your FLOSS dependencies\n- 💡Tidelift is part of [Sonar][🏙️entsup-tidelift-sonar]\n- 💡Tidelift pays maintainers to maintain the software you depend on!\u003cbr/\u003e📊`@`Pointy Haired Boss: An [enterprise support][🏙️entsup-tidelift] subscription is \"[never gonna let you down][🧮kloc]\", and *supports* open source maintainers\n\nAlternatively:\n\n- [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]\n- [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]\n- [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]\n\n\u003c/details\u003e\n\n## ✨ Installation\n\nInstall the gem and add to the application's Gemfile by executing:\n\n```console\nbundle add snaky_hash\n```\n\nIf bundler is not being used to manage dependencies, install the gem by executing:\n\n```console\ngem install snaky_hash\n```\n\n## ⚙️ Configuration\n\n## 🔧 Basic Usage\n\n```ruby\nclass MySnakedHash \u003c Hashie::Mash\n  include SnakyHash::Snake.new(key_type: :string) # or :symbol\nend\n\nsnake = MySnakedHash.new(:a =\u003e \"a\", \"b\" =\u003e \"b\", 2 =\u003e 2, \"VeryFineHat\" =\u003e \"Feathers\")\nsnake.a # =\u003e 'a'\nsnake.b # =\u003e 'b'\nsnake[2] # =\u003e 2\nsnake[\"2\"] # =\u003e nil, note that this gem only affects string / symbol keys.\nsnake.very_fine_hat # =\u003e 'Feathers'\nsnake[:very_fine_hat] # =\u003e 'Feathers'\nsnake[\"very_fine_hat\"] # =\u003e 'Feathers'\n```\n\nNote above that you can access the values via the string, or symbol.\nThe `key_type` determines how the key is actually stored, but the hash acts as \"indifferent\".\nNote also that keys which do not respond to `to_sym`, because they don't have a natural conversion to a Symbol,\nare left as-is.\n\n### Serialization\n\n```ruby\nclass MySerializedSnakedHash \u003c Hashie::Mash\n  include SnakyHash::Snake.new(\n    key_type: :symbol, # default :string\n    serializer: true   # default: false\n  )\nend\n\nsnake = MySerializedSnakedHash.new(:a =\u003e \"a\", \"b\" =\u003e \"b\", 2 =\u003e 2, \"VeryFineHat\" =\u003e \"Feathers\") # =\u003e {a: \"a\", b: \"b\", 2 =\u003e 2, very_fine_hat: \"Feathers\"}\ndump = MySerializedSnakedHash.dump(snake) # =\u003e \"{\\\"a\\\":\\\"a\\\",\\\"b\\\":\\\"b\\\",\\\"2\\\":2,\\\"very_fine_hat\\\":\\\"Feathers\\\"}\"\nhydrated = MySerializedSnakedHash.load(dump) # =\u003e {a: \"a\", b: \"b\", \"2\": 2, very_fine_hat: \"Feathers\"}\nhydrated.class # =\u003e MySerializedSnakedHash\nhydrated.a # =\u003e 'a'\nhydrated.b # =\u003e 'b'\nhydrated[2] # =\u003e nil # NOTE: this is the opposite of snake[2] =\u003e 2\nhydrated[\"2\"] # =\u003e 2 # NOTE: this is the opposite of snake[\"2\"] =\u003e nil\nhydrated.very_fine_hat # =\u003e 'Feathers'\nhydrated[:very_fine_hat] # =\u003e 'Feathers'\nhydrated[\"very_fine_hat\"] # =\u003e 'Feathers'\n```\n\nNote that the key `VeryFineHat` changed to `very_fine_hat`.\nThat is indeed the point of this library, so not a bug.\n\nNote that the key `2` changed to `\"2\"` (because JSON keys are strings).\nWhen the JSON dump was reloaded it did not know to restore it as `2` instead of `\"2\"`.\nThis is also not a bug, though if you need different behavior, there is a solution in the [next section](#extensions).\n\n### Extensions\n\nYou can write your own arbitrary extensions:\n\n* \"Hash Load\" extensions operate on the hash and nested hashes\n  * use `::load_hash_extensions.add(:extension_name) { |hash| }`\n  * since v2.0.2, bugs fixed in v2.0.3\n* \"Value Load\" extensions operate on the values, and nested hashes' values, if any\n  * use `::load_value_extensions.add(:extension_name) { |value| }`\n  * since v2.0.2, bugs fixed in v2.0.3\n* \"Hash Dump\" extensions operate on the hash and nested hashes\n  * use `::dump_hash_extensions.add(:extension_name) { |value| }`\n  * since v2.0.3\n* \"Value Dump\" extensions operate on the values, and nested hashes' values, if any\n  * use `::dump_value_extensions.add(:extension_name) { |value| }`\n  * since v2.0.2, bugs fixed in v2.0.3\n\n#### Example\n\nLet's say I want to really smash up my hash and make it more food-like.\n\n```ruby\nclass MyExtSnakedHash \u003c Hashie::Mash\n  include SnakyHash::Snake.new(\n    key_type: :symbol, # default :string\n    serializer: true  # default: false\n  )\nend\n\n# We could swap all values with indexed apples (obliteraating nested data!)\nMyExtSnakedHash.dump_hash_extensions.add(:to_apple) do |value|\n  num = 0\n  value.transform_values do |_key|\n    key = \"apple-#{num}\"\n    num += 1\n    key\n  end\nend\n\n# And then when loading the dump we could convert the yum to pear\nMyExtSnakedHash.load_hash_extensions.add(:apple_to_pear) do |value|\n  value.transform_keys do |key|\n    key.to_s.sub(\"yum\", \"pear\")\n  end\nend\n\n# We could swap all index numbers \"beet-\u003cnumber\u003e\"\nMyExtSnakedHash.dump_value_extensions.add(:to_beet) do |value|\n  value.to_s.sub(/(\\d+)/) { |match| \"beet-#{match[0]}\" }\nend\n\n# And then when loading the dump we could convert beet to corn\nMyExtSnakedHash.load_value_extensions.add(:beet_to_corn) do |value|\n  value.to_s.sub(\"beet\", \"corn\")\nend\n\nsnake = MyExtSnakedHash.new({\"YumBread\" =\u003e \"b\", \"YumCake\" =\u003e {\"b\" =\u003e \"b\"}, \"YumBoba\" =\u003e [1, 2, 3]})\nsnake # =\u003e {yum_bread: \"b\", yum_cake: {b: \"b\"}, yum_boba: [1, 2, 3]}\nsnake.yum_bread # =\u003e \"b\"\nsnake.yum_cake # =\u003e {b: \"b\"}\nsnake.yum_boba # =\u003e [1, 2, 3]\ndump = snake.dump\ndump # =\u003e \"{\\\"yum_bread\\\":\\\"apple-beet-0\\\",\\\"yum_cake\\\":\\\"apple-beet-1\\\",\\\"yum_boba\\\":\\\"apple-beet-2\\\"}\"\nhydrated = MyExtSnakedHash.load(dump)\nhydrated # =\u003e {pear_bread: \"apple-corn-0\", pear_cake: \"apple-corn-1\", pear_boba: \"apple-corn-2\"}\n```\n\nSee the specs for more examples.\n\n### Bad Ideas\n\nI don't recommend using these features... but they exist (for now).\n\n\u003cdetails\u003e\n  \u003csummary\u003eShow me what I should *not* do!\u003c/summary\u003e\n\nYou can still access the original un-snaked camel keys.\nAnd through them you can even use un-snaked camel methods.\nBut don't.\n\n```ruby\nsnake = SnakyHash::StringKeyed[\"VeryFineHat\" =\u003e \"Feathers\"]\nsnake.key?(\"VeryFineHat\") # =\u003e true\nsnake[\"VeryFineHat\"] # =\u003e 'Feathers'\nsnake.VeryFineHat # =\u003e 'Feathers', PLEASE don't do this!!!\nsnake[\"VeryFineHat\"] = \"pop\" # Please don't do this... you'll get a warning, and it works (for now), but no guarantees.\n# WARN -- : You are setting a key that conflicts with a built-in method MySnakedHash#VeryFineHat defined in MySnakedHash. This can cause unexpected behavior when accessing the key as a property. You can still access the key via the #[] method.\n# =\u003e \"pop\"\n```\n\nSince you are reading this, here's what to do instead.\n\n```ruby\nsnake.very_fine_hat = \"pop\" # =\u003e 'pop', do this instead!!!\nsnake.very_fine_hat # =\u003e 'pop'\nsnake[:very_fine_hat] = \"moose\" # =\u003e 'moose', or do this instead!!!\nsnake.very_fine_hat # =\u003e 'moose'\nsnake[\"very_fine_hat\"] = \"cheese\" # =\u003e 'cheese', or do this instead!!!\nsnake.very_fine_hat # =\u003e 'cheese'\n```\n\n\u003c/details\u003e\n\n### 🚀 Release Instructions\n\nSee [CONTRIBUTING.md][🤝contributing].\n\n## 🦷 FLOSS Funding\n\nWhile ruby-oauth tools are free software and will always be, the project would benefit immensely from some funding.\nRaising a monthly budget of... \"dollars\" would make the project more sustainable.\n\nWe welcome both individual and corporate sponsors! We also offer a\nwide array of funding channels to account for your preferences.\nCurrently, [Open Collective][🖇osc] is our preferred funding platform.\n\n**If you're working in a company that's making significant use of ruby-oauth tools we'd\nappreciate it if you suggest to your company to become a ruby-oauth sponsor.**\n\nYou can support the development of ruby-oauth tools via\n[GitHub Sponsors][🖇sponsor],\n[Liberapay][⛳liberapay],\n[PayPal][🖇paypal],\n[Open Collective][🖇osc]\nand [Tidelift][🏙️entsup-tidelift].\n\n| 📍 NOTE |\n|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| If doing a sponsorship in the form of donation is problematic for your company \u003cbr/\u003e from an accounting standpoint, we'd recommend the use of Tidelift, \u003cbr/\u003e where you can get a support-like subscription instead. |\n\n### Open Collective for Individuals\n\nSupport us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/ruby-oauth#backer)]\n\nNOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.\n\n\u003c!-- OPENCOLLECTIVE-INDIVIDUALS:START --\u003e\nNo backers yet. Be the first!\n\u003c!-- OPENCOLLECTIVE-INDIVIDUALS:END --\u003e\n\n### Open Collective for Organizations\n\nBecome a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/ruby-oauth#sponsor)]\n\nNOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day, automatically.\n\n\u003c!-- OPENCOLLECTIVE-ORGANIZATIONS:START --\u003e\nNo sponsors yet. Be the first!\n\n### Open Collective for Donors\n\n[Bill Woika](https://opencollective.com/bill-woika) [Philipp Ebneter](https://opencollective.com/guest-e77282f7) [Grigoriy](https://opencollective.com/guest-c93e0c48)\n\u003c!-- OPENCOLLECTIVE-ORGANIZATIONS:END --\u003e\n\n[kettle-readme-backers]: https://github.com/ruby-oauth/snaky_hash/blob/main/exe/kettle-readme-backers\n\n### Another way to support open-source\n\nI’m driven by a passion to foster a thriving open-source community – a space where people can tackle complex problems, no matter how small. Revitalizing libraries that have fallen into disrepair, and building new libraries focused on solving real-world challenges, are my passions. I was recently affected by layoffs, and the tech jobs market is unwelcoming. I’m reaching out here because your support would significantly aid my efforts to provide for my family, and my farm (11 🐔 chickens, 2 🐶 dogs, 3 🐰 rabbits, 8 🐈‍ cats).\n\nIf you work at a company that uses my work, please encourage them to support me as a corporate sponsor. My work on gems you use might show up in `bundle fund`.\n\nI’m developing a new library, [floss_funding][🖇floss-funding-gem], designed to empower open-source developers like myself to get paid for the work we do, in a sustainable way. Please give it a look.\n\n**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**\n\n[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate on Polar][🖇polar-img]][🖇polar] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi] [![Donate to my FLOSS efforts using Patreon][🖇patreon-img]][🖇patreon]\n\n## 🔐 Security\n\nSee [SECURITY.md][🔐security].\n\n## 🤝 Contributing\n\nIf you need some ideas of where to help, you could work on adding more code coverage,\nor if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],\nor use the gem and think about how it could be better.\n\nWe [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.\n\nSee [CONTRIBUTING.md][🤝contributing] for more detailed instructions.\n\n### 🚀 Release Instructions\n\nSee [CONTRIBUTING.md][🤝contributing].\n\n### Code Coverage\n\n\u003cdetails markdown=\"1\"\u003e\n\u003csummary\u003eCoverage service badges\u003c/summary\u003e\n\n[![Coverage Graph][🏀codecov-g]][🏀codecov]\n\n[![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls]\n\n[![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov]\n\n\u003c/details\u003e\n\n### 🪇 Code of Conduct\n\nEveryone interacting with this project's codebases, issue trackers,\nchat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct].\n\n## 🌈 Contributors\n\n[![Contributors][🖐contributors-img]][🖐contributors]\n\nMade with [contributors-img][🖐contrib-rocks].\n\nAlso see GitLab Contributors: [https://gitlab.com/ruby-oauth/snaky_hash/-/graphs/main][🚎contributors-gl]\n\n\u003cdetails\u003e\n \u003csummary\u003e⭐️ Star History\u003c/summary\u003e\n\n\u003ca href=\"https://star-history.com/ruby-oauth/snaky_hash\u0026Date\"\u003e\n \u003cpicture\u003e\n \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=ruby-oauth/snaky_hash\u0026type=Date\u0026theme=dark\" /\u003e\n \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=ruby-oauth/snaky_hash\u0026type=Date\" /\u003e\n \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=ruby-oauth/snaky_hash\u0026type=Date\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n\u003c/details\u003e\n\n## 📌 Versioning\n\nThis library follows [![Semantic Versioning 2.0.0][📌semver-img]][📌semver] for its public API where practical.\nFor most applications, prefer the [Pessimistic Version Constraint][📌pvc] with two digits of precision.\n\nFor example:\n\n```ruby\nspec.add_dependency(\"snaky_hash\", \"~\u003e 2.0\")\n```\n\n\u003cdetails markdown=\"1\"\u003e\n\u003csummary\u003e📌 Is \"Platform Support\" part of the public API? More details inside.\u003c/summary\u003e\n\nDropping support for a platform can be a breaking change for affected users.\nIf a release changes supported platforms, it should be called out clearly in the changelog and versioned with that impact in mind.\n\nTo get a better understanding of how SemVer is intended to work over a project's lifetime,\nread this article from the creator of SemVer:\n\n- [\"Major Version Numbers are Not Sacred\"][📌major-versions-not-sacred]\n\n\u003c/details\u003e\n\nSee [CHANGELOG.md][📌changelog] for a list of releases.\n\n## 📄 License\n\nThe gem is available as open source under the terms of\nthe [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].\n\n### © Copyright\n\nSee [LICENSE.md][📄license] for the official copyright notice.\n\n\u003cdetails markdown=\"1\"\u003e\n\u003csummary\u003eCopyright holders\u003c/summary\u003e\n\n- Copyright (c) 2022, 2025-2026 Peter H. Boling\n\n\u003c/details\u003e\n\n## 🤑 A request for help\n\nMaintainers have teeth and need to pay their dentists.\nAfter getting laid off in an RIF in March, and encountering difficulty finding a new one,\nI began spending most of my time building open source tools.\nI'm hoping to be able to pay for my kids' health insurance this month,\nso if you value the work I am doing, I need your support.\nPlease consider sponsoring me or the project.\n\nTo join the community or get help 👇️ Join the Discord.\n\n[![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]\n\nTo say \"thanks!\" ☝️ Join the Discord or 👇️ send money.\n\n[![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]\n\n### Please give the project a star ⭐ ♥.\n\nMany parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.\n\nThanks for RTFM. ☺️\n\n[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay\u0026color=a51611\u0026style=flat\n[⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge\u0026logo=liberapay\u0026color=a51611\n[⛳liberapay]: https://liberapay.com/pboling/donate\n[🖇osc-all-img]: https://img.shields.io/opencollective/all/ruby-oauth\n[🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth\n[🖇osc-backers-img]: https://img.shields.io/opencollective/backers/ruby-oauth\n[🖇osc-backers]: https://opencollective.com/ruby-oauth#backer\n[🖇osc-backers-i]: https://opencollective.com/ruby-oauth/backers/badge.svg?style=flat\n[🖇osc-sponsors]: https://opencollective.com/ruby-oauth#sponsor\n[🖇osc-sponsors-i]: https://opencollective.com/ruby-oauth/sponsors/badge.svg?style=flat\n[🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/ruby-oauth?style=for-the-badge\n[🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/ruby-oauth?style=for-the-badge\n[🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/ruby-oauth?style=for-the-badge\n[🖇osc]: https://opencollective.com/ruby-oauth\n[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social\u0026logo=github\n[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge\u0026logo=github\n[🖇sponsor]: https://github.com/sponsors/pboling\n[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat\n[🖇polar]: https://polar.sh/pboling\n[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat\n[🖇kofi]: https://ko-fi.com/pboling\n[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat\n[🖇patreon]: https://patreon.com/galtzo\n[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat\n[🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte\u0026emoji=\u0026slug=pboling\u0026button_colour=FFDD00\u0026font_colour=000000\u0026font_family=Cookie\u0026outline_colour=000000\u0026coffee_colour=ffffff\n[🖇buyme]: https://www.buymeacoffee.com/pboling\n[🖇paypal-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=flat\u0026logo=paypal\n[🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge\u0026logo=paypal\u0026color=0A0A0A\n[🖇paypal]: https://www.paypal.com/paypalme/peterboling\n[🖇floss-funding.dev]: https://floss-funding.dev\n[🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding\n[✉️discord-invite]: https://discord.gg/3qme4XHNKN\n[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge\u0026logo=discord\n[✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge\u0026logo=dailydotdev\u0026logoColor=white\n[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends\n\n[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780\n[⛳️gem-namespace]: https://github.com/ruby-oauth/snaky_hash\n[⛳️namespace-img]: https://img.shields.io/badge/namespace-SnakyHash-3C2D2D.svg?style=square\u0026logo=ruby\u0026logoColor=white\n[⛳️gem-name]: https://bestgems.org/gems/snaky_hash\n[⛳️name-img]: https://img.shields.io/badge/name-snaky__hash-3C2D2D.svg?style=square\u0026logo=rubygems\u0026logoColor=red\n[⛳️tag-img]: https://img.shields.io/github/tag/ruby-oauth/snaky_hash.svg\n[⛳️tag]: https://github.com/ruby-oauth/snaky_hash/releases\n[🚂maint-blog]: http://www.railsbling.com/tags/snaky_hash\n[🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge\u0026logo=rubyonrails\u0026logoColor=orange\n[🚂maint-contact]: http://www.railsbling.com/contact\n[🚂maint-contact-img]: https://img.shields.io/badge/Contact-Maintainer-0093D0.svg?style=flat\u0026logo=rubyonrails\u0026logoColor=red\n[💖🖇linkedin]: http://www.linkedin.com/in/peterboling\n[💖🖇linkedin-img]: https://img.shields.io/badge/LinkedIn-Profile-0B66C2?style=flat\u0026logo=newjapanprowrestling\n[💖✌️wellfound]: https://wellfound.com/u/peter-boling\n[💖✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=flat\u0026logo=wellfound\n[💖💲crunchbase]: https://www.crunchbase.com/person/peter-boling\n[💖💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=flat\u0026logo=crunchbase\n[💖🐘ruby-mast]: https://ruby.social/@galtzo\n[💖🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https://ruby.social\u0026style=flat\u0026logo=mastodon\u0026label=Ruby%20@galtzo\n[💖🦋bluesky]: https://bsky.app/profile/galtzo.com\n[💖🦋bluesky-img]: https://img.shields.io/badge/@galtzo.com-0285FF?style=flat\u0026logo=bluesky\u0026logoColor=white\n[💖🌳linktree]: https://linktr.ee/galtzo\n[💖🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=flat\u0026logo=linktree\n[💖💁🏼‍♂️devto]: https://dev.to/galtzo\n[💖💁🏼‍♂️devto-img]: https://img.shields.io/badge/dev.to-0A0A0A?style=flat\u0026logo=devdotto\u0026logoColor=white\n[💖💁🏼‍♂️aboutme]: https://about.me/peter.boling\n[💖💁🏼‍♂️aboutme-img]: https://img.shields.io/badge/about.me-0A0A0A?style=flat\u0026logo=aboutme\u0026logoColor=white\n[💖🧊berg]: https://codeberg.org/pboling\n[💖🐙hub]: https://github.org/pboling\n[💖🛖hut]: https://sr.ht/~galtzo/\n[💖🧪lab]: https://gitlab.com/pboling\n[👨🏼‍🏫expsup-upwork]: https://www.upwork.com/freelancers/~014942e9b056abdf86?mp_source=share\n[👨🏼‍🏫expsup-upwork-img]: https://img.shields.io/badge/UpWork-13544E?style=for-the-badge\u0026logo=Upwork\u0026logoColor=white\n[👨🏼‍🏫expsup-codementor]: https://www.codementor.io/peterboling?utm_source=github\u0026utm_medium=button\u0026utm_term=peterboling\u0026utm_campaign=github\n[👨🏼‍🏫expsup-codementor-img]: https://img.shields.io/badge/CodeMentor-Get_Help-1abc9c?style=for-the-badge\u0026logo=CodeMentor\u0026logoColor=white\n[🏙️entsup-tidelift]: https://tidelift.com/subscription/pkg/rubygems-snaky_hash?utm_source=rubygems-snaky_hash\u0026utm_medium=referral\u0026utm_campaign=readme\n[🏙️entsup-tidelift-img]: https://img.shields.io/badge/Tidelift_and_Sonar-Enterprise_Support-FD3456?style=for-the-badge\u0026logo=sonar\u0026logoColor=white\n[🏙️entsup-tidelift-sonar]: https://blog.tidelift.com/tidelift-joins-sonar\n[💁🏼‍♂️peterboling]: http://www.peterboling.com\n[🚂railsbling]: http://www.railsbling.com\n[📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge\u0026logo=Gitlab\u0026logoColor=orange\n[📜src-gl]: https://gitlab.com/ruby-oauth/snaky_hash\n[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge\u0026logo=CodeBerg\u0026logoColor=blue\n[📜src-cb]: https://codeberg.org/ruby-oauth/snaky_hash\n[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge\u0026logo=Github\u0026logoColor=green\n[📜src-gh]: https://github.com/ruby-oauth/snaky_hash\n[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge\u0026logo=readthedocs\u0026logoColor=white\n[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge\u0026logo=readthedocs\u0026logoColor=white\n[📜gl-wiki]: https://gitlab.com/ruby-oauth/snaky_hash/-/wikis/home\n[📜gh-wiki]: https://github.com/ruby-oauth/snaky_hash/wiki\n[📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge\u0026logo=gitlab\u0026logoColor=white\n[📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white\n[👽dl-rank]: https://bestgems.org/gems/snaky_hash\n[👽dl-ranki]: https://img.shields.io/gem/rd/snaky_hash.svg\n[👽version]: https://bestgems.org/gems/snaky_hash\n[👽versioni]: https://img.shields.io/gem/v/snaky_hash.svg\n[🏀qlty-mnt]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash\n[🏀qlty-mnti]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/maintainability.svg\n[🏀qlty-cov]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/metrics/code?sort=coverageRating\n[🏀qlty-covi]: https://qlty.sh/gh/ruby-oauth/projects/snaky_hash/coverage.svg\n[🏀codecov]: https://codecov.io/gh/ruby-oauth/snaky_hash\n[🏀codecovi]: https://codecov.io/gh/ruby-oauth/snaky_hash/graph/badge.svg\n[🏀coveralls]: https://coveralls.io/github/ruby-oauth/snaky_hash?branch=main\n[🏀coveralls-img]: https://coveralls.io/repos/github/ruby-oauth/snaky_hash/badge.svg?branch=main\n[🚎ruby-2.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.4.yml\n[🚎ruby-2.5-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.5.yml\n[🚎ruby-2.6-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.6.yml\n[🚎ruby-2.7-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-2.7.yml\n[🚎ruby-3.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.0.yml\n[🚎ruby-3.1-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.1.yml\n[🚎ruby-3.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.2.yml\n[🚎ruby-3.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.3.yml\n[🚎ruby-3.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/ruby-3.4.yml\n[🚎jruby-9.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.2.yml\n[🚎jruby-9.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.3.yml\n[🚎jruby-9.4-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby-9.4.yml\n[🚎truby-22.3-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-22.3.yml\n[🚎truby-23.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-23.0.yml\n[🚎truby-23.1-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-23.1.yml\n[🚎truby-24.2-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-24.2.yml\n[🚎truby-25.0-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffleruby-25.0.yml\n[🚎2-cov-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/coverage.yml\n[🚎2-cov-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/coverage.yml/badge.svg\n[🚎3-hd-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/heads.yml\n[🚎3-hd-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/heads.yml/badge.svg\n[🚎5-st-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/style.yml\n[🚎5-st-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/style.yml/badge.svg\n[🚎9-t-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffle.yml\n[🚎9-t-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/truffle.yml/badge.svg\n[🚎10-j-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby.yml\n[🚎10-j-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/jruby.yml/badge.svg\n[🚎11-c-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/current.yml\n[🚎11-c-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/current.yml/badge.svg\n[🚎12-crh-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/dep-heads.yml\n[🚎12-crh-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/dep-heads.yml/badge.svg\n[🚎13-🔒️-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/locked_deps.yml\n[🚎13-🔒️-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/locked_deps.yml/badge.svg\n[🚎14-🔓️-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/unlocked_deps.yml\n[🚎14-🔓️-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/unlocked_deps.yml/badge.svg\n[🚎15-🪪-wf]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/license-eye.yml\n[🚎15-🪪-wfi]: https://github.com/ruby-oauth/snaky_hash/actions/workflows/license-eye.yml/badge.svg\n[💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-2.7i]: https://img.shields.io/badge/Ruby-2.7-DF00CA?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-3.0i]: https://img.shields.io/badge/Ruby-3.0-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-3.1i]: https://img.shields.io/badge/Ruby-3.1-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=white\n[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=green\n[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge\u0026logo=ruby\u0026logoColor=blue\n[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge\u0026logo=ruby\u0026logoColor=pink\n[💎truby-23.0i]: https://img.shields.io/badge/Truffle_Ruby-23.0-34BCB1?style=for-the-badge\u0026logo=ruby\u0026logoColor=pink\n[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge\u0026logo=ruby\u0026logoColor=pink\n[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge\u0026logo=ruby\u0026logoColor=pink\n[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge\u0026logo=ruby\u0026logoColor=pink\n[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge\u0026logo=ruby\u0026logoColor=green\n[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge\u0026logo=ruby\u0026logoColor=red\n[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge\u0026logo=ruby\u0026logoColor=red\n[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge\u0026logo=ruby\u0026logoColor=red\n[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge\u0026logo=ruby\u0026logoColor=green\n[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge\u0026logo=ruby\u0026logoColor=blue\n[🤝gh-issues]: https://github.com/ruby-oauth/snaky_hash/issues\n[🤝gh-pulls]: https://github.com/ruby-oauth/snaky_hash/pulls\n[🤝gl-issues]: https://gitlab.com/ruby-oauth/snaky_hash/-/issues\n[🤝gl-pulls]: https://gitlab.com/ruby-oauth/snaky_hash/-/merge_requests\n[🤝cb-issues]: https://codeberg.org/ruby-oauth/snaky_hash/issues\n[🤝cb-pulls]: https://codeberg.org/ruby-oauth/snaky_hash/pulls\n[🤝cb-donate]: https://donate.codeberg.org/\n[🤝contributing]: https://github.com/ruby-oauth/snaky_hash/blob/main/CONTRIBUTING.md\n[🏀codecov-g]: https://codecov.io/gh/ruby-oauth/snaky_hash/graph/badge.svg\n[🖐contrib-rocks]: https://contrib.rocks\n[🖐contributors]: https://github.com/ruby-oauth/snaky_hash/graphs/contributors\n[🖐contributors-img]: https://contrib.rocks/image?repo=ruby-oauth/snaky_hash\n[🚎contributors-gl]: https://gitlab.com/ruby-oauth/snaky_hash/-/graphs/main\n[🪇conduct]: https://github.com/ruby-oauth/snaky_hash/blob/main/CODE_OF_CONDUCT.md\n[🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg\n[📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint\n[📌semver]: https://semver.org/spec/v2.0.0.html\n[📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat\n[📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139\n[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html\n[📌changelog]: https://github.com/ruby-oauth/snaky_hash/blob/main/CHANGELOG.md\n[📗keep-changelog]: https://keepachangelog.com/en/1.0.0/\n[📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat\n[📌gitmoji]: https://gitmoji.dev\n[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square\n[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ\n[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.133-FFDD67.svg?style=for-the-badge\u0026logo=YouTube\u0026logoColor=blue\n[🔐security]: https://github.com/ruby-oauth/snaky_hash/blob/main/SECURITY.md\n[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat\n[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year\n[📄license]: LICENSE.md\n[📄license-ref]: MIT.md\n[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg\n[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a\n[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat\u0026logo=Apache\n\n[📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm\n[📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat\n[🚎yard-current]: http://rubydoc.info/gems/snaky_hash\n[🚎yard-head]: https://snaky-hash.galtzo.com\n[💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums\n[💎SHA_checksums]: https://gitlab.com/ruby-oauth/snaky_hash/-/tree/main/checksums\n[💎rlts]: https://github.com/rubocop-lts/rubocop-lts\n[💎rlts-img]: https://img.shields.io/badge/code_style_\u0026_linting-rubocop--lts-34495e.svg?plastic\u0026logo=ruby\u0026logoColor=white\n[💎appraisal2]: https://github.com/appraisal-rb/appraisal2\n[💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic\u0026logo=ruby\u0026logoColor=white\n[💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/\n\n\u003c!-- kettle-jem:metadata:start --\u003e\n| Field | Value |\n|---|---|\n| Package | snaky_hash |\n| Description | 🔮 A Hashie::Mash joint to make #snakelife better |\n| Homepage | https://github.com/ruby-oauth/snaky_hash |\n| Source | https://github.com/ruby-oauth/snaky_hash/tree/v2.0.5 |\n| License | `MIT` |\n| Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/snaky_hash, https://www.buymeacoffee.com/pboling |\n\u003c!-- kettle-jem:metadata:end --\u003e\n","funding_links":["https://github.com/sponsors/pboling","https://buymeacoffee.com/pboling","https://issuehunt.io/r/pboling","https://ko-fi.com/pboling","https://liberapay.com/pboling","https://opencollective.com/ruby-oauth","https://patreon.com/galtzo","https://polar.sh/pboling","https://thanks.dev/u/gh/pboling","https://tidelift.com/funding/github/rubygems/snaky_hash","https://tidelift.com/badges/package/rubygems/snaky_hash","https://tidelift.com/subscription/pkg/rubygems-snaky_hash?utm_source=rubygems-snaky_hash\u0026utm_medium=referral\u0026utm_campaign=readme","https://opencollective.com/bill-woika","https://opencollective.com/guest-e77282f7","https://opencollective.com/guest-c93e0c48","https://liberapay.com/pboling/donate","https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte\u0026emoji=\u0026slug=pboling\u0026button_colour=FFDD00\u0026font_colour=000000\u0026font_family=Cookie\u0026outline_colour=000000\u0026coffee_colour=ffffff","https://www.buymeacoffee.com/pboling","https://www.paypal.com/paypalme/peterboling","https://blog.tidelift.com/tidelift-joins-sonar","https://issuehunt.io/u/pboling"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["version","authorization","oauth","oauth-client","oauth-server","oauth2","oauth2-client","oidc","oidc-client","feature-flag"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/7448","html_url":"https://ruby.ecosyste.ms/projects/7448"}