{"id":123,"name":null,"description":"Simple one-liner tests for common Rails functionality","url":"https://github.com/thoughtbot/shoulda-matchers","last_synced_at":"2026-04-30T21:00:23.220Z","repository":{"id":1235813,"uuid":"1172597","full_name":"thoughtbot/shoulda-matchers","owner":"thoughtbot","description":"Simple one-liner tests for common Rails functionality","archived":false,"fork":false,"pushed_at":"2026-04-28T09:15:39.000Z","size":16030,"stargazers_count":3571,"open_issues_count":42,"forks_count":913,"subscribers_count":76,"default_branch":"main","last_synced_at":"2026-04-28T11:23:55.506Z","etag":null,"topics":["rails","rspec","ruby","testing"],"latest_commit_sha":null,"homepage":"https://matchers.shoulda.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AF83/c3po","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":null,"dco":null,"cla":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2026-04-28T09:15:46.000Z","dependencies_parsed_at":"2026-02-22T12:01:21.090Z","dependency_job_id":"ae762cb5-6466-4154-b068-f2bbb3f6b8bd","html_url":"https://github.com/thoughtbot/shoulda-matchers","commit_stats":{"total_commits":2008,"total_committers":340,"mean_commits":5.905882352941177,"dds":0.7051792828685259,"last_synced_commit":"6f4de5ad6d0d09486c2c713fb1a0bf38169d399e"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/thoughtbot/shoulda-matchers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/sbom","scorecard":{"id":883103,"data":{"date":"2025-08-11","repo":{"name":"github.com/thoughtbot/shoulda-matchers","commit":"51a0fdf6eca812de61db28b2c07d7c747c9151ba"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 19/25 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-readme.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-security.yml:14","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-readme.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-security.yml:1","Warn: no topLevel permission defined: .github/workflows/rubocop.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-readme.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-readme.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-security.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rubocop.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-22f2-v57c-j9cx","Warn: Project is vulnerable to: GHSA-54rr-7fvw-6x8f","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-xj5v-6v4g-jfw6","Warn: Project is vulnerable to: GHSA-2rxp-v6pw-ch6m","Warn: Project is vulnerable to: GHSA-4xqq-m2hx-25v8","Warn: Project is vulnerable to: GHSA-5866-49gr-22v4","Warn: Project is vulnerable to: GHSA-r55c-59qm-vjw6","Warn: Project is vulnerable to: GHSA-vg3r-rm7w-2xgh","Warn: Project is vulnerable to: GHSA-vmwr-mc7x-5vc3","Warn: Project is vulnerable to: GHSA-8mq4-9jjh-9xrc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T08:58:31.776Z","repository_id":1235813,"created_at":"2025-08-24T08:58:31.776Z","updated_at":"2025-08-24T08:58:31.776Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32379629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T11:25:28.583Z","status":"ssl_error","status_checked_at":"2026-04-28T11:25:05.435Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"thoughtbot","name":"thoughtbot, inc.","uuid":"6183","kind":"organization","description":"We work with organizations of all sizes to design, develop, and grow their web and mobile products.","email":"hello@thoughtbot.com","website":"https://thoughtbot.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/6183?v=4","repositories_count":434,"last_synced_at":"2024-04-14T06:41:37.100Z","metadata":{"has_sponsors_listing":true,"funding":{"github":"thoughtbot"}},"html_url":"https://github.com/thoughtbot","funding_links":["https://github.com/sponsors/thoughtbot"],"total_stars":129983,"followers":556,"following":0,"created_at":"2022-11-02T16:21:36.147Z","updated_at":"2024-04-14T06:43:02.073Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot/repositories"},"packages":[{"id":13713347,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["ruby"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-12T23:41:46.636Z","latest_release_published_at":"2026-02-12T23:41:46.636Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-13T15:48:04.828Z","created_at":"2026-02-12T23:41:46.411Z","updated_at":"2026-03-13T16:01:55.567Z","registry_url":"https://tracker.debian.org/pkg/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":"https://packages.debian.org/bookworm/ruby-shoulda-matchers","metadata":{"component":"main","architecture":"all","priority":"source","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-12T23:41:47.374Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-shoulda-matchers?arch=source\u0026distro=debian-12","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"debian-12","url":"https://packages.debian.org/bookworm","ecosystem":"debian","default":true,"packages_count":34734,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"debian","metadata":{"codename":"bookworm"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.459Z","updated_at":"2026-04-27T18:20:38.992Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/namespaces"}},{"id":13407364,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["universe/ruby"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-06T16:04:20.316Z","latest_release_published_at":"2026-02-06T16:04:20.316Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-06T16:42:27.002Z","created_at":"2026-02-06T16:04:19.617Z","updated_at":"2026-03-06T16:42:27.003Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{},"purl":"pkg:deb/ubuntu/ruby-shoulda-matchers?arch=source\u0026distro=ubuntu-24.04","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"ubuntu-24.04","url":"https://launchpad.net/ubuntu/noble","ecosystem":"ubuntu","default":true,"packages_count":37306,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"noble"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:45.928Z","updated_at":"2026-04-27T18:20:35.701Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/namespaces"}},{"id":13606109,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["ruby"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-11T11:27:39.980Z","latest_release_published_at":"2026-02-11T11:27:39.980Z","latest_release_number":"2.8.0-1","last_synced_at":"2026-03-13T19:07:04.009Z","created_at":"2026-02-11T11:27:39.795Z","updated_at":"2026-03-13T19:07:04.010Z","registry_url":"https://tracker.debian.org/pkg/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":"https://packages.debian.org/buster/ruby-shoulda-matchers","metadata":{"component":"main","architecture":"all","priority":"source","binary":"ruby-shoulda-matchers","standards_version":"3.9.8","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 9~), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-11T15:15:23.047Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-shoulda-matchers?arch=source\u0026distro=debian-10\u0026repository_url=https://packages.debian.org/buster","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"debian-10","url":"https://packages.debian.org/buster","ecosystem":"debian","default":false,"packages_count":28836,"maintainers_count":0,"namespaces_count":3,"keywords_count":915,"github":"debian","metadata":{"codename":"buster","mirror":"http://archive.debian.org/debian"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.156Z","updated_at":"2026-04-27T18:20:39.693Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/namespaces"}},{"id":13751742,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["universe/ruby"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-13T07:22:59.191Z","latest_release_published_at":"2026-02-13T07:22:59.191Z","latest_release_number":"2.8.0-1","last_synced_at":"2026-03-13T14:25:22.417Z","created_at":"2026-02-13T07:22:59.030Z","updated_at":"2026-03-13T14:25:22.417Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-shoulda-matchers","standards_version":"3.9.8","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 9~), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-13T07:22:59.918Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-shoulda-matchers?arch=source\u0026distro=ubuntu-20.04\u0026repository_url=https://launchpad.net/ubuntu/focal","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"ubuntu-20.04","url":"https://launchpad.net/ubuntu/focal","ecosystem":"ubuntu","default":false,"packages_count":30789,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"focal"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:47.233Z","updated_at":"2026-04-27T18:20:36.874Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/namespaces"}},{"id":13805323,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["universe/ruby"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-13T18:32:56.116Z","latest_release_published_at":"2026-02-13T18:32:56.116Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-14T03:14:12.169Z","created_at":"2026-02-13T18:32:55.862Z","updated_at":"2026-03-14T03:14:12.169Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-13T18:32:56.859Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-shoulda-matchers?arch=source\u0026distro=ubuntu-23.10\u0026repository_url=https://launchpad.net/ubuntu/mantic","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"ubuntu-23.10","url":"https://launchpad.net/ubuntu/mantic","ecosystem":"ubuntu","default":false,"packages_count":36642,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"mantic","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.636Z","updated_at":"2026-04-27T18:20:38.051Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/namespaces"}},{"id":13567187,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["universe/ruby"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-11T06:50:01.310Z","latest_release_published_at":"2026-02-11T06:50:01.310Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-12T01:20:31.593Z","created_at":"2026-02-11T06:50:01.140Z","updated_at":"2026-03-12T01:20:31.594Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-11T14:57:14.926Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-shoulda-matchers?arch=source\u0026distro=ubuntu-23.04\u0026repository_url=https://launchpad.net/ubuntu/lunar","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"ubuntu-23.04","url":"https://launchpad.net/ubuntu/lunar","ecosystem":"ubuntu","default":false,"packages_count":36116,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"lunar","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:49.117Z","updated_at":"2026-04-27T18:20:38.741Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/namespaces"}},{"id":13531008,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["ruby"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-10T23:39:07.492Z","latest_release_published_at":"2026-02-10T23:39:07.492Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-14T04:21:24.668Z","created_at":"2026-02-10T23:39:07.262Z","updated_at":"2026-03-14T04:21:24.668Z","registry_url":"https://tracker.debian.org/pkg/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":"https://packages.debian.org/bullseye/ruby-shoulda-matchers","metadata":{"component":"main","architecture":"all","priority":"source","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-11T14:27:02.213Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-shoulda-matchers?arch=source\u0026distro=debian-11\u0026repository_url=https://packages.debian.org/bullseye","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"debian-11","url":"https://packages.debian.org/bullseye","ecosystem":"debian","default":false,"packages_count":31268,"maintainers_count":0,"namespaces_count":3,"keywords_count":0,"github":"debian","metadata":{"codename":"bullseye"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.702Z","updated_at":"2026-04-27T18:20:39.352Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/namespaces"}},{"id":8616116,"name":"github.com/thoughtbot/shoulda-matchers","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":[],"namespace":null,"versions_count":55,"first_release_published_at":"2023-12-03T01:58:51.113Z","latest_release_published_at":"2025-10-31T23:29:02.000Z","latest_release_number":"v7.0.1+incompatible","last_synced_at":"2026-04-26T19:00:42.532Z","created_at":"2023-12-03T01:58:14.507Z","updated_at":"2026-04-26T19:00:42.533Z","registry_url":"https://pkg.go.dev/github.com/thoughtbot/shoulda-matchers","install_command":"go get github.com/thoughtbot/shoulda-matchers","documentation_url":"https://pkg.go.dev/github.com/thoughtbot/shoulda-matchers#section-documentation","metadata":{},"repo_metadata":{"id":1235813,"uuid":"1172597","full_name":"thoughtbot/shoulda-matchers","owner":"thoughtbot","description":"Simple one-liner tests for common Rails functionality","archived":false,"fork":false,"pushed_at":"2025-10-31T23:29:50.000Z","size":15973,"stargazers_count":3558,"open_issues_count":47,"forks_count":911,"subscribers_count":77,"default_branch":"main","last_synced_at":"2025-11-03T06:02:53.997Z","etag":null,"topics":["rails","rspec","ruby","testing"],"latest_commit_sha":null,"homepage":"https://matchers.shoulda.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AF83/c3po","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":null,"dco":null,"cla":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2025-10-31T23:29:16.000Z","dependencies_parsed_at":"2024-01-12T18:54:40.164Z","dependency_job_id":"8d259675-9207-4ba7-beb2-658d2ed560f6","html_url":"https://github.com/thoughtbot/shoulda-matchers","commit_stats":{"total_commits":2008,"total_committers":340,"mean_commits":5.905882352941177,"dds":0.7051792828685259,"last_synced_commit":"6f4de5ad6d0d09486c2c713fb1a0bf38169d399e"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/thoughtbot/shoulda-matchers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/sbom","scorecard":{"id":883103,"data":{"date":"2025-08-11","repo":{"name":"github.com/thoughtbot/shoulda-matchers","commit":"51a0fdf6eca812de61db28b2c07d7c747c9151ba"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 19/25 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-readme.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-security.yml:14","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-readme.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-security.yml:1","Warn: no topLevel permission defined: .github/workflows/rubocop.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-readme.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-readme.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-security.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rubocop.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-22f2-v57c-j9cx","Warn: Project is vulnerable to: GHSA-54rr-7fvw-6x8f","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-xj5v-6v4g-jfw6","Warn: Project is vulnerable to: GHSA-2rxp-v6pw-ch6m","Warn: Project is vulnerable to: GHSA-4xqq-m2hx-25v8","Warn: Project is vulnerable to: GHSA-5866-49gr-22v4","Warn: Project is vulnerable to: GHSA-r55c-59qm-vjw6","Warn: Project is vulnerable to: GHSA-vg3r-rm7w-2xgh","Warn: Project is vulnerable to: GHSA-vmwr-mc7x-5vc3","Warn: Project is vulnerable to: GHSA-8mq4-9jjh-9xrc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T08:58:31.776Z","repository_id":1235813,"created_at":"2025-08-24T08:58:31.776Z","updated_at":"2025-08-24T08:58:31.776Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282678633,"owners_count":26709029,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-04T02:00:05.887Z","response_time":62,"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":"thoughtbot","name":"thoughtbot, inc.","uuid":"6183","kind":"organization","description":"We work with organizations of all sizes to design, develop, and grow their web and mobile products.","email":"hello@thoughtbot.com","website":"https://thoughtbot.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/6183?v=4","repositories_count":434,"last_synced_at":"2024-04-14T06:41:37.100Z","metadata":{"has_sponsors_listing":true,"funding":{"github":"thoughtbot"}},"html_url":"https://github.com/thoughtbot","funding_links":["https://github.com/sponsors/thoughtbot"],"total_stars":129983,"followers":556,"following":0,"created_at":"2022-11-02T16:21:36.147Z","updated_at":"2024-04-14T06:43:02.073Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot/repositories"},"tags":[{"name":"v7.0.1","sha":"2a503318d6dfab04fa5d2b76ad8b790abda4e4df","kind":"tag","published_at":"2025-10-31T23:29:21.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v7.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v7.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v7.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.1/manifests"},{"name":"v7.0.0","sha":"731aaa71c56125c1e2eef9c6fe28d47963216d37","kind":"tag","published_at":"2025-10-31T19:08:00.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v7.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v7.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v7.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.0/manifests"},{"name":"v6.5.0","sha":"d8140e8eb340f1b4e70d9cca7c5e87ca86b37f73","kind":"tag","published_at":"2025-04-25T19:09:49.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.5.0/manifests"},{"name":"v6.4.0","sha":"8890f3d182eebf2a6c8d5024afd656c2274a90c1","kind":"tag","published_at":"2024-08-16T20:41:18.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.4.0/manifests"},{"name":"v6.3.1","sha":"f4f93fbdc4fcd7fd0f4f1637f3596fdf016e24f8","kind":"tag","published_at":"2024-08-13T13:10:43.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.3.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.1/manifests"},{"name":"v6.3.0","sha":"d56a4b86ac43e86cc82099949b6743ca710f90ac","kind":"tag","published_at":"2024-08-09T21:01:08.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.0/manifests"},{"name":"v6.2.0","sha":"efd1b39db0326b3eb19656b91a62cc742a850f32","kind":"commit","published_at":"2024-03-15T14:53:33.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.2.0/manifests"},{"name":"v6.1.0","sha":"cff5263aeb5b0732dac0d92f9edac6db214acdb5","kind":"commit","published_at":"2024-01-19T14:54:04.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.1.0/manifests"},{"name":"v6.0.0","sha":"4cfa6e779980e8561d5a56b5aaf5fba96037f226","kind":"tag","published_at":"2023-12-22T19:44:07.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.0.0/manifests"},{"name":"v5.3.0","sha":"a5e3133296b5443340e92f06039f751a92935e38","kind":"tag","published_at":"2022-12-16T18:39:09.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.3.0/manifests"},{"name":"v5.2.0","sha":"8a701024bd0a1a3219d1a5786ca3dd928f827436","kind":"tag","published_at":"2022-09-17T14:04:33.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.2.0/manifests"},{"name":"v5.1.0","sha":"781ecd06f2611b58585cb4f9d2be38326e88fcc5","kind":"tag","published_at":"2021-12-22T22:37:08.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.1.0/manifests"},{"name":"v5.0.0","sha":"c320bdc8149e4d78f979e3aa5c52ebfe97418868","kind":"tag","published_at":"2021-07-10T11:40:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0/manifests"},{"name":"v5.0.0.rc1","sha":"b3c792338a0fbfeda1d4de54c4e2a96f9c2836fc","kind":"tag","published_at":"2021-06-04T21:07:45.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.0.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0.rc1/manifests"},{"name":"v4.5.1","sha":"949bfa38f1c1f74782e20304e1240e7059aaf4f2","kind":"tag","published_at":"2021-01-22T23:19:14.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.5.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.5.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.1/manifests"},{"name":"v4.5.0","sha":"5d48d37e1fcaa27da9d9c053e2f7510f1491296b","kind":"tag","published_at":"2021-01-11T23:02:00.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.0/manifests"},{"name":"v4.4.1","sha":"4e841913af4383f2c062b2595c9b62c89979dc16","kind":"tag","published_at":"2020-08-26T17:33:44.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.4.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.1/manifests"},{"name":"v4.4.0","sha":"c8cd836bc8f54231eefbe79bc8535e847244354a","kind":"tag","published_at":"2020-08-26T05:51:59.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.0/manifests"},{"name":"v4.3.0","sha":"321b87e76d8e8eded1706ac6957db7a12e8abbc8","kind":"tag","published_at":"2020-02-18T07:29:22.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.3.0/manifests"},{"name":"v4.2.0","sha":"068b0e7afcdab7570d71e4b9eca10b52896e3fdb","kind":"tag","published_at":"2020-01-09T07:25:37.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.2.0/manifests"},{"name":"v4.1.2","sha":"c32307fe3309fefea0398f6cd4e850d8e992046c","kind":"tag","published_at":"2019-08-01T03:35:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.2/manifests"},{"name":"v4.1.1","sha":"e193d1b7b6e6b6cdd15ced27b5647140864e1dee","kind":"tag","published_at":"2019-07-16T02:34:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.1/manifests"},{"name":"v4.1.0","sha":"71deebdeff2c5760a510cd7331bf1e6ee1cd1d6a","kind":"tag","published_at":"2019-06-09T19:03:28.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.0/manifests"},{"name":"v4.0.1","sha":"5ce00eb9757cd22a6554821a15efdbb0cfa402bd","kind":"tag","published_at":"2019-02-26T05:12:58.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.1/manifests"},{"name":"v4.0.0","sha":"9400e892a01e686fd337521edd8b6ab5c4777058","kind":"tag","published_at":"2019-02-16T10:06:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0/manifests"},{"name":"v3.1.3","sha":"3fea7992fd78f9365794de927f9f3589830a6947","kind":"tag","published_at":"2019-01-29T02:43:51.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.3","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.3/manifests"},{"name":"v4.0.0.rc1","sha":"517d0ec9dd2961fc78d8d0bcd48660d7acabfe7a","kind":"tag","published_at":"2018-10-02T17:55:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.0.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0.rc1/manifests"},{"name":"v3.1.2","sha":"1201198f959809d7a82b51b66e878fb1d9b856e3","kind":"commit","published_at":"2017-07-12T18:10:03.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.2/manifests"},{"name":"v3.1.1","sha":"547500730dab994b4e06ce97cc521d54bb53f579","kind":"tag","published_at":"2016-01-28T07:20:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.1/manifests"},{"name":"v3.1.0","sha":"f8fef81cff56dd99138f0bf4d917b499719dde31","kind":"tag","published_at":"2016-01-11T06:22:58.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.0/manifests"},{"name":"v3.0.1","sha":"9a8e71f75bd2eeb901bfc381641641a4f9ecbea3","kind":"tag","published_at":"2015-10-23T20:43:11.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.1/manifests"},{"name":"v3.0.0","sha":"2a049307b6e4edbd2f34778b416a933142fc23b1","kind":"tag","published_at":"2015-10-01T16:33:29.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0/manifests"},{"name":"v3.0.0.rc1","sha":"a3fb06c369c2b5e96831cb2c6c8532de8e2f0e62","kind":"tag","published_at":"2015-06-01T07:51:37.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.0.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0.rc1/manifests"},{"name":"v2.8.0","sha":"bbd0d5ed25a66e65ae0232e853ed937ed6ecf40e","kind":"tag","published_at":"2015-01-30T22:33:19.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0/manifests"},{"name":"v2.8.0.rc2","sha":"c9dc416a4e8c27e6fd2faf73cdb2c652cf359d4d","kind":"tag","published_at":"2015-01-23T16:44:38.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0.rc2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.8.0.rc2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc2/manifests"},{"name":"v2.8.0.rc1","sha":"16f87a8fa048be4f015ee10cf8b9ddb38bdbd275","kind":"tag","published_at":"2014-12-25T06:04:25.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.8.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc1/manifests"},{"name":"v2.7.0","sha":"2a4b9f1e163fa9c5b84f223962d5f8e099032420","kind":"tag","published_at":"2014-09-03T06:44:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.7.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.7.0/manifests"},{"name":"v2.6.2","sha":"888665745f4cb13a0e5f10bd61e4c6488bdd2c64","kind":"tag","published_at":"2014-07-19T00:09:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.2/manifests"},{"name":"v2.6.1","sha":"1511ed916156c6072cfba05b37f9f2c1bec2f0b6","kind":"tag","published_at":"2014-04-30T21:53:47.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1/manifests"},{"name":"v2.6.1.rc2","sha":"cdcea5adb4c616fa67c02e21ad42df86e91cd857","kind":"tag","published_at":"2014-04-28T14:34:20.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1.rc2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.1.rc2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc2/manifests"},{"name":"v2.6.1.rc1","sha":"d7a35482494866dc58bc9e94ffe0df0c5bff5323","kind":"tag","published_at":"2014-04-22T16:27:41.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.1.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc1/manifests"},{"name":"v2.6.0","sha":"8fa9d8c789e41794ce60d16a54599e6021308b15","kind":"tag","published_at":"2014-04-12T21:42:54.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.0/manifests"},{"name":"v2.5.0","sha":"b9998891f0825d9424bb7008e4fef1171148f528","kind":"tag","published_at":"2014-01-10T22:39:47.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.5.0/manifests"},{"name":"v2.4.0","sha":"f217014b1e788a73dcc79f4d35bed52b02fc4b58","kind":"tag","published_at":"2013-09-20T20:12:18.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0/manifests"},{"name":"v2.4.0.rc1","sha":"1021fcac89d4cb6721a694001bee9d90741973ba","kind":"tag","published_at":"2013-08-16T22:53:24.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.4.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.4.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.4.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0.rc1/manifests"},{"name":"v2.3.0","sha":"331e761fc78c9edc9b09adcf1d26e388c04656bd","kind":"tag","published_at":"2013-08-16T17:05:12.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.3.0/manifests"},{"name":"v2.2.0","sha":"41a18a94287df760cc39fd3159f3e980d6084dcc","kind":"tag","published_at":"2013-06-11T14:35:26.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.2.0/manifests"},{"name":"v2.1.0","sha":"4594740650eb53d2db07d1191f5e8dee112eff11","kind":"tag","published_at":"2013-05-05T16:06:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.1.0/manifests"},{"name":"v2.0.0","sha":"8d93d9d4984792b90cfab78bf03e50a7796ad759","kind":"tag","published_at":"2013-04-05T15:48:26.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.0.0/manifests"},{"name":"v1.5.6","sha":"f80480943e32e8e23feca33086102dd64bcfb58e","kind":"tag","published_at":"2013-03-29T20:46:32.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.6","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.6/manifests"},{"name":"v1.5.5","sha":"f96c8c7606d2bdea8c6713a7058c514f24344874","kind":"tag","published_at":"2013-03-28T21:09:21.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.5","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.5/manifests"},{"name":"v1.5.4","sha":"4b91ea3c16cd7c45a14a0d9d5c96a7875768555c","kind":"tag","published_at":"2013-03-21T19:50:19.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.4","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.4/manifests"},{"name":"v1.5.3","sha":"fb025c0b6306a833ff7fb033b4ae5433c2604e1e","kind":"tag","published_at":"2013-03-21T19:34:07.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.3","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.3/manifests"},{"name":"v1.5.2","sha":"22ecb04bf93773f5ea807399d859a7100610b0c2","kind":"tag","published_at":"2013-03-19T23:36:05.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.2/manifests"},{"name":"v1.5.1","sha":"706804ceb4d8384f18f9429a96a9cb1e4a0cb8a9","kind":"tag","published_at":"2013-03-19T13:51:48.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.1/manifests"},{"name":"v1.5.0","sha":"a756c46c846b13c63ba1e51eab39b2d114476b0f","kind":"tag","published_at":"2013-03-15T21:18:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.0/manifests"},{"name":"v1.4.2","sha":"656714cf736168090b2c01b109b5799ac1401966","kind":"tag","published_at":"2012-11-30T15:34:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.4.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.2/manifests"},{"name":"v1.4.1","sha":"fdf33501b03133852b77de6f42b12bc1afd260a0","kind":"tag","published_at":"2012-10-15T15:50:39.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.1/manifests"},{"name":"v1.4.0","sha":"e5914f75c1849a471998d2d284a2a8a788bf5c74","kind":"tag","published_at":"2012-10-05T17:30:40.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.0/manifests"},{"name":"v1.3.0","sha":"481631ce366280998f2d2690fca57788a2a73593","kind":"tag","published_at":"2012-08-30T18:19:34.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"0f41cd521c74d1ab4ef06958444b7563ec747652","kind":"tag","published_at":"2012-06-14T19:43:06.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.2.0/manifests"},{"name":"v1.1.0","sha":"38f1b0c793ad55d5cb969dcace568f11355128ee","kind":"tag","published_at":"2012-04-13T15:01:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.1.0/manifests"},{"name":"v1.0.0","sha":"7c408eff76802e3dc91590c381ae4e9a397fb2e1","kind":"commit","published_at":"2011-11-02T00:23:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2025-11-11T10:05:25.083Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":10.77902998550931,"dependent_packages_count":9.55954712080186,"stargazers_count":1.1446097402473865,"forks_count":0.9078975168246918,"docker_downloads_count":null,"average":5.597771090845812},"purl":"pkg:golang/github.com/thoughtbot/shoulda-matchers","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/thoughtbot/shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/thoughtbot/shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/thoughtbot/shoulda-matchers/dependencies","status":null,"funding_links":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-09T09:03:53.027Z","issues_count":87,"pull_requests_count":190,"avg_time_to_close_issue":26186148.833333332,"avg_time_to_close_pull_request":11069863.976744186,"issues_closed_count":54,"pull_requests_closed_count":172,"pull_request_authors_count":64,"issue_authors_count":78,"avg_comments_per_issue":3.2298850574712645,"avg_comments_per_pull_request":1.7210526315789474,"merged_pull_requests_count":144,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":10,"past_year_pull_requests_count":23,"past_year_avg_time_to_close_issue":5449635.0,"past_year_avg_time_to_close_pull_request":1434271.0,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":16,"past_year_pull_request_authors_count":8,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":0.6,"past_year_avg_comments_per_pull_request":1.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":3,"past_year_merged_pull_requests_count":16,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":47,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"},{"login":"VSPPedro","count":32,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/VSPPedro"},{"login":"neilvcarvalho","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/neilvcarvalho"},{"login":"mcmire","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mcmire"},{"login":"vsppedro","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vsppedro"}],"active_maintainers":[{"login":"matsales28","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fthoughtbot%2Fshoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fthoughtbot%2Fshoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fthoughtbot%2Fshoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fthoughtbot%2Fshoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fthoughtbot%2Fshoulda-matchers/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2119755,"maintainers_count":0,"namespaces_count":782439,"keywords_count":112823,"github":"golang","metadata":{"funded_packages_count":53495},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-04-19T05:14:45.920Z","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":300897,"name":"shoulda-matchers","ecosystem":"rubygems","description":"Shoulda Matchers provides RSpec- and Minitest-compatible one-liners to test common Rails functionality that, if written by hand, would be much longer, more complex, and error-prone. ","homepage":"https://matchers.shoulda.io","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":[],"namespace":null,"versions_count":63,"first_release_published_at":"2011-01-19T16:19:40.111Z","latest_release_published_at":"2025-10-31T23:29:43.032Z","latest_release_number":"7.0.1","last_synced_at":"2026-04-30T02:31:15.057Z","created_at":"2022-04-06T10:53:16.637Z","updated_at":"2026-04-30T02:31:15.058Z","registry_url":"https://rubygems.org/gems/shoulda-matchers","install_command":"gem install shoulda-matchers -s https://rubygems.org","documentation_url":"http://www.rubydoc.info/gems/shoulda-matchers/","metadata":{"funding":null},"repo_metadata":{"id":1235813,"uuid":"1172597","full_name":"thoughtbot/shoulda-matchers","owner":"thoughtbot","description":"Simple one-liner tests for common Rails functionality","archived":false,"fork":false,"pushed_at":"2024-10-08T14:27:13.000Z","size":15876,"stargazers_count":3516,"open_issues_count":41,"forks_count":911,"subscribers_count":81,"default_branch":"main","last_synced_at":"2024-10-29T14:15:01.049Z","etag":null,"topics":["rails","rspec","ruby","testing"],"latest_commit_sha":null,"homepage":"https://matchers.shoulda.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AF83/c3po","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2024-10-27T09:02:37.000Z","dependencies_parsed_at":"2024-01-12T18:54:40.164Z","dependency_job_id":"8d259675-9207-4ba7-beb2-658d2ed560f6","html_url":"https://github.com/thoughtbot/shoulda-matchers","commit_stats":{"total_commits":1993,"total_committers":331,"mean_commits":6.021148036253776,"dds":0.7029603612644255,"last_synced_commit":"3c88e1c3e85dbc51a75ae65a2cd6df5e8838655d"},"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222088554,"owners_count":16928976,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"thoughtbot","name":"thoughtbot, inc.","uuid":"6183","kind":"organization","description":"We work with organizations of all sizes to design, develop, and grow their web and mobile products.","email":"hello@thoughtbot.com","website":"https://thoughtbot.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/6183?v=4","repositories_count":434,"last_synced_at":"2024-04-14T06:41:37.100Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/thoughtbot","funding_links":["https://github.com/sponsors/thoughtbot"],"total_stars":129983,"followers":556,"following":0,"created_at":"2022-11-02T16:21:36.147Z","updated_at":"2024-04-14T06:43:02.073Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot/repositories"},"tags":[{"name":"v6.3.0","sha":"d56a4b86ac43e86cc82099949b6743ca710f90ac","kind":"tag","published_at":"2024-08-09T21:01:08.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.0/manifests"},{"name":"v6.2.0","sha":"efd1b39db0326b3eb19656b91a62cc742a850f32","kind":"commit","published_at":"2024-03-15T14:53:33.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.2.0/manifests"},{"name":"v6.1.0","sha":"cff5263aeb5b0732dac0d92f9edac6db214acdb5","kind":"commit","published_at":"2024-01-19T14:54:04.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.1.0/manifests"},{"name":"v6.0.0","sha":"4cfa6e779980e8561d5a56b5aaf5fba96037f226","kind":"tag","published_at":"2023-12-22T19:44:07.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.0.0/manifests"},{"name":"v5.3.0","sha":"a5e3133296b5443340e92f06039f751a92935e38","kind":"tag","published_at":"2022-12-16T18:39:09.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.3.0/manifests"},{"name":"v5.2.0","sha":"8a701024bd0a1a3219d1a5786ca3dd928f827436","kind":"tag","published_at":"2022-09-17T14:04:33.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.2.0/manifests"},{"name":"v5.1.0","sha":"781ecd06f2611b58585cb4f9d2be38326e88fcc5","kind":"tag","published_at":"2021-12-22T22:37:08.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.1.0/manifests"},{"name":"v5.0.0","sha":"c320bdc8149e4d78f979e3aa5c52ebfe97418868","kind":"tag","published_at":"2021-07-10T11:40:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0/manifests"},{"name":"v5.0.0.rc1","sha":"b3c792338a0fbfeda1d4de54c4e2a96f9c2836fc","kind":"tag","published_at":"2021-06-04T21:07:45.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0.rc1/manifests"},{"name":"v4.5.1","sha":"949bfa38f1c1f74782e20304e1240e7059aaf4f2","kind":"tag","published_at":"2021-01-22T23:19:14.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.5.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.1/manifests"},{"name":"v4.5.0","sha":"5d48d37e1fcaa27da9d9c053e2f7510f1491296b","kind":"tag","published_at":"2021-01-11T23:02:00.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.0/manifests"},{"name":"v4.4.1","sha":"4e841913af4383f2c062b2595c9b62c89979dc16","kind":"tag","published_at":"2020-08-26T17:33:44.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.4.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.1/manifests"},{"name":"v4.4.0","sha":"c8cd836bc8f54231eefbe79bc8535e847244354a","kind":"tag","published_at":"2020-08-26T05:51:59.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.0/manifests"},{"name":"v4.3.0","sha":"321b87e76d8e8eded1706ac6957db7a12e8abbc8","kind":"tag","published_at":"2020-02-18T07:29:22.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.3.0/manifests"},{"name":"v4.2.0","sha":"068b0e7afcdab7570d71e4b9eca10b52896e3fdb","kind":"tag","published_at":"2020-01-09T07:25:37.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.2.0/manifests"},{"name":"v4.1.2","sha":"c32307fe3309fefea0398f6cd4e850d8e992046c","kind":"tag","published_at":"2019-08-01T03:35:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.2/manifests"},{"name":"v4.1.1","sha":"e193d1b7b6e6b6cdd15ced27b5647140864e1dee","kind":"tag","published_at":"2019-07-16T02:34:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.1/manifests"},{"name":"v4.1.0","sha":"71deebdeff2c5760a510cd7331bf1e6ee1cd1d6a","kind":"tag","published_at":"2019-06-09T19:03:28.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.0/manifests"},{"name":"v4.0.1","sha":"5ce00eb9757cd22a6554821a15efdbb0cfa402bd","kind":"tag","published_at":"2019-02-26T05:12:58.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.1/manifests"},{"name":"v4.0.0","sha":"9400e892a01e686fd337521edd8b6ab5c4777058","kind":"tag","published_at":"2019-02-16T10:06:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0/manifests"},{"name":"v3.1.3","sha":"3fea7992fd78f9365794de927f9f3589830a6947","kind":"tag","published_at":"2019-01-29T02:43:51.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.3","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.3/manifests"},{"name":"v4.0.0.rc1","sha":"517d0ec9dd2961fc78d8d0bcd48660d7acabfe7a","kind":"tag","published_at":"2018-10-02T17:55:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0.rc1/manifests"},{"name":"v3.1.2","sha":"1201198f959809d7a82b51b66e878fb1d9b856e3","kind":"commit","published_at":"2017-07-12T18:10:03.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.2/manifests"},{"name":"v3.1.1","sha":"547500730dab994b4e06ce97cc521d54bb53f579","kind":"tag","published_at":"2016-01-28T07:20:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.1/manifests"},{"name":"v3.1.0","sha":"f8fef81cff56dd99138f0bf4d917b499719dde31","kind":"tag","published_at":"2016-01-11T06:22:58.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.0/manifests"},{"name":"v3.0.1","sha":"9a8e71f75bd2eeb901bfc381641641a4f9ecbea3","kind":"tag","published_at":"2015-10-23T20:43:11.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.1/manifests"},{"name":"v3.0.0","sha":"2a049307b6e4edbd2f34778b416a933142fc23b1","kind":"tag","published_at":"2015-10-01T16:33:29.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0/manifests"},{"name":"v3.0.0.rc1","sha":"a3fb06c369c2b5e96831cb2c6c8532de8e2f0e62","kind":"tag","published_at":"2015-06-01T07:51:37.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0.rc1/manifests"},{"name":"v2.8.0","sha":"bbd0d5ed25a66e65ae0232e853ed937ed6ecf40e","kind":"tag","published_at":"2015-01-30T22:33:19.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0/manifests"},{"name":"v2.8.0.rc2","sha":"c9dc416a4e8c27e6fd2faf73cdb2c652cf359d4d","kind":"tag","published_at":"2015-01-23T16:44:38.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0.rc2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc2/manifests"},{"name":"v2.8.0.rc1","sha":"16f87a8fa048be4f015ee10cf8b9ddb38bdbd275","kind":"tag","published_at":"2014-12-25T06:04:25.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc1/manifests"},{"name":"v2.7.0","sha":"2a4b9f1e163fa9c5b84f223962d5f8e099032420","kind":"tag","published_at":"2014-09-03T06:44:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.7.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.7.0/manifests"},{"name":"v2.6.2","sha":"888665745f4cb13a0e5f10bd61e4c6488bdd2c64","kind":"tag","published_at":"2014-07-19T00:09:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.2/manifests"},{"name":"v2.6.1","sha":"1511ed916156c6072cfba05b37f9f2c1bec2f0b6","kind":"tag","published_at":"2014-04-30T21:53:47.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1/manifests"},{"name":"v2.6.1.rc2","sha":"cdcea5adb4c616fa67c02e21ad42df86e91cd857","kind":"tag","published_at":"2014-04-28T14:34:20.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1.rc2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc2/manifests"},{"name":"v2.6.1.rc1","sha":"d7a35482494866dc58bc9e94ffe0df0c5bff5323","kind":"tag","published_at":"2014-04-22T16:27:41.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc1/manifests"},{"name":"v2.6.0","sha":"8fa9d8c789e41794ce60d16a54599e6021308b15","kind":"tag","published_at":"2014-04-12T21:42:54.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.0/manifests"},{"name":"v2.5.0","sha":"b9998891f0825d9424bb7008e4fef1171148f528","kind":"tag","published_at":"2014-01-10T22:39:47.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.5.0/manifests"},{"name":"v2.4.0","sha":"f217014b1e788a73dcc79f4d35bed52b02fc4b58","kind":"tag","published_at":"2013-09-20T20:12:18.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0/manifests"},{"name":"v2.4.0.rc1","sha":"1021fcac89d4cb6721a694001bee9d90741973ba","kind":"tag","published_at":"2013-08-16T22:53:24.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.4.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.4.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0.rc1/manifests"},{"name":"v2.3.0","sha":"331e761fc78c9edc9b09adcf1d26e388c04656bd","kind":"tag","published_at":"2013-08-16T17:05:12.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.3.0/manifests"},{"name":"v2.2.0","sha":"41a18a94287df760cc39fd3159f3e980d6084dcc","kind":"tag","published_at":"2013-06-11T14:35:26.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.2.0/manifests"},{"name":"v2.1.0","sha":"4594740650eb53d2db07d1191f5e8dee112eff11","kind":"tag","published_at":"2013-05-05T16:06:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.1.0/manifests"},{"name":"v2.0.0","sha":"8d93d9d4984792b90cfab78bf03e50a7796ad759","kind":"tag","published_at":"2013-04-05T15:48:26.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.0.0/manifests"},{"name":"v1.5.6","sha":"f80480943e32e8e23feca33086102dd64bcfb58e","kind":"tag","published_at":"2013-03-29T20:46:32.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.6","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.6/manifests"},{"name":"v1.5.5","sha":"f96c8c7606d2bdea8c6713a7058c514f24344874","kind":"tag","published_at":"2013-03-28T21:09:21.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.5","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.5/manifests"},{"name":"v1.5.4","sha":"4b91ea3c16cd7c45a14a0d9d5c96a7875768555c","kind":"tag","published_at":"2013-03-21T19:50:19.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.4","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.4/manifests"},{"name":"v1.5.3","sha":"fb025c0b6306a833ff7fb033b4ae5433c2604e1e","kind":"tag","published_at":"2013-03-21T19:34:07.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.3","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.3/manifests"},{"name":"v1.5.2","sha":"22ecb04bf93773f5ea807399d859a7100610b0c2","kind":"tag","published_at":"2013-03-19T23:36:05.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.2/manifests"},{"name":"v1.5.1","sha":"706804ceb4d8384f18f9429a96a9cb1e4a0cb8a9","kind":"tag","published_at":"2013-03-19T13:51:48.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.1/manifests"},{"name":"v1.5.0","sha":"a756c46c846b13c63ba1e51eab39b2d114476b0f","kind":"tag","published_at":"2013-03-15T21:18:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.0/manifests"},{"name":"v1.4.2","sha":"656714cf736168090b2c01b109b5799ac1401966","kind":"tag","published_at":"2012-11-30T15:34:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.2/manifests"},{"name":"v1.4.1","sha":"fdf33501b03133852b77de6f42b12bc1afd260a0","kind":"tag","published_at":"2012-10-15T15:50:39.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.1/manifests"},{"name":"v1.4.0","sha":"e5914f75c1849a471998d2d284a2a8a788bf5c74","kind":"tag","published_at":"2012-10-05T17:30:40.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.0/manifests"},{"name":"v1.3.0","sha":"481631ce366280998f2d2690fca57788a2a73593","kind":"tag","published_at":"2012-08-30T18:19:34.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"0f41cd521c74d1ab4ef06958444b7563ec747652","kind":"tag","published_at":"2012-06-14T19:43:06.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.2.0/manifests"},{"name":"v1.1.0","sha":"38f1b0c793ad55d5cb969dcace568f11355128ee","kind":"tag","published_at":"2012-04-13T15:01:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.1.0/manifests"},{"name":"v1.0.0","sha":"7c408eff76802e3dc91590c381ae4e9a397fb2e1","kind":"commit","published_at":"2011-11-02T00:23:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2024-10-29T20:29:33.061Z","dependent_packages_count":765,"downloads":254277308,"downloads_period":"total","dependent_repos_count":69221,"rankings":{"downloads":0.10648855387428775,"dependent_repos_count":0.138267860527871,"dependent_packages_count":0.061328486524458915,"stargazers_count":0.6132848652445891,"forks_count":0.7755265886865669,"docker_downloads_count":0.19234843500853024,"average":0.31454079831105064},"purl":"pkg:gem/shoulda-matchers","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/shoulda-matchers","docker_dependents_count":389,"docker_downloads_count":594238762,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/shoulda-matchers/dependencies","status":null,"funding_links":["https://github.com/sponsors/thoughtbot"],"critical":true,"issue_metadata":{"last_synced_at":"2024-10-29T17:31:29.296Z","issues_count":77,"pull_requests_count":135,"avg_time_to_close_issue":24750132.672727272,"avg_time_to_close_pull_request":11557822.592307692,"issues_closed_count":55,"pull_requests_closed_count":130,"pull_request_authors_count":59,"issue_authors_count":68,"avg_comments_per_issue":3.74025974025974,"avg_comments_per_pull_request":1.8962962962962964,"merged_pull_requests_count":107,"bot_issues_count":0,"bot_pull_requests_count":2,"past_year_issues_count":21,"past_year_pull_requests_count":56,"past_year_avg_time_to_close_issue":1289400.9333333333,"past_year_avg_time_to_close_pull_request":965020.5283018867,"past_year_issues_closed_count":15,"past_year_pull_requests_closed_count":53,"past_year_pull_request_authors_count":25,"past_year_issue_authors_count":18,"past_year_avg_comments_per_issue":2.238095238095238,"past_year_avg_comments_per_pull_request":1.125,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":52,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"VSPPedro","count":34,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/VSPPedro"},{"login":"matsales28","count":28,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"},{"login":"mcmire","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mcmire"},{"login":"neilvcarvalho","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/neilvcarvalho"},{"login":"vsppedro","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vsppedro"}],"active_maintainers":[{"login":"matsales28","count":25,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"},{"login":"VSPPedro","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/VSPPedro"},{"login":"neilvcarvalho","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/neilvcarvalho"},{"login":"vsppedro","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vsppedro"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/shoulda-matchers/codemeta","maintainers":[{"uuid":"584","login":"mcmire","name":null,"email":null,"url":null,"packages_count":30,"html_url":"https://rubygems.org/profiles/mcmire","role":null,"created_at":"2022-11-09T09:50:59.168Z","updated_at":"2022-11-09T09:50:59.168Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/mcmire/packages"},{"uuid":"544","login":"thoughtbot","name":null,"email":null,"url":null,"packages_count":65,"html_url":"https://rubygems.org/profiles/thoughtbot","role":null,"created_at":"2022-11-09T09:50:59.194Z","updated_at":"2022-11-09T09:50:59.194Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/thoughtbot/packages"},{"uuid":"151665","login":"vsppedro","name":null,"email":null,"url":null,"packages_count":2,"html_url":"https://rubygems.org/profiles/vsppedro","role":null,"created_at":"2022-11-09T09:50:59.157Z","updated_at":"2022-11-09T09:50:59.157Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/vsppedro/packages"},{"uuid":"77516","login":"guialbuk","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://rubygems.org/profiles/guialbuk","role":null,"created_at":"2022-11-09T09:50:59.185Z","updated_at":"2022-11-09T09:50:59.185Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/guialbuk/packages"},{"uuid":"184827","login":"matsales28","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://rubygems.org/profiles/matsales28","role":null,"created_at":"2023-12-13T04:04:02.005Z","updated_at":"2023-12-13T04:04:02.005Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/matsales28/packages"}],"registry":{"name":"rubygems.org","url":"https://rubygems.org","ecosystem":"rubygems","default":true,"packages_count":205566,"maintainers_count":68480,"namespaces_count":0,"keywords_count":0,"github":"rubygems","metadata":{"funded_packages_count":7260},"icon_url":"https://github.com/rubygems.png","created_at":"2022-04-04T15:19:23.446Z","updated_at":"2026-04-03T06:42:17.024Z","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":13779823,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["universe/ruby"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-13T13:26:00.829Z","latest_release_published_at":"2026-02-13T13:26:00.829Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-13T23:40:18.842Z","created_at":"2026-02-13T13:26:00.651Z","updated_at":"2026-03-13T23:40:18.842Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{"id":1235813,"uuid":"1172597","full_name":"thoughtbot/shoulda-matchers","owner":"thoughtbot","description":"Simple one-liner tests for common Rails functionality","archived":false,"fork":false,"pushed_at":"2026-02-01T12:42:26.000Z","size":15980,"stargazers_count":3571,"open_issues_count":43,"forks_count":910,"subscribers_count":76,"default_branch":"main","last_synced_at":"2026-02-06T11:36:46.600Z","etag":null,"topics":["rails","rspec","ruby","testing"],"latest_commit_sha":null,"homepage":"https://matchers.shoulda.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AF83/c3po","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":null,"dco":null,"cla":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2026-02-06T06:44:46.000Z","dependencies_parsed_at":"2024-01-12T18:54:40.164Z","dependency_job_id":"c8108bc8-b073-4d50-ad64-1dcb9a944ead","html_url":"https://github.com/thoughtbot/shoulda-matchers","commit_stats":{"total_commits":2008,"total_committers":340,"mean_commits":5.905882352941177,"dds":0.7051792828685259,"last_synced_commit":"6f4de5ad6d0d09486c2c713fb1a0bf38169d399e"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/thoughtbot/shoulda-matchers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/sbom","scorecard":{"id":883103,"data":{"date":"2025-08-11","repo":{"name":"github.com/thoughtbot/shoulda-matchers","commit":"51a0fdf6eca812de61db28b2c07d7c747c9151ba"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 19/25 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-readme.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-security.yml:14","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-readme.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-security.yml:1","Warn: no topLevel permission defined: .github/workflows/rubocop.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-readme.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-readme.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-security.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rubocop.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-22f2-v57c-j9cx","Warn: Project is vulnerable to: GHSA-54rr-7fvw-6x8f","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-xj5v-6v4g-jfw6","Warn: Project is vulnerable to: GHSA-2rxp-v6pw-ch6m","Warn: Project is vulnerable to: GHSA-4xqq-m2hx-25v8","Warn: Project is vulnerable to: GHSA-5866-49gr-22v4","Warn: Project is vulnerable to: GHSA-r55c-59qm-vjw6","Warn: Project is vulnerable to: GHSA-vg3r-rm7w-2xgh","Warn: Project is vulnerable to: GHSA-vmwr-mc7x-5vc3","Warn: Project is vulnerable to: GHSA-8mq4-9jjh-9xrc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T08:58:31.776Z","repository_id":1235813,"created_at":"2025-08-24T08:58:31.776Z","updated_at":"2025-08-24T08:58:31.776Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29221690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T03:18:47.732Z","status":"ssl_error","status_checked_at":"2026-02-08T03:15:31.985Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"repo_metadata_updated_at":"2026-02-13T13:26:01.111Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":0.2187290384671469,"forks_count":0.09915716410510658,"docker_downloads_count":null,"average":0.07947155064306337},"purl":"pkg:deb/ubuntu/ruby-shoulda-matchers?arch=source\u0026distro=ubuntu-22.04\u0026repository_url=https://launchpad.net/ubuntu/jammy","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-shoulda-matchers/dependencies","status":null,"funding_links":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"ubuntu-22.04","url":"https://launchpad.net/ubuntu/jammy","ecosystem":"ubuntu","default":false,"packages_count":34289,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"jammy"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:46.486Z","updated_at":"2026-04-27T18:20:36.155Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/namespaces"}},{"id":13467290,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["universe/ruby"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-09T17:18:23.424Z","latest_release_published_at":"2026-02-09T17:18:23.424Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-09T18:22:56.952Z","created_at":"2026-02-09T17:18:23.158Z","updated_at":"2026-03-09T18:32:55.620Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-shoulda-matchers?arch=source\u0026distro=ubuntu-24.10\u0026repository_url=https://launchpad.net/ubuntu/oracular","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"ubuntu-24.10","url":"https://launchpad.net/ubuntu/oracular","ecosystem":"ubuntu","default":false,"packages_count":38437,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"oracular","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.028Z","updated_at":"2026-04-27T18:20:37.303Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/namespaces"}},{"id":13950439,"name":"ruby-shoulda-matchers","ecosystem":"guix","description":"Collection of testing matchers extracted from Shoulda","homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"expat","normalized_licenses":["Other"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2026-03-02T18:56:42.798Z","latest_release_published_at":"2026-03-02T18:56:42.798Z","latest_release_number":"5.3.0","last_synced_at":"2026-04-27T16:17:41.864Z","created_at":"2026-03-02T18:56:42.614Z","updated_at":"2026-04-27T16:17:42.736Z","registry_url":"https://packages.guix.gnu.org/packages/ruby-shoulda-matchers/5.3.0/","install_command":"guix install ruby-shoulda-matchers","documentation_url":"https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/ruby-xyz.scm#n10559","metadata":{"location":"gnu/packages/ruby-xyz.scm:10559","variable_name":"ruby-shoulda-matchers"},"repo_metadata":{},"repo_metadata_updated_at":"2026-04-27T16:17:42.701Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:guix/ruby-shoulda-matchers","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/guix/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/guix/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/guix/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"guix","url":"https://guix.gnu.org","ecosystem":"guix","default":true,"packages_count":31189,"maintainers_count":0,"namespaces_count":0,"keywords_count":0,"github":"guix-mirror","metadata":{"funded_packages_count":286},"icon_url":"https://github.com/guix-mirror.png","created_at":"2026-03-02T16:23:46.981Z","updated_at":"2026-04-03T06:23:21.396Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/guix/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/guix/namespaces"}},{"id":12324813,"name":"shoulda-matchers","ecosystem":"rubygems","description":"Shoulda Matchers provides RSpec- and Minitest-compatible one-liners to test common Rails functionality that, if written by hand, would be much longer, more complex, and error-prone. ","homepage":"https://matchers.shoulda.io","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":[],"namespace":null,"versions_count":63,"first_release_published_at":"2011-01-19T16:19:40.111Z","latest_release_published_at":"2025-10-31T23:29:43.032Z","latest_release_number":"7.0.1","last_synced_at":"2026-04-30T20:01:43.980Z","created_at":"2025-10-07T05:57:04.844Z","updated_at":"2026-04-30T20:03:00.401Z","registry_url":"https://gem.coop/gems/shoulda-matchers","install_command":"gem install shoulda-matchers -s https://gem.coop","documentation_url":"http://www.rubydoc.info/gems/shoulda-matchers/","metadata":{"funding":null},"repo_metadata":{"id":1235813,"uuid":"1172597","full_name":"thoughtbot/shoulda-matchers","owner":"thoughtbot","description":"Simple one-liner tests for common Rails functionality","archived":false,"fork":false,"pushed_at":"2026-04-28T09:15:39.000Z","size":16030,"stargazers_count":3571,"open_issues_count":42,"forks_count":913,"subscribers_count":76,"default_branch":"main","last_synced_at":"2026-04-28T11:23:55.506Z","etag":null,"topics":["rails","rspec","ruby","testing"],"latest_commit_sha":null,"homepage":"https://matchers.shoulda.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AF83/c3po","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":null,"dco":null,"cla":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2026-04-28T09:15:46.000Z","dependencies_parsed_at":"2026-02-22T12:01:21.090Z","dependency_job_id":"ae762cb5-6466-4154-b068-f2bbb3f6b8bd","html_url":"https://github.com/thoughtbot/shoulda-matchers","commit_stats":{"total_commits":2008,"total_committers":340,"mean_commits":5.905882352941177,"dds":0.7051792828685259,"last_synced_commit":"6f4de5ad6d0d09486c2c713fb1a0bf38169d399e"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/thoughtbot/shoulda-matchers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/sbom","scorecard":{"id":883103,"data":{"date":"2025-08-11","repo":{"name":"github.com/thoughtbot/shoulda-matchers","commit":"51a0fdf6eca812de61db28b2c07d7c747c9151ba"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 19/25 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-readme.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-security.yml:14","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-readme.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-security.yml:1","Warn: no topLevel permission defined: .github/workflows/rubocop.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-readme.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-readme.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-security.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rubocop.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-22f2-v57c-j9cx","Warn: Project is vulnerable to: GHSA-54rr-7fvw-6x8f","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-xj5v-6v4g-jfw6","Warn: Project is vulnerable to: GHSA-2rxp-v6pw-ch6m","Warn: Project is vulnerable to: GHSA-4xqq-m2hx-25v8","Warn: Project is vulnerable to: GHSA-5866-49gr-22v4","Warn: Project is vulnerable to: GHSA-r55c-59qm-vjw6","Warn: Project is vulnerable to: GHSA-vg3r-rm7w-2xgh","Warn: Project is vulnerable to: GHSA-vmwr-mc7x-5vc3","Warn: Project is vulnerable to: GHSA-8mq4-9jjh-9xrc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T08:58:31.776Z","repository_id":1235813,"created_at":"2025-08-24T08:58:31.776Z","updated_at":"2025-08-24T08:58:31.776Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32379629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T11:25:28.583Z","status":"ssl_error","status_checked_at":"2026-04-28T11:25:05.435Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"thoughtbot","name":"thoughtbot, inc.","uuid":"6183","kind":"organization","description":"We work with organizations of all sizes to design, develop, and grow their web and mobile products.","email":"hello@thoughtbot.com","website":"https://thoughtbot.com","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/6183?v=4","repositories_count":434,"last_synced_at":"2024-04-14T06:41:37.100Z","metadata":{"has_sponsors_listing":true,"funding":{"github":"thoughtbot"}},"html_url":"https://github.com/thoughtbot","funding_links":["https://github.com/sponsors/thoughtbot"],"total_stars":129983,"followers":556,"following":0,"created_at":"2022-11-02T16:21:36.147Z","updated_at":"2024-04-14T06:43:02.073Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot/repositories"},"tags":[{"name":"v7.0.1","sha":"2a503318d6dfab04fa5d2b76ad8b790abda4e4df","kind":"tag","published_at":"2025-10-31T23:29:21.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v7.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v7.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v7.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.1/manifests"},{"name":"v7.0.0","sha":"731aaa71c56125c1e2eef9c6fe28d47963216d37","kind":"tag","published_at":"2025-10-31T19:08:00.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v7.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v7.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v7.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v7.0.0/manifests"},{"name":"v6.5.0","sha":"d8140e8eb340f1b4e70d9cca7c5e87ca86b37f73","kind":"tag","published_at":"2025-04-25T19:09:49.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.5.0/manifests"},{"name":"v6.4.0","sha":"8890f3d182eebf2a6c8d5024afd656c2274a90c1","kind":"tag","published_at":"2024-08-16T20:41:18.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.4.0/manifests"},{"name":"v6.3.1","sha":"f4f93fbdc4fcd7fd0f4f1637f3596fdf016e24f8","kind":"tag","published_at":"2024-08-13T13:10:43.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.3.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.1/manifests"},{"name":"v6.3.0","sha":"d56a4b86ac43e86cc82099949b6743ca710f90ac","kind":"tag","published_at":"2024-08-09T21:01:08.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.3.0/manifests"},{"name":"v6.2.0","sha":"efd1b39db0326b3eb19656b91a62cc742a850f32","kind":"commit","published_at":"2024-03-15T14:53:33.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.2.0/manifests"},{"name":"v6.1.0","sha":"cff5263aeb5b0732dac0d92f9edac6db214acdb5","kind":"commit","published_at":"2024-01-19T14:54:04.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.1.0/manifests"},{"name":"v6.0.0","sha":"4cfa6e779980e8561d5a56b5aaf5fba96037f226","kind":"tag","published_at":"2023-12-22T19:44:07.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v6.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v6.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v6.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v6.0.0/manifests"},{"name":"v5.3.0","sha":"a5e3133296b5443340e92f06039f751a92935e38","kind":"tag","published_at":"2022-12-16T18:39:09.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.3.0/manifests"},{"name":"v5.2.0","sha":"8a701024bd0a1a3219d1a5786ca3dd928f827436","kind":"tag","published_at":"2022-09-17T14:04:33.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.2.0/manifests"},{"name":"v5.1.0","sha":"781ecd06f2611b58585cb4f9d2be38326e88fcc5","kind":"tag","published_at":"2021-12-22T22:37:08.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.1.0/manifests"},{"name":"v5.0.0","sha":"c320bdc8149e4d78f979e3aa5c52ebfe97418868","kind":"tag","published_at":"2021-07-10T11:40:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0/manifests"},{"name":"v5.0.0.rc1","sha":"b3c792338a0fbfeda1d4de54c4e2a96f9c2836fc","kind":"tag","published_at":"2021-06-04T21:07:45.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v5.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v5.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v5.0.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v5.0.0.rc1/manifests"},{"name":"v4.5.1","sha":"949bfa38f1c1f74782e20304e1240e7059aaf4f2","kind":"tag","published_at":"2021-01-22T23:19:14.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.5.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.5.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.1/manifests"},{"name":"v4.5.0","sha":"5d48d37e1fcaa27da9d9c053e2f7510f1491296b","kind":"tag","published_at":"2021-01-11T23:02:00.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.5.0/manifests"},{"name":"v4.4.1","sha":"4e841913af4383f2c062b2595c9b62c89979dc16","kind":"tag","published_at":"2020-08-26T17:33:44.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.4.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.1/manifests"},{"name":"v4.4.0","sha":"c8cd836bc8f54231eefbe79bc8535e847244354a","kind":"tag","published_at":"2020-08-26T05:51:59.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.4.0/manifests"},{"name":"v4.3.0","sha":"321b87e76d8e8eded1706ac6957db7a12e8abbc8","kind":"tag","published_at":"2020-02-18T07:29:22.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.3.0/manifests"},{"name":"v4.2.0","sha":"068b0e7afcdab7570d71e4b9eca10b52896e3fdb","kind":"tag","published_at":"2020-01-09T07:25:37.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.2.0/manifests"},{"name":"v4.1.2","sha":"c32307fe3309fefea0398f6cd4e850d8e992046c","kind":"tag","published_at":"2019-08-01T03:35:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.2/manifests"},{"name":"v4.1.1","sha":"e193d1b7b6e6b6cdd15ced27b5647140864e1dee","kind":"tag","published_at":"2019-07-16T02:34:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.1/manifests"},{"name":"v4.1.0","sha":"71deebdeff2c5760a510cd7331bf1e6ee1cd1d6a","kind":"tag","published_at":"2019-06-09T19:03:28.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.1.0/manifests"},{"name":"v4.0.1","sha":"5ce00eb9757cd22a6554821a15efdbb0cfa402bd","kind":"tag","published_at":"2019-02-26T05:12:58.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.1/manifests"},{"name":"v4.0.0","sha":"9400e892a01e686fd337521edd8b6ab5c4777058","kind":"tag","published_at":"2019-02-16T10:06:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0/manifests"},{"name":"v3.1.3","sha":"3fea7992fd78f9365794de927f9f3589830a6947","kind":"tag","published_at":"2019-01-29T02:43:51.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.3","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.3/manifests"},{"name":"v4.0.0.rc1","sha":"517d0ec9dd2961fc78d8d0bcd48660d7acabfe7a","kind":"tag","published_at":"2018-10-02T17:55:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v4.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v4.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v4.0.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v4.0.0.rc1/manifests"},{"name":"v3.1.2","sha":"1201198f959809d7a82b51b66e878fb1d9b856e3","kind":"commit","published_at":"2017-07-12T18:10:03.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.2/manifests"},{"name":"v3.1.1","sha":"547500730dab994b4e06ce97cc521d54bb53f579","kind":"tag","published_at":"2016-01-28T07:20:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.1/manifests"},{"name":"v3.1.0","sha":"f8fef81cff56dd99138f0bf4d917b499719dde31","kind":"tag","published_at":"2016-01-11T06:22:58.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.1.0/manifests"},{"name":"v3.0.1","sha":"9a8e71f75bd2eeb901bfc381641641a4f9ecbea3","kind":"tag","published_at":"2015-10-23T20:43:11.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.1/manifests"},{"name":"v3.0.0","sha":"2a049307b6e4edbd2f34778b416a933142fc23b1","kind":"tag","published_at":"2015-10-01T16:33:29.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0/manifests"},{"name":"v3.0.0.rc1","sha":"a3fb06c369c2b5e96831cb2c6c8532de8e2f0e62","kind":"tag","published_at":"2015-06-01T07:51:37.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v3.0.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v3.0.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v3.0.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v3.0.0.rc1/manifests"},{"name":"v2.8.0","sha":"bbd0d5ed25a66e65ae0232e853ed937ed6ecf40e","kind":"tag","published_at":"2015-01-30T22:33:19.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0/manifests"},{"name":"v2.8.0.rc2","sha":"c9dc416a4e8c27e6fd2faf73cdb2c652cf359d4d","kind":"tag","published_at":"2015-01-23T16:44:38.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0.rc2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.8.0.rc2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc2/manifests"},{"name":"v2.8.0.rc1","sha":"16f87a8fa048be4f015ee10cf8b9ddb38bdbd275","kind":"tag","published_at":"2014-12-25T06:04:25.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.8.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.8.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.8.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.8.0.rc1/manifests"},{"name":"v2.7.0","sha":"2a4b9f1e163fa9c5b84f223962d5f8e099032420","kind":"tag","published_at":"2014-09-03T06:44:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.7.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.7.0/manifests"},{"name":"v2.6.2","sha":"888665745f4cb13a0e5f10bd61e4c6488bdd2c64","kind":"tag","published_at":"2014-07-19T00:09:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.2/manifests"},{"name":"v2.6.1","sha":"1511ed916156c6072cfba05b37f9f2c1bec2f0b6","kind":"tag","published_at":"2014-04-30T21:53:47.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1/manifests"},{"name":"v2.6.1.rc2","sha":"cdcea5adb4c616fa67c02e21ad42df86e91cd857","kind":"tag","published_at":"2014-04-28T14:34:20.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1.rc2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1.rc2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.1.rc2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc2/manifests"},{"name":"v2.6.1.rc1","sha":"d7a35482494866dc58bc9e94ffe0df0c5bff5323","kind":"tag","published_at":"2014-04-22T16:27:41.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.1.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.1.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.1.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.1.rc1/manifests"},{"name":"v2.6.0","sha":"8fa9d8c789e41794ce60d16a54599e6021308b15","kind":"tag","published_at":"2014-04-12T21:42:54.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.6.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.6.0/manifests"},{"name":"v2.5.0","sha":"b9998891f0825d9424bb7008e4fef1171148f528","kind":"tag","published_at":"2014-01-10T22:39:47.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.5.0/manifests"},{"name":"v2.4.0","sha":"f217014b1e788a73dcc79f4d35bed52b02fc4b58","kind":"tag","published_at":"2013-09-20T20:12:18.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0/manifests"},{"name":"v2.4.0.rc1","sha":"1021fcac89d4cb6721a694001bee9d90741973ba","kind":"tag","published_at":"2013-08-16T22:53:24.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.4.0.rc1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.4.0.rc1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.4.0.rc1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0.rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.4.0.rc1/manifests"},{"name":"v2.3.0","sha":"331e761fc78c9edc9b09adcf1d26e388c04656bd","kind":"tag","published_at":"2013-08-16T17:05:12.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.3.0/manifests"},{"name":"v2.2.0","sha":"41a18a94287df760cc39fd3159f3e980d6084dcc","kind":"tag","published_at":"2013-06-11T14:35:26.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.2.0/manifests"},{"name":"v2.1.0","sha":"4594740650eb53d2db07d1191f5e8dee112eff11","kind":"tag","published_at":"2013-05-05T16:06:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.1.0/manifests"},{"name":"v2.0.0","sha":"8d93d9d4984792b90cfab78bf03e50a7796ad759","kind":"tag","published_at":"2013-04-05T15:48:26.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v2.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v2.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v2.0.0/manifests"},{"name":"v1.5.6","sha":"f80480943e32e8e23feca33086102dd64bcfb58e","kind":"tag","published_at":"2013-03-29T20:46:32.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.6","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.6","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.6","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.6/manifests"},{"name":"v1.5.5","sha":"f96c8c7606d2bdea8c6713a7058c514f24344874","kind":"tag","published_at":"2013-03-28T21:09:21.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.5","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.5/manifests"},{"name":"v1.5.4","sha":"4b91ea3c16cd7c45a14a0d9d5c96a7875768555c","kind":"tag","published_at":"2013-03-21T19:50:19.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.4","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.4/manifests"},{"name":"v1.5.3","sha":"fb025c0b6306a833ff7fb033b4ae5433c2604e1e","kind":"tag","published_at":"2013-03-21T19:34:07.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.3","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.3/manifests"},{"name":"v1.5.2","sha":"22ecb04bf93773f5ea807399d859a7100610b0c2","kind":"tag","published_at":"2013-03-19T23:36:05.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.2/manifests"},{"name":"v1.5.1","sha":"706804ceb4d8384f18f9429a96a9cb1e4a0cb8a9","kind":"tag","published_at":"2013-03-19T13:51:48.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.1/manifests"},{"name":"v1.5.0","sha":"a756c46c846b13c63ba1e51eab39b2d114476b0f","kind":"tag","published_at":"2013-03-15T21:18:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.5.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.5.0/manifests"},{"name":"v1.4.2","sha":"656714cf736168090b2c01b109b5799ac1401966","kind":"tag","published_at":"2012-11-30T15:34:02.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.2","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.4.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.2/manifests"},{"name":"v1.4.1","sha":"fdf33501b03133852b77de6f42b12bc1afd260a0","kind":"tag","published_at":"2012-10-15T15:50:39.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.1/manifests"},{"name":"v1.4.0","sha":"e5914f75c1849a471998d2d284a2a8a788bf5c74","kind":"tag","published_at":"2012-10-05T17:30:40.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.4.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.4.0/manifests"},{"name":"v1.3.0","sha":"481631ce366280998f2d2690fca57788a2a73593","kind":"tag","published_at":"2012-08-30T18:19:34.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.3.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"0f41cd521c74d1ab4ef06958444b7563ec747652","kind":"tag","published_at":"2012-06-14T19:43:06.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.2.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.2.0/manifests"},{"name":"v1.1.0","sha":"38f1b0c793ad55d5cb969dcace568f11355128ee","kind":"tag","published_at":"2012-04-13T15:01:42.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.1.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.1.0/manifests"},{"name":"v1.0.0","sha":"7c408eff76802e3dc91590c381ae4e9a397fb2e1","kind":"commit","published_at":"2011-11-02T00:23:56.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v1.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2026-04-30T20:03:00.401Z","dependent_packages_count":0,"downloads":254395967,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":0.10650663639066851,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":0.15408320493066258,"average":0.06514746033033278},"purl":"pkg:gem/shoulda-matchers?repository_url=https://gem.coop","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/shoulda-matchers","docker_dependents_count":389,"docker_downloads_count":594238762,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/shoulda-matchers/dependencies","status":null,"funding_links":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-04-28T13:01:29.759Z","issues_count":92,"pull_requests_count":200,"avg_time_to_close_issue":24295640.587301586,"avg_time_to_close_pull_request":10494146.736263737,"issues_closed_count":63,"pull_requests_closed_count":182,"pull_request_authors_count":68,"issue_authors_count":83,"avg_comments_per_issue":3.2282608695652173,"avg_comments_per_pull_request":1.68,"merged_pull_requests_count":153,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":9,"past_year_pull_requests_count":22,"past_year_avg_time_to_close_issue":2977629.75,"past_year_avg_time_to_close_pull_request":893148.4210526316,"past_year_issues_closed_count":8,"past_year_pull_requests_closed_count":19,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":9,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.45454545454545453,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":18,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":49,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"},{"login":"VSPPedro","count":32,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/VSPPedro"},{"login":"neilvcarvalho","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/neilvcarvalho"},{"login":"mcmire","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mcmire"},{"login":"vsppedro","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vsppedro"}],"active_maintainers":[{"login":"matsales28","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/shoulda-matchers/codemeta","maintainers":[{"uuid":"584","login":"mcmire","name":null,"email":null,"url":null,"packages_count":30,"html_url":"https://gem.coop/profiles/mcmire","role":null,"created_at":"2025-10-08T06:27:34.274Z","updated_at":"2025-10-08T06:27:34.274Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/mcmire/packages"},{"uuid":"544","login":"thoughtbot","name":null,"email":null,"url":null,"packages_count":65,"html_url":"https://gem.coop/profiles/thoughtbot","role":null,"created_at":"2025-10-08T06:27:34.346Z","updated_at":"2025-10-08T06:27:34.346Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/thoughtbot/packages"},{"uuid":"151665","login":"vsppedro","name":null,"email":null,"url":null,"packages_count":2,"html_url":"https://gem.coop/profiles/vsppedro","role":null,"created_at":"2025-10-08T06:27:34.237Z","updated_at":"2025-10-08T06:27:34.237Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/vsppedro/packages"},{"uuid":"77516","login":"guialbuk","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://gem.coop/profiles/guialbuk","role":null,"created_at":"2025-10-08T06:27:34.312Z","updated_at":"2025-10-08T06:27:34.312Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/guialbuk/packages"},{"uuid":"184827","login":"matsales28","name":null,"email":null,"url":null,"packages_count":1,"html_url":"https://gem.coop/profiles/matsales28","role":null,"created_at":"2025-10-08T06:27:34.381Z","updated_at":"2025-10-08T06:27:34.381Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/matsales28/packages"}],"registry":{"name":"gem.coop","url":"https://gem.coop","ecosystem":"rubygems","default":false,"packages_count":190419,"maintainers_count":67490,"namespaces_count":0,"keywords_count":0,"github":"gem-coop","metadata":{"funded_packages_count":6507},"icon_url":"https://github.com/gem-coop.png","created_at":"2025-10-06T17:24:20.932Z","updated_at":"2026-04-03T06:45:05.763Z","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"}},{"id":13669547,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["ruby"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-12T12:43:55.500Z","latest_release_published_at":"2026-02-12T12:43:55.500Z","latest_release_number":"4.3.0-2","last_synced_at":"2026-03-14T18:11:18.677Z","created_at":"2026-02-12T12:43:55.307Z","updated_at":"2026-03-14T18:11:18.677Z","registry_url":"https://tracker.debian.org/pkg/ruby-shoulda-matchers","install_command":"apt-get install ruby-shoulda-matchers","documentation_url":"https://packages.debian.org/trixie/ruby-shoulda-matchers","metadata":{"component":"main","architecture":"all","priority":"source","binary":"ruby-shoulda-matchers","standards_version":"4.5.0","maintainer":"Debian Ruby Team \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper-compat (= 12), gem2deb, rake, ruby-activesupport (\u003e= 2:3.0.0), ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{"id":1235813,"uuid":"1172597","full_name":"thoughtbot/shoulda-matchers","owner":"thoughtbot","description":"Simple one-liner tests for common Rails functionality","archived":false,"fork":false,"pushed_at":"2026-02-01T12:42:26.000Z","size":15980,"stargazers_count":3571,"open_issues_count":43,"forks_count":910,"subscribers_count":76,"default_branch":"main","last_synced_at":"2026-02-06T11:36:46.600Z","etag":null,"topics":["rails","rspec","ruby","testing"],"latest_commit_sha":null,"homepage":"https://matchers.shoulda.io","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AF83/c3po","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thoughtbot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","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":null,"dco":null,"cla":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2026-02-06T06:44:46.000Z","dependencies_parsed_at":"2024-01-12T18:54:40.164Z","dependency_job_id":"c8108bc8-b073-4d50-ad64-1dcb9a944ead","html_url":"https://github.com/thoughtbot/shoulda-matchers","commit_stats":{"total_commits":2008,"total_committers":340,"mean_commits":5.905882352941177,"dds":0.7051792828685259,"last_synced_commit":"6f4de5ad6d0d09486c2c713fb1a0bf38169d399e"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/thoughtbot/shoulda-matchers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thoughtbot","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/sbom","scorecard":{"id":883103,"data":{"date":"2025-08-11","repo":{"name":"github.com/thoughtbot/shoulda-matchers","commit":"51a0fdf6eca812de61db28b2c07d7c747c9151ba"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 19/25 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-readme.yml:12","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dynamic-security.yml:14","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-readme.yml:1","Warn: no topLevel permission defined: .github/workflows/dynamic-security.yml:1","Warn: no topLevel permission defined: .github/workflows/rubocop.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-readme.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-readme.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/dynamic-security.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/dynamic-security.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rubocop.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubocop.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/thoughtbot/shoulda-matchers/rubocop.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"14 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-22f2-v57c-j9cx","Warn: Project is vulnerable to: GHSA-54rr-7fvw-6x8f","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-xj5v-6v4g-jfw6","Warn: Project is vulnerable to: GHSA-2rxp-v6pw-ch6m","Warn: Project is vulnerable to: GHSA-4xqq-m2hx-25v8","Warn: Project is vulnerable to: GHSA-5866-49gr-22v4","Warn: Project is vulnerable to: GHSA-r55c-59qm-vjw6","Warn: Project is vulnerable to: GHSA-vg3r-rm7w-2xgh","Warn: Project is vulnerable to: GHSA-vmwr-mc7x-5vc3","Warn: Project is vulnerable to: GHSA-8mq4-9jjh-9xrc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T08:58:31.776Z","repository_id":1235813,"created_at":"2025-08-24T08:58:31.776Z","updated_at":"2025-08-24T08:58:31.776Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29221690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T03:18:47.732Z","status":"ssl_error","status_checked_at":"2026-02-08T03:15:31.985Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"repo_metadata_updated_at":"2026-02-12T12:43:57.190Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-shoulda-matchers?arch=source\u0026distro=debian-13\u0026repository_url=https://packages.debian.org/trixie","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-shoulda-matchers/dependencies","status":null,"funding_links":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-shoulda-matchers/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"debian-13","url":"https://packages.debian.org/trixie","ecosystem":"debian","default":false,"packages_count":38024,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"debian","metadata":{"codename":"trixie"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.448Z","updated_at":"2026-04-27T18:20:39.853Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/namespaces"}}],"commits":{"id":3396,"full_name":"thoughtbot/shoulda-matchers","default_branch":"main","total_commits":2039,"total_committers":339,"total_bot_commits":18,"total_bot_committers":3,"mean_commits":6.014749262536873,"dds":0.7096615988229524,"past_year_total_commits":24,"past_year_total_committers":10,"past_year_total_bot_commits":2,"past_year_total_bot_committers":1,"past_year_mean_commits":2.4,"past_year_dds":0.5,"last_synced_at":"2026-04-30T20:17:03.675Z","last_synced_commit":"6063887079b519003ee0f87522765f18be691598","created_at":"2023-03-07T09:17:33.024Z","updated_at":"2026-04-30T20:13:32.370Z","committers":[{"name":"Elliot Winkler","email":"elliot.winkler@gmail.com","login":"mcmire","count":592},{"name":"Joe Ferris","email":"joe.r.ferris@gmail.com","login":"jferris","count":152},{"name":"tsaleh","email":"tsaleh@7bbfaf0e-4d1d-0410-9690-a8bb5f8ef2aa","login":null,"count":119},{"name":"Gabe Berke-Williams","email":"gabe@thoughtbot.com","login":null,"count":117},{"name":"Pedro Paiva","email":"pedro.v.s.paiva@gmail.com","login":"vsppedro","count":77},{"name":"Ryan McGeary","email":"ryanongit@mcgeary.org","login":"rmm5t","count":77},{"name":"Dan Croak","email":"dcroak@thoughtbot.com","login":"croaky","count":50},{"name":"Matheus Sales","email":"matheus_usales@hotmail.com","login":"matsales28","count":48},{"name":"Tammer Saleh","email":"tsaleh@thoughtbot.com","login":null,"count":36},{"name":"Melissa Xie","email":"melissa@thoughtbot.com","login":"mxie","count":35},{"name":"Prem Sichanugrist","email":"s@sikachu.com","login":"sikachu","count":32},{"name":"Mauro George","email":"maurogot@gmail.com","login":"maurogeorge","count":31},{"name":"Jason Draper","email":"jason@drapergeek.com","login":"drapergeek","count":27},{"name":"Matt Jankowski","email":"mjankowski@thoughtbot.com","login":"mjankowski","count":22},{"name":"Mike Burns","email":"mburns@thoughtbot.com","login":"mike-burns","count":20},{"name":"Gui Albuk","email":"guilherme@n-pix.com","login":null,"count":20},{"name":"Kapil Sachdev","email":"kapilsachdev03@gmail.com","login":"KapilSachdev","count":18},{"name":"Joshua Clayton","email":"jclayton@thoughtbot.com","login":"joshuaclayton","count":16},{"name":"Gui Vieira","email":"guialbuk@gmail.com","login":"guialbuk","count":13},{"name":"Reade Harris","email":"readeharris@gmail.com","login":"readeharris","count":11},{"name":"Josh Nichols","email":"josh@technicalpickles.com","login":"technicalpickles","count":10},{"name":"Derek Prior","email":"derekprior@gmail.com","login":"derekprior","count":9},{"name":"Erik Michaels-Ober","email":"sferik@gmail.com","login":"sferik","count":9},{"name":"github-actions[bot]","email":"41898282+github-actions[bot]","login":"github-actions[bot]","count":9},{"name":"Matthew Daubert","email":"mdaubert@gmail.com","login":"MDaubs","count":9},{"name":"dependabot-preview[bot]","email":"27856297+dependabot-preview[bot]","login":"dependabot-preview[bot]","count":8},{"name":"Markus Schwed","email":"ma.schwed@googlemail.com","login":"SweeD","count":8},{"name":"Chris O'Sullivan","email":"thechrisoshow@gmail.com","login":"thechrisoshow","count":6},{"name":"Mathieu Martin","email":"webmat@gmail.com","login":"webmat","count":6},{"name":"Mike Boone","email":"mike@boonedocks.net","login":"boone","count":5},{"name":"Yukio Mizuta","email":"untidyhair@gmail.com","login":"untidy-hair","count":5},{"name":"Jacob Morris","email":"jacob@creativesoapbox.com","login":null,"count":5},{"name":"George Millo","email":"georgejulianmillo@gmail.com","login":"george-carlin","count":5},{"name":"Marcello Barnaba","email":"vjt@openssl.it","login":"vjt","count":5},{"name":"Sean Doyle","email":"sean.p.doyle24@gmail.com","login":"seanpdoyle","count":5},{"name":"Amalrik Maia","email":"amalrik.maia@gmail.com","login":"amalrik","count":4},{"name":"Bob Showalter","email":"showaltb@gmail.com","login":"showaltb","count":4},{"name":"Daniel Duvall","email":"dan@mutual.io","login":"marxarelli","count":4},{"name":"Håkon Lerring","email":"hakon@powow.no","login":"Hakon","count":4},{"name":"Lawrence Pit","email":"lawrence.pit@gmail.com","login":"lawrencepit","count":4},{"name":"Stafford Brunk","email":"wingrunr21@gmail.com","login":"wingrunr21","count":4},{"name":"Vít Ondruch","email":"vondruch@redhat.com","login":"voxik","count":4},{"name":"Neilson Carvalho","email":"neilvilela@gmail.com","login":"neilvcarvalho","count":4},{"name":"matflores","email":"mflores@atlanware.com","login":null,"count":4},{"name":"Luciano Sousa","email":"ls@lucianosousa.net","login":null,"count":4},{"name":"Damian Galarza and Harry Schwartz","email":"support+Damian+Harry@thoughtbot.com","login":null,"count":4},{"name":"Damian Galarza","email":"damian@thoughtbot.com","login":null,"count":4},{"name":"Ari Pollak","email":"ari@thelevelup.com","login":null,"count":3},{"name":"Chad Pytel","email":"cpytel@thoughtbot.com","login":null,"count":3},{"name":"Dean Strelau","email":"dean@mintdigital.com","login":null,"count":3},{"name":"Alex Grant","email":"alexgrant@apprentice.io","login":"digitalcora","count":3},{"name":"Utkarsh Gupta","email":"utkarsh@debian.org","login":"utkarsh2102","count":3},{"name":"Tristan Dunn","email":"tristanzdunn@gmail.com","login":"tristandunn","count":3},{"name":"Edward Poot","email":"e.poot@evolutionhost.nl","login":"edwardmp","count":3},{"name":"Joey Cheng","email":"jooeycheng@gmail.com","login":"jooeycheng","count":3},{"name":"Jacob Morris","email":"jacob.s.morris@gmail.com","login":"jacobsimeon","count":3},{"name":"Gustavo Cunha","email":"github@gustavocunha.dev","login":"gmmcal","count":3},{"name":"Frank Luithle","email":"frank@luithle.net","login":"sigi","count":3},{"name":"Chris Bandy","email":"bandy.chris@gmail.com","login":"cbandy","count":3},{"name":"Bill Ruddock","email":"bill.ruddock@gmail.com","login":"biinari","count":3},{"name":"Maxim Kaschenko","email":"mkaschenko@me.com","login":"mkaschenko","count":3},{"name":"Mike Bloy","email":"mike@bloy.org","login":"bloy","count":3},{"name":"Tom Milewski","email":"tmilewski@gmail.com","login":"tmilewski","count":3},{"name":"Peter Marsh","email":"pete.d.marsh@gmail.com","login":"petedmarsh","count":3},{"name":"Sergey Kuchmistov","email":"sergey.kuchmistov@gmail.com","login":"caulfield","count":3},{"name":"Stefanni Brasil","email":"stefannibrasil@proton.me","login":"stefannibrasil","count":3},{"name":"Anthony Navarre + Elliot Winkler","email":"anthony+elliot@thoughtbot.com","login":null,"count":2},{"name":"Craig Buchek","email":"cbuchek@weedmaps.com","login":"booch","count":2},{"name":"Billy","email":"navyosu@gmail.com","login":"billygriffin","count":2},{"name":"Atul Bhosale","email":"atul1bhosale@gmail.com","login":"Atul9","count":2},{"name":"Alyssa Ross","email":"hi@alyssa.is","login":"alyssais","count":2},{"name":"Albert Wang","email":"albert@cellabus.com","login":"albertyw","count":2},{"name":"Shaliko","email":"shaliko@ezid.ru","login":"shaliko","count":2},{"name":"John Mileham","email":"jmileham@gmail.com","login":"jmileham","count":2},{"name":"Ivan Valdes (@ivanvc)","email":"iv@nvald.es","login":"ivanvc","count":2},{"name":"Igor Zubkov","email":"igor.zubkov@gmail.com","login":"biow0lf","count":2},{"name":"Ian Lesperance","email":"ian@elliterate.com","login":"elliterate","count":2},{"name":"Heitor de Melo Cardozo","email":"heitor711n@gmail.com","login":"HeitorMC","count":2},{"name":"Brendan Thomas","email":"bt331609@gmail.com","login":"brendanthomas1","count":2},{"name":"Teo Ljungberg","email":"teo@teoljungberg.com","login":"teoljungberg","count":2},{"name":"Timothy Yen","email":"yen.timothy@gmail.com","login":"kollektiv","count":2},{"name":"Tom Lea","email":"commit@tomlea.co.uk","login":"tomlea","count":2},{"name":"Vasiliy Ermolovich","email":"younash@gmail.com","login":"nashby","count":2},{"name":"Wojciech Wnętrzak","email":"w.wnetrzak@gmail.com","login":"morgoth","count":2},{"name":"jarenas9539","email":"100745775+jarenas9539","login":"jarenas9539","count":2},{"name":"patrick brisbin","email":"pbrisbin@gmail.com","login":"pbrisbin","count":2},{"name":"steve","email":"steve@lesseverything.com","login":"stevenbristol","count":2},{"name":"thealiilman","email":"aliilman532@gmail.com","login":"thealiilman","count":2},{"name":"Maarten Claes","email":"maartencls@gmail.com","login":"mcls","count":2},{"name":"Nick Quaranto","email":"nick@quaran.to","login":"qrush","count":2},{"name":"Osamu TAKEUCHI","email":"takeuchi@bk.tsukuba.ac.jp","login":"osamutake","count":2},{"name":"Ryan Davis","email":"ryand-ruby@zenspider.com","login":"zenspider","count":2},{"name":"Samuel Cochran","email":"sj26@sj26.com","login":"sj26","count":2},{"name":"Scott Albertson","email":"ascottalbertson@gmail.com","login":"salbertson","count":2},{"name":"Geoff Harcourt","email":"geoff.harcourt@gmail.com","login":"geoffharcourt","count":2},{"name":"Aditya Kapoor","email":"aditya.kapoor@vinsol.com","login":null,"count":2},{"name":"Adarsh Pandit","email":"adarsh@thoughtbot.com","login":null,"count":2},{"name":"Adam89","email":"adam@apprentice.io","login":null,"count":2},{"name":"Adam89","email":"adam.dev89@gmail.com","login":null,"count":2},{"name":"Jason Morrison","email":"jmorrison@thoughtbot.com","login":null,"count":2},{"name":"Igor Zubkov","email":"zubkov@mlsdev.com","login":null,"count":2},{"name":"Fujimura Daisuke","email":"dfujimura@aiming-inc.com","login":null,"count":2},{"name":"Dan Croak","email":"dan@thoughtbot.com","login":null,"count":2},{"name":"Stefanni Brasil","email":"stefannibrasil@gmail.com","login":null,"count":2},{"name":"jmpage","email":"jenpage@ebay.com","login":null,"count":2},{"name":"barelyknown","email":"sean@buytruckload.com","login":null,"count":2},{"name":"Douglas Marques","email":"46424071+dougmrqs","login":"dougmrqs","count":2},{"name":"Steve Madsen","email":"steve@lightyearsoftware.com","login":"sjmadsen","count":2},{"name":"Francisco","email":"78037877+franlocus","login":"franlocus","count":2},{"name":"Stef Schenkelaars","email":"stef.schenkelaars@gmail.com","login":"StefSchenkelaars","count":2},{"name":"Aaron Vasquez","email":"aaronvasquez1@gmail.com","login":"AaronVasquez","count":1},{"name":"Aaron Gibralter","email":"aaron.gibralter@gmail.com","login":"agibralter","count":1},{"name":"Ana María Martínez Gómez","email":"ammartinez@suse.de","login":"Ana06","count":1},{"name":"Andrew Bromwich","email":"a.bromwich@gmail.com","login":"abrom","count":1},{"name":"Andrey Deryabin","email":"deriabin@gmail.com","login":"aderyabin","count":1},{"name":"André Moreira","email":"andre.lumor1@gmail.com","login":"andreLumor","count":1},{"name":"Anthony Williams","email":"hi@antw.me","login":"antw","count":1},{"name":"Antonio Terceiro","email":"terceiro@softwarelivre.org","login":"terceiro","count":1},{"name":"Artiom Diomin","email":"kron82@gmail.com","login":"kron4eg","count":1},{"name":"Ashley Lake","email":"39317653+lake-effect","login":"lake-effect","count":1},{"name":"Abd ar-Rahman","email":"bakhtiyor.h@gmail.com","login":"hbakhtiyor","count":1},{"name":"Abi","email":"llawlietbagsum@gmail.com","login":"LarytheLord","count":1},{"name":"Aditya Prakash","email":"aditya.prakash132@gmail.com","login":"sonalkr132","count":1},{"name":"Alan Heywood","email":"alan@softweb.net.au","login":"ahey","count":1},{"name":"Alejandro Gutiérrez","email":"alejandrodevs@gmail.com","login":"alejandrodevs","count":1},{"name":"Aleksei Gusev","email":"aleksei.gusev@gmail.com","login":"hron","count":1},{"name":"Alex Levy","email":"alex.levy@alumni.tufts.edu","login":"mesozoic","count":1},{"name":"Alexey Blinov","email":"nilcolor@gmail.com","login":"nilcolor","count":1},{"name":"Alexey Plutalov","email":"demiazz.py@gmail.com","login":"demiazz","count":1},{"name":"Ali Ismayilov","email":"ali@ismailov.info","login":"aliismayilov","count":1},{"name":"Jericho","email":"githubfreebugs@attrition.org","login":null,"count":1},{"name":"Jason Draper and George Brocklehurst","email":"support+draper+george@thoughtbot.com","login":null,"count":1},{"name":"Igor Kapkov","email":"igasgeek@me.com","login":null,"count":1},{"name":"Gustavo Cunha","email":"gustavocunha@gmail.com","login":null,"count":1},{"name":"Gavin Stark","email":"g.stark@realdigitalmedia.com","login":null,"count":1},{"name":"Florence Foo","email":"ffoo@tickitsystems.com.au","login":null,"count":1},{"name":"Fatih Arslan","email":"fatih@github.com","login":null,"count":1},{"name":"Dmitry Tonkonogov","email":"omun.spambox@gmail.com","login":null,"count":1},{"name":"Dmitri Koulikoff","email":"dima@koulikoff.ru","login":null,"count":1},{"name":"Derek Prior + Elliot Winkler","email":"dev+dp+ew@thoughtbot.com","login":null,"count":1},{"name":"Dan Frenette","email":"Paradox815@gmail.com","login":null,"count":1},{"name":"Damian Galarza and Mason Fischer","email":"support+Damian+Mason@thoughtbot.com","login":null,"count":1},{"name":"Blake Thomson","email":"bthomson@whitepages.com","login":null,"count":1},{"name":"Brendan Loudermilk","email":"brendan@gophilosophie.com","login":null,"count":1},{"name":"Brian Shaver","email":"brian@4-dogs.biz","login":null,"count":1},{"name":"Bruce Williams","email":"bruce@codefluency.com","login":null,"count":1},{"name":"Ben Atkins","email":"benatkins@fullbridge.com","login":null,"count":1},{"name":"Anton Tsapov","email":"anton.tsapov@anahoret.com","login":null,"count":1},{"name":"Anthony Navarre","email":"anthony@thoughtbot.com","login":null,"count":1},{"name":"Andy Chambers","email":"anchambers@paypal.com","login":null,"count":1},{"name":"Alex Popov","email":"alex.val.popov@gmail.com","login":null,"count":1},{"name":"Adrià Planas","email":"adriaplanas@liquidcodeworks.com","login":null,"count":1},{"name":"Adam Hanna","email":"adamhanandev@gmail.com","login":null,"count":1},{"name":"takiy33","email":"takiy33@gmail.com","login":null,"count":1},{"name":"knapo","email":"krzysztof.knapik@llp.pl","login":null,"count":1},{"name":"Owen Davies","email":"git@obduk.com","login":null,"count":1},{"name":"Victor Pereira","email":"victor.pereira@adyton.net","login":null,"count":1},{"name":"Todd Bealmear","email":"todd@gopago.com","login":null,"count":1},{"name":"Tiago Cardoso","email":"tiago@restorm.com","login":null,"count":1},{"name":"Sylvestre Mergulhao","email":"contato@mergulhao.info","login":null,"count":1},{"name":"Raúl Acuña","email":"reacuna@crac.cl","login":null,"count":1},{"name":"Peter Marsh","email":"pete@modeltwozero.com","login":null,"count":1},{"name":"Peter Haza","email":"n23737@nrkmci63924.local","login":null,"count":1},{"name":"Noah Bernsohn","email":"noah@noah-bernsohns-macbook.local","login":null,"count":1},{"name":"Nathan Sutton","email":"nate@sevenwire.com","login":null,"count":1},{"name":"Morton Jonuschat","email":"m.jonuschat@gute-botschafter.de","login":null,"count":1},{"name":"Savater Sebastien","email":"savater.sebastien@gmail.com","login":null,"count":1},{"name":"Mateusz Swiszcz","email":"mateusz.swiszcz@akra.net","login":null,"count":1},{"name":"Lucas D'Avila","email":"lucas@lucasdavi.la","login":null,"count":1},{"name":"Justin Case","email":"justin@playelite.net","login":null,"count":1},{"name":"Nicholas Shirley","email":"nicholas@reallymy.email","login":"nicholasshirley","count":1},{"name":"Nick Charlton","email":"nick@nickcharlton.net","login":"nickcharlton","count":1},{"name":"Nikolaos Michas","email":"nmichas@skroutz.gr","login":"nikosmichas","count":1},{"name":"Nitin Singh","email":"26363461+singhnitin25","login":"singhnitin25","count":1},{"name":"Oleg Sukhodolsky","email":"os97673@gmail.com","login":"os97673","count":1},{"name":"Olivier","email":"olimart","login":"olimart","count":1},{"name":"Olle Jonsson","email":"olle.jonsson@gmail.com","login":"olleolleolle","count":1},{"name":"Omachonu Ogali","email":"oogali@idlepattern.com","login":"oogali","count":1},{"name":"Oscar Del Ben","email":"info@oscardelben.com","login":"oscardelben","count":1},{"name":"Dimitrij Denissenko","email":"dimitrij.denissenko@blacksquaremedia.com","login":"dim","count":1},{"name":"Panupan Sriautharawong","email":"lionpeal@yahoo.com","login":"panupan","count":1},{"name":"Paulo Santos","email":"paulo.santos@deemaze.com","login":"pjpires","count":1},{"name":"Paweł Gościcki","email":"pawel.goscicki@gmail.com","login":"pjg","count":1},{"name":"Pedro Nascimento","email":"pnascimento@gmail.com","login":"lunks","count":1},{"name":"Peter Goldstein","email":"peter.m.goldstein@gmail.com","login":"petergoldstein","count":1},{"name":"Phil Coggins","email":"pcoggins@fleetio.com","login":"PhilCoggins","count":1},{"name":"Phil Cohen","email":"github@phlippers.net","login":"phlipper","count":1},{"name":"PikachuEXE","email":"pikachuexe@gmail.com","login":"PikachuEXE","count":1},{"name":"Piotr Usewicz","email":"piotr@layer22.com","login":"pusewicz","count":1},{"name":"Rafael Santos","email":"formigarafa@gmail.com","login":"formigarafa","count":1},{"name":"Raphaël Emourgeon","email":"raphael.emourgeon@gmail.com","login":"osaris","count":1},{"name":"Luca Guidi","email":"me@lucaguidi.com","login":"jodosha","count":1},{"name":"Lucas Rangel Cezimbra","email":"lucascezimbra@gmail.com","login":"lucasrcezimbra","count":1},{"name":"Luke Ledet","email":"luke@lootbox.org","login":"lukeledet","count":1},{"name":"Mamoru TASAKA","email":"mtasaka@fedoraproject.org","login":"mtasaka","count":1},{"name":"Marcin Nowicki","email":"pr0d1r2@gmail.com","login":"pr0d1r2","count":1},{"name":"Marcio Junior","email":"marciojunior_eu@yahoo.com.br","login":"marcioj","count":1},{"name":"Masato Ohba","email":"over.rye@gmail.com","login":"ohbarye","count":1},{"name":"Matheus Richard","email":"matheusrichardt@gmail.com","login":"MatheusRich","count":1},{"name":"Matt Gibson","email":"downrightlies@gmail.com","login":"mattgibson","count":1},{"name":"Matt Lins","email":"mattlins@gmail.com","login":"mlins","count":1},{"name":"Micah Frost","email":"micah.frost@gmail.com","login":"mfrost","count":1},{"name":"Michael Deering","email":"mdeering@mdeering.com","login":"mdeering","count":1},{"name":"Yuriy Orlov","email":"orlov1991@gmail.com","login":"yaorlov","count":1},{"name":"Michael Glass","email":"me@mike.is","login":"michaelglass","count":1},{"name":"Michael de Silva","email":"michael@mwdesilva.com","login":"bsodmike","count":1},{"name":"Mike Breen","email":"hardbap@gmail.com","login":"hardbap","count":1},{"name":"Mike Nguyen","email":"mikeduynguyen@gmail.com","login":"mikeduynguyen","count":1},{"name":"Minh Nguyen","email":"minhmangaka@gmail.com","login":"HoangMinhBK","count":1},{"name":"Mitsuaki Wada","email":"49638956+mi-wada","login":"mi-wada","count":1},{"name":"Murtaza Gulamali","email":"mygulamali@gmail.com","login":"mygulamali","count":1},{"name":"Nate Matykiewicz","email":"natematykiewicz@gmail.com","login":"natematykiewicz","count":1},{"name":"Tyson Gach","email":"tyson@tysongach.com","login":"tysongach","count":1},{"name":"Victor Andrey","email":"victorvaot@gmail.com","login":"vaot","count":1},{"name":"Victor Z","email":"shaggyone","login":"shaggyone","count":1},{"name":"Zach Dennis","email":"zach.dennis@gmail.com","login":"zdennis","count":1},{"name":"callahat","email":"tim.callahan25@yahoo.com","login":"callahat","count":1},{"name":"compliance-bot","email":"72621873+compliance-bot","login":"compliance-bot","count":1},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":1},{"name":"fervic","email":"roberto@runawaybit.com","login":"fervic","count":1},{"name":"gregstallings","email":"gregstallings@gmail.com","login":"goodtimeaj","count":1},{"name":"grosser","email":"grosser.michael@gmail.com","login":"grosser","count":1},{"name":"hirakiuc","email":"hirakiuc@gmail.com","login":"hirakiuc","count":1},{"name":"hotoolong","email":"39899689+hotoolong","login":"hotoolong","count":1},{"name":"joekur","email":"joedoku@gmail.com","login":"joekur","count":1},{"name":"kutomore","email":"kutomore@gmail.com","login":"Kutomore","count":1},{"name":"maclover7","email":"me@jonathanmoss.me","login":"maclover7","count":1},{"name":"nic-lan","email":"nic-lan","login":"nic-lan","count":1},{"name":"ojab","email":"ojab@ojab.ru","login":"ojab","count":1},{"name":"pacop","email":"1923775+pacop","login":"pacop","count":1},{"name":"ryu-sato","email":"32702772+ryu-sato","login":"ryu-sato","count":1},{"name":"stephann","email":"3025661+stephannv","login":"stephannv","count":1},{"name":"theforestvn88","email":"54012293+theforestvn88","login":"theforestvn88","count":1},{"name":"Roberto Romero","email":"sildurin@gmail.com","login":"sildur","count":1},{"name":"Rodrigo A Chaves","email":"rodriggo.chaves@gmail.com","login":"rodriggochaves","count":1},{"name":"Rodrigo Virgilio","email":"virgilio@virgilio.eti.br","login":"rodrigovirgilio","count":1},{"name":"Ryan Hansen","email":"ryan.hansen@octanner.com","login":"ketiko","count":1},{"name":"Rémy Hannequin","email":"remy.hannequin@gmail.com","login":"rhannequin","count":1},{"name":"Samuel Williams","email":"samuel.williams@oriontransfer.co.nz","login":"ioquatix","count":1},{"name":"Sarah Lima","email":"sarahraqueld@gmail.com","login":"sarahraqueld","count":1},{"name":"y-yagi","email":"yuuji.yaginuma@gmail.com","login":"y-yagi","count":1},{"name":"Sean Devine","email":"barelyknown@icloud.com","login":"barelyknown","count":1},{"name":"Sean Schofield","email":"schof@apache.org","login":"schof","count":1},{"name":"Shubhendra Singh Chauhan","email":"withshubh@gmail.com","login":"withshubh","count":1},{"name":"Simon Dawson","email":"spdawson@gmail.com","login":"spdawson","count":1},{"name":"Steve Klabnik","email":"steve@steveklabnik.com","login":"steveklabnik","count":1},{"name":"Takafumi Yamamoto","email":"bino98@gmail.com","login":"bino98","count":1},{"name":"Takayuki Matsubara","email":"takayuki.1229@gmail.com","login":"ma2gedev","count":1},{"name":"Tamir Duberstein","email":"tamird@squareup.com","login":"tamird","count":1},{"name":"Taylor Yelverton","email":"github@yelvert.io","login":"yelvert","count":1},{"name":"The Gitter Badger","email":"badger@gitter.im","login":"gitter-badger","count":1},{"name":"Theodor Tonum","email":"theodor@tonum.no","login":"theodorton","count":1},{"name":"Tomas Mattia","email":"tomas.mattia@gmail.com","login":"tmattia","count":1},{"name":"Tristan Havelick","email":"tristan@havelick.com","login":"thavelick","count":1},{"name":"Dave Thomas","email":"dave@pragprog.com","login":"pragdave","count":1},{"name":"Derek Bender","email":"nofeardjb@gmail.com","login":"djbender","count":1},{"name":"Berislav Babic","email":"babinho@gmail.com","login":"berislavbabic","count":1},{"name":"Dorian","email":"dorian@kundigo.pro","login":"dlupu","count":1},{"name":"Doug Orleans","email":"dougorleans@gmail.com","login":"dougo","count":1},{"name":"DrMark","email":"drmark@gmail.com","login":"DrMark","count":1},{"name":"Duncan Stuart","email":"dgmstuart@gmail.com","login":"dgmstuart","count":1},{"name":"Earlopain","email":"14981592+Earlopain","login":"Earlopain","count":1},{"name":"Eduardo Alencar","email":"jeduardo824@outlook.com","login":"jeduardo824","count":1},{"name":"Eduardo Souza Costa Araújo","email":"eduardoscaraujo@gmail.com","login":"EduardoSCosta","count":1},{"name":"Emil Sågfors","email":"emil.sagfors@iki.fi","login":"lime","count":1},{"name":"Evan Louden","email":"evanlouden@gmail.com","login":"evanlouden","count":1},{"name":"Evan Sharp","email":"evan@packetmonkey.org","login":"packetmonkey","count":1},{"name":"Fabio Kreusch","email":"fabiokr@gmail.com","login":"fabiokr","count":1},{"name":"Fabio Rehm","email":"fgrehm@gmail.com","login":"fgrehm","count":1},{"name":"Faraz Yashar","email":"faraz.yashar@gmail.com","login":"fny","count":1},{"name":"Fumiaki MATSUSHIMA","email":"mtsmfm@gmail.com","login":"mtsmfm","count":1},{"name":"Gabriel Sobrinho","email":"gabriel.sobrinho@gmail.com","login":"sobrinho","count":1},{"name":"Gaurav Sharma","email":"gaurav.qwe@gmail.com","login":"gauravs","count":1},{"name":"Gaëtan Masson","email":"gaetanm","login":"gaetanm","count":1},{"name":"Geremia Taglialatela","email":"tagliala","login":"tagliala","count":1},{"name":"August Lilleaas","email":"augustlilleaas@gmail.com","login":"augustl","count":1},{"name":"Barry Hess","email":"barry@bjhess.com","login":"bjhess","count":1},{"name":"Ben J Woodcroft","email":"donttrustben@gmail.com","login":"wwood","count":1},{"name":"Christopher Chow","email":"chris@chowie.net","login":"christophersjchow","count":1},{"name":"Chris Salzberg","email":"chrissalzberg@gmail.com","login":"shioyama","count":1},{"name":"Chris Howlett","email":"chowlett09+github@gmail.com","login":"asilano","count":1},{"name":"Chad Pytel","email":"chad@thoughtbot.com","login":"cpytel","count":1},{"name":"Chad Hendry","email":"chendry@chendry.org","login":"chendry","count":1},{"name":"Carsten Zimmermann","email":"carp@hacksocke.de","login":"carpodaster","count":1},{"name":"Bruno Castro","email":"bruno.castro@codeminer42.com","login":"brunohkbx","count":1},{"name":"Brian McManus","email":"bdmac97@gmail.com","login":"bdmac","count":1},{"name":"Blake Thomson","email":"thomsbg@gmail.com","login":"thomsbg","count":1},{"name":"Chulki Lee","email":"chulki.lee@gmail.com","login":"chulkilee","count":1},{"name":"Clemens Helm","email":"clemens.helm@gmail.com","login":"clemenshelm","count":1},{"name":"Clemens Kofler","email":"mail@clemenskofler.com","login":"clemens","count":1},{"name":"Corey Woodcox","email":"corey.woodcox@gmail.com","login":"cwoodcox","count":1},{"name":"Cristi Balan","email":"evil@che.lu","login":"cristibalan","count":1},{"name":"Daniel Lobato García","email":"elobatocs@gmail.com","login":"dLobatog","count":1},{"name":"Daniel Morris","email":"daniel@honestempire.com","login":"unfunco","count":1},{"name":"Daniel Tamiosso","email":"email@danieltamiosso.com","login":"danieltamiosso","count":1},{"name":"Dave Schweisguth","email":"dave@schweisguth.org","login":"dschweisguth","count":1},{"name":"Jeroen Visser","email":"jeroenvisser101","login":"jeroenvisser101","count":1},{"name":"Jesse Toth","email":"jesse@jessetoth.com","login":"jesseplusplus","count":1},{"name":"Joel Moss","email":"joel@developwithstyle.com","login":"joelmoss","count":1},{"name":"John DeWyze","email":"john.dewyze@gmail.com","login":"dewyze","count":1},{"name":"John Feminella","email":"jxf@jxf.me","login":"fj","count":1},{"name":"Jonathan Lim","email":"snowblink@gmail.com","login":"snowblink","count":1},{"name":"Jordi Massaguer Pla","email":"jmassaguerpla@suse.de","login":"jordimassaguerpla","count":1},{"name":"Josh Kalderimis","email":"josh.kalderimis@gmail.com","login":"joshk","count":1},{"name":"Julius Putra Tanu Setiaji","email":"indocomsoft@gmail.com","login":"indocomsoft","count":1},{"name":"Justus Tumacder","email":"JustusFT@gmail.com","login":"JustusFT","count":1},{"name":"Juzer Shakir","email":"juzershakir.webdev@gmail.com","login":"JuzerShakir","count":1},{"name":"Karle Durante","email":"kdurante@customink.com","login":"karledurante","count":1},{"name":"Keith Morrison","email":"keithm@infused.org","login":"infused","count":1},{"name":"Ken Collins","email":"ken@metaskills.net","login":"metaskills","count":1},{"name":"Ken Liu","email":"ken.liu@gmail.com","login":"kenliu","count":1},{"name":"Knut I. Stenmark","email":"knut.stenmark@gmail.com","login":"stonefield","count":1},{"name":"Konstantin Rudy","email":"konstantin.rudy@gmail.com","login":"k-rudy","count":1},{"name":"Kristopher Michalski","email":"kristopher.michalski+git@gmail.com","login":"krismichalski","count":1},{"name":"Larry Marburger","email":"larry@marburger.cc","login":"lmarburger","count":1},{"name":"Leo Arnold","email":"leoarnold","login":"leoarnold","count":1},{"name":"Leo Nikkilä","email":"hello@lnikki.la","login":"lnikkila","count":1},{"name":"Giovanni Cappellotto","email":"potomak84@gmail.com","login":"potomak","count":1},{"name":"Grayson Wright","email":"wright.grayson@gmail.com","login":"c-lliope","count":1},{"name":"Greg Fairbrother","email":"greg@intrepica.com.au","login":"gfairbrother","count":1},{"name":"Grey Baker","email":"greysteil@gmail.com","login":"greysteil","count":1},{"name":"Grzesiek Kolodziejczyk","email":"gkolodziejczyk@gmail.com","login":"grk","count":1},{"name":"Guilherme Franco","email":"g.francosilva@gmail.com","login":"guilhermeFranco","count":1},{"name":"Henning Koch","email":"henning.koch@makandra.de","login":"triskweline","count":1},{"name":"Herwin Weststrate","email":"herwin@quarantainenet.nl","login":"qnet-herwin","count":1},{"name":"Iain Beeston","email":"iain.beeston@gmail.com","login":"iainbeeston","count":1},{"name":"Ian Zabel","email":"ian@ezabel.com","login":"iwz","count":1},{"name":"Ignat Zakrevsky","email":"iezakrevsky@gmail.com","login":"ignat-z","count":1},{"name":"Ihor Dotsenko","email":"igordocenko1997@gmail.com","login":"GarrisonD","count":1},{"name":"Iliana Hadzhiatanasova","email":"me@iliana.dev","login":"ilianah","count":1},{"name":"Ionut Dorobantu","email":"ionut@zappistore.com","login":"dorobica","count":1},{"name":"Isaac Betesh","email":"iybetesh@gmail.com","login":"betesh","count":1},{"name":"J. Pablo Fernández","email":"pupeno@watuhq.com","login":"pupeno","count":1},{"name":"Jack Wilson","email":"jack.wilson.v@gmail.com","login":"id4ho","count":1},{"name":"James Adam","email":"james@lazyatom.com","login":"lazyatom","count":1},{"name":"Jason Morrison","email":"jason.p.morrison@gmail.com","login":"jasonm","count":1},{"name":"JasonM23","email":"jasonm23","login":"jasonm23","count":1},{"name":"Jeff Dutil","email":"jdutil21@gmail.com","login":"JDutil","count":1},{"name":"vfrride","email":"jeff@jpcutler.net","login":"vfrride","count":1}],"past_year_committers":[{"name":"Matheus Sales","email":"matheus_usales@hotmail.com","login":"matsales28","count":12},{"name":"Stefanni Brasil","email":"stefannibrasil@proton.me","login":"stefannibrasil","count":3},{"name":"github-actions[bot]","email":"41898282+github-actions[bot]","login":"github-actions[bot]","count":2},{"name":"Taylor Yelverton","email":"github@yelvert.io","login":"yelvert","count":1},{"name":"Simon Dawson","email":"spdawson@gmail.com","login":"spdawson","count":1},{"name":"Minh Nguyen","email":"minhmangaka@gmail.com","login":"HoangMinhBK","count":1},{"name":"Matheus Richard","email":"matheusrichardt@gmail.com","login":"MatheusRich","count":1},{"name":"Brendan Thomas","email":"brendan.thomas@arkestro.com","login":"brendanthomas1","count":1},{"name":"Amalrik Maia","email":"amalrik.maia@gmail.com","login":"amalrik","count":1},{"name":"Abi","email":"llawlietbagsum@gmail.com","login":"LarytheLord","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-30T00:00:07.427Z","repositories_count":6223842,"commits_count":900041531,"contributors_count":34902200,"owners_count":1147640,"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":"thoughtbot/shoulda-matchers","html_url":"https://github.com/thoughtbot/shoulda-matchers","last_synced_at":"2026-04-28T13:01:29.759Z","status":"active","issues_count":92,"pull_requests_count":200,"avg_time_to_close_issue":24295640.587301586,"avg_time_to_close_pull_request":10494146.736263737,"issues_closed_count":63,"pull_requests_closed_count":182,"pull_request_authors_count":68,"issue_authors_count":83,"avg_comments_per_issue":3.2282608695652173,"avg_comments_per_pull_request":1.68,"merged_pull_requests_count":153,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":9,"past_year_pull_requests_count":22,"past_year_avg_time_to_close_issue":2977629.75,"past_year_avg_time_to_close_pull_request":893148.4210526316,"past_year_issues_closed_count":8,"past_year_pull_requests_closed_count":19,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":9,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.45454545454545453,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":18,"created_at":"2023-05-12T17:14:01.644Z","updated_at":"2026-04-28T13:01:29.759Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","issue_labels_count":{"🕷 Issue: Bug":8,"🙏 Issue: PR Welcome":4,"💡Issue: Feature Request":4,"🏃‍♀️PR: In Progress":2,"Dependent on PR":1,"🤖 Shoulda":1,"PR: Feature":1,"🤔 Issue: Need to Investigate":1},"pull_request_labels_count":{"🏃‍♀️PR: In Progress":3,"🙏 PR: Needs Tests":3,"↩️ Needs Revisiting":2,"🙏 PR: Needs Further Updates":1,"⏱ PR: In Queue for Review":1,"PR: Feature":1,"🙏  PR: Needs Documentation":1},"issue_author_associations_count":{"NONE":72,"CONTRIBUTOR":11,"COLLABORATOR":8,"MEMBER":1},"pull_request_author_associations_count":{"CONTRIBUTOR":81,"COLLABORATOR":64,"NONE":40,"MEMBER":15},"issue_authors":{"VSPPedro":6,"matsales28":2,"sarobakhtiyari":2,"mochetts":2,"fabriciobonjorno":2,"calebhearth":1,"sirwolfgang":1,"aripollak":1,"gruschis":1,"rubendinho":1,"lioneldebauge":1,"ArcDlrt":1,"Mekajiki":1,"garrettgregor":1,"ollie-nye":1,"stefannibrasil":1,"rhannequin":1,"drn":1,"jbigler":1,"LukasBarry":1,"cesarjr":1,"mikeki":1,"rasmar":1,"chiperific":1,"rlgreen91":1,"Kutomore":1,"ClintonEnyinna":1,"guppy0356":1,"Exterm1nate":1,"tapalilov":1,"benebrice":1,"PikachuEXE":1,"alfredo-pl":1,"jasonsof":1,"lake-effect":1,"mtasaka":1,"stephannv":1,"dlinch":1,"TastyPi":1,"s2t2":1,"prashantham":1,"Szeliga":1,"taralbass":1,"Skulli":1,"deniciocode":1,"ostigley":1,"technicalpickles":1,"dev-mori":1,"clemens":1,"LyleDavis":1,"abitdodgy":1,"jetienne":1,"amalrik":1,"cseydel":1,"ndouglasma":1,"stevepolitodesign":1,"yanghoxom":1,"piyush4793":1,"jasonkarns":1,"TamerShlash":1,"stevenou":1,"pjpires":1,"merof-code":1,"dbforge":1,"aliaksandrb":1,"abhinavramesh8":1,"dgmstuart":1,"jarenas9539":1,"burkematthew":1,"runephilosof-abtion":1,"osingaatje":1,"sshaw":1,"josemigallas":1,"ElamT":1,"thedean7":1,"mjankowski":1,"Jonathandeveloper19":1,"mcmire":1,"thisismydesign":1,"professor":1,"nbibler":1,"HeitorMC":1,"brett-puddick":1},"pull_request_authors":{"matsales28":53,"VSPPedro":26,"github-actions[bot]":7,"stefannibrasil":7,"technicalpickles":6,"HeitorMC":5,"voxik":5,"theodorton":4,"neilvcarvalho":3,"amalrik":3,"mjankowski":2,"freesteph":2,"Earlopain":2,"franlocus":2,"clemens":2,"spdawson":2,"JuzerShakir":2,"jeduardo824":2,"pjpires":2,"vsppedro":2,"StefSchenkelaars":2,"hanachin":2,"mswiszcz":2,"theforestvn88":2,"dougmrqs":2,"EduardoSCosta":2,"ilianah":2,"lake-effect":2,"hotoolong":2,"ioquatix":2,"asilano":2,"yelvert":2,"rhannequin":2,"stonefield":1,"ohbarye":1,"MorganBat":1,"sarahraqueld":1,"dewyze":1,"aditya-kapoor":1,"mi-wada":1,"jarenas9539":1,"y-yagi":1,"antifun":1,"andreLumor":1,"HoangMinhBK":1,"vaot":1,"gabrielbaldao":1,"MatheusRich":1,"brendanthomas1":1,"petergoldstein":1,"mrashidramzan1996":1,"prashantham":1,"dlupu":1,"henriquesml":1,"pr0d1r2":1,"prashantjois":1,"stephannv":1,"mtasaka":1,"Kutomore":1,"olleolleolle":1,"abrom":1,"tagliala":1,"mcmire":1,"vyrak":1,"callahat":1,"LukasBarry":1,"maxehmookau":1,"LarytheLord":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-28T00:00:08.715Z","repositories_count":14439815,"issues_count":34200566,"pull_requests_count":112324942,"authors_count":11248051,"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":{"💡Issue: Feature Request":1},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":5,"CONTRIBUTOR":3,"MEMBER":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":10,"MEMBER":8,"NONE":4},"past_year_issue_authors":{"amalrik":1,"dev-mori":1,"garrettgregor":1,"jasonkarns":1,"matsales28":1,"PikachuEXE":1,"stefannibrasil":1,"stevepolitodesign":1,"TamerShlash":1},"past_year_pull_request_authors":{"matsales28":8,"stefannibrasil":4,"github-actions[bot]":2,"spdawson":2,"yelvert":2,"brendanthomas1":1,"HoangMinhBK":1,"LarytheLord":1,"MatheusRich":1},"maintainers":[{"login":"matsales28","count":49,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"},{"login":"VSPPedro","count":32,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/VSPPedro"},{"login":"neilvcarvalho","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/neilvcarvalho"},{"login":"mcmire","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mcmire"},{"login":"vsppedro","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vsppedro"}],"active_maintainers":[{"login":"matsales28","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":11,"PullRequestEvent":22,"ForkEvent":12,"IssuesEvent":15,"WatchEvent":70,"IssueCommentEvent":38,"PushEvent":43,"PullRequestReviewCommentEvent":8,"PullRequestReviewEvent":11,"CreateEvent":8},"last_year":{"ReleaseEvent":1,"DeleteEvent":10,"PullRequestEvent":11,"ForkEvent":3,"IssuesEvent":10,"WatchEvent":26,"IssueCommentEvent":9,"PushEvent":35,"PullRequestReviewCommentEvent":6,"PullRequestReviewEvent":8,"CreateEvent":6}},"keywords":["rails","rspec","ruby","testing"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/ci.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:02:39.302Z","updated_at":"2023-01-13T11:02:39.302Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/.github/workflows/ci.yml","dependencies":[{"id":6875577552,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875577553,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6875577554,"package_name":"actions/cache","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875577555,"package_name":"postgres","ecosystem":"actions","requirements":"*","direct":true,"kind":"docker","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/rubocop.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:02:39.329Z","updated_at":"2023-01-13T11:02:39.329Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/.github/workflows/rubocop.yml","dependencies":[{"id":6875577556,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875577557,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6875577558,"package_name":"actions/cache","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2023-01-13T11:02:39.364Z","updated_at":"2023-01-13T11:02:39.364Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/Gemfile","dependencies":[{"id":6875577559,"package_name":"appraisal","ecosystem":"rubygems","requirements":"= 2.2.0","direct":true,"kind":"runtime","optional":false},{"id":6875577560,"package_name":"bundler","ecosystem":"rubygems","requirements":"~\u003e 2.0","direct":true,"kind":"runtime","optional":false},{"id":6875577561,"package_name":"pry","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577562,"package_name":"pry-byebug","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577563,"package_name":"rake","ecosystem":"rubygems","requirements":"= 13.0.1","direct":true,"kind":"runtime","optional":false},{"id":6875577564,"package_name":"rspec","ecosystem":"rubygems","requirements":"~\u003e 3.9","direct":true,"kind":"runtime","optional":false},{"id":6875577565,"package_name":"rubocop","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577566,"package_name":"rubocop-packaging","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577567,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577568,"package_name":"warnings_logger","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577569,"package_name":"zeus","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577570,"package_name":"fssm","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577571,"package_name":"redcarpet","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577572,"package_name":"rouge","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":6875577573,"package_name":"yard","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"Gemfile.lock","sha":null,"kind":"lockfile","created_at":"2023-01-13T11:02:39.405Z","updated_at":"2023-01-13T11:02:39.405Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/Gemfile.lock","dependencies":[{"id":6875577574,"package_name":"activesupport","ecosystem":"rubygems","requirements":"7.0.4","direct":false,"kind":"runtime","optional":false},{"id":6875577575,"package_name":"appraisal","ecosystem":"rubygems","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":6875577576,"package_name":"ast","ecosystem":"rubygems","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":6875577577,"package_name":"byebug","ecosystem":"rubygems","requirements":"11.1.3","direct":false,"kind":"runtime","optional":false},{"id":6875577578,"package_name":"coderay","ecosystem":"rubygems","requirements":"1.1.3","direct":false,"kind":"runtime","optional":false},{"id":6875577579,"package_name":"concurrent-ruby","ecosystem":"rubygems","requirements":"1.1.10","direct":false,"kind":"runtime","optional":false},{"id":6875577580,"package_name":"diff-lcs","ecosystem":"rubygems","requirements":"1.3","direct":false,"kind":"runtime","optional":false},{"id":6875577581,"package_name":"fssm","ecosystem":"rubygems","requirements":"0.2.10","direct":false,"kind":"runtime","optional":false},{"id":6875577582,"package_name":"i18n","ecosystem":"rubygems","requirements":"1.12.0","direct":false,"kind":"runtime","optional":false},{"id":6875577583,"package_name":"json","ecosystem":"rubygems","requirements":"2.6.2","direct":false,"kind":"runtime","optional":false},{"id":6875577584,"package_name":"method_source","ecosystem":"rubygems","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":6875577585,"package_name":"minitest","ecosystem":"rubygems","requirements":"5.16.3","direct":false,"kind":"runtime","optional":false},{"id":6875577586,"package_name":"parallel","ecosystem":"rubygems","requirements":"1.22.1","direct":false,"kind":"runtime","optional":false},{"id":6875577587,"package_name":"parser","ecosystem":"rubygems","requirements":"3.1.2.1","direct":false,"kind":"runtime","optional":false},{"id":6875577588,"package_name":"pry","ecosystem":"rubygems","requirements":"0.13.1","direct":false,"kind":"runtime","optional":false},{"id":6875577589,"package_name":"pry-byebug","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":6875577590,"package_name":"rack","ecosystem":"rubygems","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":6875577591,"package_name":"rainbow","ecosystem":"rubygems","requirements":"3.1.1","direct":false,"kind":"runtime","optional":false},{"id":6875577592,"package_name":"rake","ecosystem":"rubygems","requirements":"13.0.1","direct":false,"kind":"runtime","optional":false},{"id":6875577593,"package_name":"redcarpet","ecosystem":"rubygems","requirements":"3.5.0","direct":false,"kind":"runtime","optional":false},{"id":6875577594,"package_name":"regexp_parser","ecosystem":"rubygems","requirements":"2.5.0","direct":false,"kind":"runtime","optional":false},{"id":6875577595,"package_name":"rexml","ecosystem":"rubygems","requirements":"3.2.5","direct":false,"kind":"runtime","optional":false},{"id":6875577596,"package_name":"rouge","ecosystem":"rubygems","requirements":"3.22.0","direct":false,"kind":"runtime","optional":false},{"id":6875577597,"package_name":"rspec","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":6875577598,"package_name":"rspec-core","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":6875577599,"package_name":"rspec-expectations","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":6875577600,"package_name":"rspec-mocks","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":6875577601,"package_name":"rspec-support","ecosystem":"rubygems","requirements":"3.9.0","direct":false,"kind":"runtime","optional":false},{"id":6875577602,"package_name":"rubocop","ecosystem":"rubygems","requirements":"1.36.0","direct":false,"kind":"runtime","optional":false},{"id":6875577603,"package_name":"rubocop-ast","ecosystem":"rubygems","requirements":"1.21.0","direct":false,"kind":"runtime","optional":false},{"id":6875577604,"package_name":"rubocop-packaging","ecosystem":"rubygems","requirements":"0.5.2","direct":false,"kind":"runtime","optional":false},{"id":6875577605,"package_name":"rubocop-rails","ecosystem":"rubygems","requirements":"2.16.1","direct":false,"kind":"runtime","optional":false},{"id":6875577606,"package_name":"ruby-progressbar","ecosystem":"rubygems","requirements":"1.11.0","direct":false,"kind":"runtime","optional":false},{"id":6875577607,"package_name":"thor","ecosystem":"rubygems","requirements":"0.20.0","direct":false,"kind":"runtime","optional":false},{"id":6875577608,"package_name":"tzinfo","ecosystem":"rubygems","requirements":"2.0.5","direct":false,"kind":"runtime","optional":false},{"id":6875577609,"package_name":"unicode-display_width","ecosystem":"rubygems","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":6875577610,"package_name":"warnings_logger","ecosystem":"rubygems","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":6875577611,"package_name":"yard","ecosystem":"rubygems","requirements":"0.9.25","direct":false,"kind":"runtime","optional":false},{"id":6875577612,"package_name":"zeus","ecosystem":"rubygems","requirements":"0.15.14","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"shoulda-matchers.gemspec","sha":null,"kind":"manifest","created_at":"2023-01-13T11:02:39.461Z","updated_at":"2023-01-13T11:02:39.461Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/shoulda-matchers.gemspec","dependencies":[{"id":6875577613,"package_name":"activesupport","ecosystem":"rubygems","requirements":"\u003e= 5.2.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/dynamic-readme.yml","sha":null,"kind":"manifest","created_at":"2026-02-22T12:01:20.916Z","updated_at":"2026-02-22T12:01:20.916Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/.github/workflows/dynamic-readme.yml","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/dynamic-security.yml","sha":null,"kind":"manifest","created_at":"2026-02-22T12:01:20.969Z","updated_at":"2026-02-22T12:01:20.969Z","repository_link":"https://github.com/thoughtbot/shoulda-matchers/blob/main/.github/workflows/dynamic-security.yml","dependencies":[]}],"score":35.27055221772942,"created_at":"2024-12-15T21:38:07.042Z","updated_at":"2026-04-30T21:00:23.259Z","avatar_url":"https://github.com/thoughtbot.png","language":"Ruby","monthly_downloads":0,"readme":"# Shoulda Matchers [![Gem Version][version-badge]][rubygems] [![Build Status][github-actions-badge]][github-actions] [![Total Downloads][downloads-total]][rubygems] [![Downloads][downloads-badge]][rubygems]\n\n[version-badge]: https://img.shields.io/gem/v/shoulda-matchers.svg\n[rubygems]: https://rubygems.org/gems/shoulda-matchers\n[github-actions-badge]: https://img.shields.io/github/actions/workflow/status/thoughtbot/shoulda-matchers/ci.yml?branch=main\n[github-actions]: https://github.com/thoughtbot/shoulda-matchers/actions\n[downloads-total]: https://img.shields.io/gem/dt/shoulda-matchers.svg\n[downloads-badge]: https://img.shields.io/gem/dtv/shoulda-matchers.svg\n[downloads-badge]: https://img.shields.io/gem/dtv/shoulda-matchers.svg\n\n[![shoulda-matchers][logo]][website]\n\n[logo]: https://matchers.shoulda.io/images/shoulda-matchers-logo.png\n[website]: https://matchers.shoulda.io/\n\nShoulda Matchers provides RSpec and Minitest-compatible one-liners to test\ncommon Rails functionality that, if written by hand, would be much longer, more\ncomplex, and error-prone.\n\n## Quick links\n\n📖 **[Read the documentation for the latest version][rubydocs].**\n📢 **[See what's changed in recent versions][changelog].**\n\n[rubydocs]: https://matchers.shoulda.io/docs\n[changelog]: CHANGELOG.md\n\n## Table of contents\n\n- [Getting started](#getting-started)\n   - [RSpec](#rspec)\n    - [Rails apps](#rails-apps)\n    - [Non-Rails apps](#non-rails-apps)\n  - [Minitest](#minitest)\n    - [Rails apps](#rails-apps-1)\n    - [Non-Rails apps](#non-rails-apps-1)\n- [Usage](#usage)\n  - [On the subject of `subject`](#on-the-subject-of-subject)\n  - [Availability of RSpec matchers in example groups](#availability-of-rspec-matchers-in-example-groups)\n    - [Rails projects](#rails-projects)\n    - [Non-Rails projects](#non-rails-projects)\n  - [`should` vs `is_expected.to`](#should-vs-is_expectedto)\n  - [A Note on Testing Style](#a-note-on-testing-style)\n- [Matchers](#matchers)\n  - [ActiveModel matchers](#activemodel-matchers)\n  - [ActiveRecord matchers](#activerecord-matchers)\n  - [ActionController matchers](#actioncontroller-matchers)\n  - [Routing matchers](#routing-matchers)\n  - [Independent matchers](#independent-matchers)\n- [Extensions](#extensions)\n- [Contributing](#contributing)\n- [Compatibility](#compatibility)\n- [Versioning](#versioning)\n- [Team](#team)\n- [Copyright/License](#copyrightlicense)\n- [About thoughtbot](#about-thoughtbot)\n\n## Getting started\n\n### RSpec\n\nStart by including `shoulda-matchers` in your Gemfile:\n\n```ruby\ngroup :test do\n  gem 'shoulda-matchers', '~\u003e 7.0'\nend\n```\n\nThen run `bundle install`.\n\nNow you need to configure the gem by telling it:\n\n- which matchers you want to use in your tests\n- that you're using RSpec so that it can make those matchers available in\n  your example groups\n\n#### Rails apps\n\nIf you're working on a Rails app, simply place this at the bottom of\n`spec/rails_helper.rb` (or in a support file if you so choose):\n\n```ruby\nShoulda::Matchers.configure do |config|\n  config.integrate do |with|\n    with.test_framework :rspec\n    with.library :rails\n  end\nend\n```\n\n#### Non-Rails apps\n\nIf you're not working on a Rails app, but you still make use of ActiveRecord or\nActiveModel in your project, you can still use this gem too! In that case,\nyou'll want to place the following configuration at the bottom of\n`spec/spec_helper.rb`:\n\n```ruby\nShoulda::Matchers.configure do |config|\n  config.integrate do |with|\n    with.test_framework :rspec\n\n    # Keep as many of these lines as are necessary:\n    with.library :active_record\n    with.library :active_model\n  end\nend\n```\n\n### Minitest\n\nIf you're using our umbrella gem [Shoulda], then make sure that you're using the\nlatest version:\n\n```ruby\ngroup :test do\n  gem 'shoulda', '~\u003e 4.0'\nend\n```\n\n[Shoulda]: https://github.com/thoughtbot/shoulda\n\nOtherwise, add `shoulda-matchers` to your Gemfile:\n\n```ruby\ngroup :test do\n  gem 'shoulda-matchers', '~\u003e 7.0'\nend\n```\n\nThen run `bundle install`.\n\nNow you need to configure the gem by telling it:\n\n- which matchers you want to use in your tests\n- that you're using Minitest so that it can make those matchers available in\n  your test case classes\n\n#### Rails apps\n\nIf you're working on a Rails app, simply place this at the bottom of\n`test/test_helper.rb`:\n\n```ruby\nShoulda::Matchers.configure do |config|\n  config.integrate do |with|\n    with.test_framework :minitest\n    with.library :rails\n  end\nend\n```\n\n#### Non-Rails apps\n\nIf you're not working on a Rails app, but you still make use of ActiveRecord or\nActiveModel in your project, you can still use this gem too! In that case,\nyou'll want to place the following configuration at the bottom of\n`test/test_helper.rb`:\n\n```ruby\nShoulda::Matchers.configure do |config|\n  config.integrate do |with|\n    with.test_framework :minitest\n\n    # Keep as many of these lines as are necessary:\n    with.library :active_record\n    with.library :active_model\n  end\nend\n```\n\n## Usage\n\nMost of the matchers provided by this gem are useful in a Rails context, and as\nsuch, can be used for different parts of a Rails app:\n\n- [database models backed by ActiveRecord](#activerecord-matchers)\n- [non-database models, form objects, etc. backed by\n  ActiveModel](#activemodel-matchers)\n- [controllers](#actioncontroller-matchers)\n- [routes](#routing-matchers) (RSpec only)\n- [Rails-specific features like `delegate`](#independent-matchers)\n\nAs the name of the gem indicates, most matchers are designed to be used in\n\"one-liner\" form using the `should` macro, a special directive available in both\nRSpec and [Shoulda]. For instance, a model test case may look something like:\n\n```ruby\n# RSpec\nRSpec.describe MenuItem, type: :model do\n  describe 'associations' do\n    it { should belong_to(:category).class_name('MenuCategory') }\n  end\n\n  describe 'validations' do\n    it { should validate_presence_of(:name) }\n    it { should validate_uniqueness_of(:name).scoped_to(:category_id) }\n  end\nend\n\n# Minitest (Shoulda)\nclass MenuItemTest \u003c ActiveSupport::TestCase\n  context 'associations' do\n    should belong_to(:category).class_name('MenuCategory')\n  end\n\n  context 'validations' do\n    should validate_presence_of(:name)\n    should validate_uniqueness_of(:name).scoped_to(:category_id)\n  end\nend\n```\n\n[See below](#matchers) for the full set of matchers that you can use.\n\n### On the subject of `subject`\n\nFor both RSpec and Shoulda, the **subject** is an implicit reference to the\nobject under test, and through the use of `should` as demonstrated above, all of\nthe matchers make use of `subject` internally when they are run. A `subject` is\nalways set automatically by your test framework in any given test case; however,\nin certain cases it can be advantageous to override it. For instance, when\ntesting validations in a model, it is customary to provide a valid model instead\nof a fresh one:\n\n```ruby\n# RSpec\nRSpec.describe Post, type: :model do\n  describe 'validations' do\n    # Here we're using FactoryBot, but you could use anything\n    subject { build(:post) }\n\n    it { should validate_presence_of(:title) }\n  end\nend\n\n# Minitest (Shoulda)\nclass PostTest \u003c ActiveSupport::TestCase\n  context 'validations' do\n    subject { build(:post) }\n\n    should validate_presence_of(:title)\n  end\nend\n```\n\nWhen overriding the subject in this manner, then, it's important to provide the\ncorrect object. **When in doubt, provide an instance of the class under test.**\nThis is particularly necessary for controller tests, where it is easy to\naccidentally write something like:\n\n```ruby\nRSpec.describe PostsController, type: :controller do\n  describe 'GET #index' do\n    subject { get :index }\n\n    # This may work...\n    it { should have_http_status(:success) }\n    # ...but this will not!\n    it { should permit(:title, :body).for(:post) }\n  end\nend\n```\n\nIn this case, you would want to use `before` rather than `subject`:\n\n```ruby\nRSpec.describe PostsController, type: :controller do\n  describe 'GET #index' do\n    before { get :index }\n\n    # Notice that we have to assert have_http_status on the response here...\n    it { expect(response).to have_http_status(:success) }\n    # ...but we do not have to provide a subject for render_template\n    it { should render_template('index') }\n  end\nend\n```\n\n### Availability of RSpec matchers in example groups\n\n#### Rails projects\n\nIf you're using RSpec, then you're probably familiar with the concept of example\ngroups. Example groups can be assigned tags to assign different behaviors\nto different kinds of example groups. This comes into play especially when using\n`rspec-rails`, where, for instance, controller example groups, tagged with\n`type: :controller`, are written differently than request example groups, tagged\nwith `type: :request`. This difference in writing style arises because\n`rspec-rails` mixes different behaviors and methods into controller example\ngroups vs. request example groups.\n\nRelying on this behavior, Shoulda Matchers automatically makes certain matchers\navailable in certain kinds of example groups:\n\n- ActiveRecord and ActiveModel matchers are available only in model example\n  groups, i.e., those tagged with `type: :model` or in files located under\n  `spec/models`.\n- ActionController matchers are available only in controller example groups,\n  i.e., those tagged with `type: :controller` or in files located under\n  `spec/controllers`.\n- The `route` matcher is available in routing example groups, i.e., those\n  tagged with `type: :routing` or in files located under `spec/routing`.\n- Independent matchers are available in all example groups.\n\nAs long as you're using Rails, you don't need to worry about these details —\neverything should \"just work\".\n\n#### Non-Rails projects\n\n**What if you are using ActiveModel or ActiveRecord outside of Rails, however,\nand you want to use model matchers in a certain example group?** Then you'll\nneed to manually include the module that holds those matchers into that example\ngroup. For instance, you might have to say:\n\n```ruby\nRSpec.describe MySpecialModel do\n  include Shoulda::Matchers::ActiveModel\n  include Shoulda::Matchers::ActiveRecord\nend\n```\n\nIf you have a lot of similar example groups in which you need to do this, then\nyou might find it more helpful to tag your example groups appropriately, then\ninstruct RSpec to mix these modules into any example groups that have that tag.\nFor instance, you could add this to your `rails_helper.rb`:\n\n```ruby\nRSpec.configure do |config|\n  config.include(Shoulda::Matchers::ActiveModel, type: :model)\n  config.include(Shoulda::Matchers::ActiveRecord, type: :model)\nend\n```\n\nAnd from then on, you could say:\n\n```ruby\nRSpec.describe MySpecialModel, type: :model do\n  # ...\nend\n```\n\n\u003ca name=\"should-vs-is_expectedto\"\u003e\u003c/a\u003e\n### `should` vs `is_expected.to`\n\nIn this README and throughout the documentation, you'll notice that we use the\n`should` form of RSpec's one-liner syntax over `is_expected.to`. Besides being\nthe namesake of the gem itself, this is our preferred syntax as it's short and\nsweet. But if you prefer to use `is_expected.to`, you can do that too:\n\n```ruby\nRSpec.describe Person, type: :model do\n  it { is_expected.to validate_presence_of(:name) }\nend\n```\n\n### A Note on Testing Style\n\nIf you inspect the source code, you'll notice quickly that `shoulda-matchers`\nis largely implemented using reflections and other introspection methods that\nRails provides. At first sight, this might seem to go against the common\npractice of testing behavior rather than implementation. However, as the\navailable matchers indicate, we recommend that you treat `shoulda-matchers` as\na tool to help you ensure correct configuration and adherence to best practices\nand idiomatic Rails in your models and controllers - especially for aspects\nthat in your experience are often insufficiently tested, such as ActiveRecord\nvalidations or controller callbacks (a.k.a. the \"framework-y\" parts).\n\nFor testing your application's unique business logic, however, we recommend focusing on\nbehavior and outcomes over implementation details. This approach will better support\nrefactoring and ensure that your tests remain resilient to changes in how your code\nis structured. While no generalized testing tool can fully capture the nuances of your\nspecific domain, you can draw inspiration from shoulda-matchers to write custom\nmatchers that align more closely with your application's needs.\n\n## Matchers\n\nHere is the full list of matchers that ship with this gem. If you need details\nabout any of them, make sure to [consult the documentation][rubydocs]!\n\n### ActiveModel matchers\n\n- **[allow_value](lib/shoulda/matchers/active_model/allow_value_matcher.rb)**\n  tests that an attribute is valid or invalid if set to one or more values.\n  _(Aliased as #allow_values.)_\n- **[have_secure_password](lib/shoulda/matchers/active_model/have_secure_password_matcher.rb)**\n  tests usage of `has_secure_password`.\n- **[validate_absence_of](lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb)**\n  tests usage of `validates_absence_of`.\n- **[validate_acceptance_of](lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb)**\n  tests usage of `validates_acceptance_of`.\n- **[validate_confirmation_of](lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb)**\n  tests usage of `validates_confirmation_of`.\n- **[validate_exclusion_of](lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb)**\n  tests usage of `validates_exclusion_of`.\n- **[validate_inclusion_of](lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb)**\n  tests usage of `validates_inclusion_of`.\n- **[validate_length_of](lib/shoulda/matchers/active_model/validate_length_of_matcher.rb)**\n  tests usage of `validates_length_of`.\n- **[validate_numericality_of](lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb)**\n  tests usage of `validates_numericality_of`.\n- **[validate_presence_of](lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb)**\n  tests usage of `validates_presence_of`.\n- **[validate_comparison_of](lib/shoulda/matchers/active_model/validate_comparison_of_matcher.rb)**\n  tests usage of `validates_comparison_of`.\n\n### ActiveRecord matchers\n\n- **[accept_nested_attributes_for](lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb)**\n  tests usage of the `accepts_nested_attributes_for` macro.\n- **[belong_to](lib/shoulda/matchers/active_record/association_matcher.rb)**\n  tests your `belongs_to` associations.\n- **[define_enum_for](lib/shoulda/matchers/active_record/define_enum_for_matcher.rb)**\n  tests usage of the `enum` macro.\n- **[have_and_belong_to_many](lib/shoulda/matchers/active_record/association_matcher.rb)**\n  tests your `has_and_belongs_to_many` associations.\n- **[have_delegated_type](lib/shoulda/matchers/active_record/association_matcher.rb#L687)**\n  tests usage of the `delegated_type` macro.\n- **[have_db_column](lib/shoulda/matchers/active_record/have_db_column_matcher.rb)**\n  tests that the table that backs your model has a specific column.\n- **[have_db_index](lib/shoulda/matchers/active_record/have_db_index_matcher.rb)**\n  tests that the table that backs your model has an index on a specific column.\n- **[have_implicit_order_column](lib/shoulda/matchers/active_record/have_implicit_order_column.rb)**\n  tests usage of `implicit_order_column`.\n- **[have_many](lib/shoulda/matchers/active_record/association_matcher.rb#L328)**\n  tests your `has_many` associations.\n- **[have_many_attached](lib/shoulda/matchers/active_record/have_attached_matcher.rb)**\n  tests your `has_many_attached` associations.\n- **[have_one](lib/shoulda/matchers/active_record/association_matcher.rb#L598)**\n  tests your `has_one` associations.\n- **[have_one_attached](lib/shoulda/matchers/active_record/have_attached_matcher.rb)**\n  tests your `has_one_attached` associations.\n- **[have_readonly_attribute](lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb)**\n  tests usage of the `attr_readonly` macro.\n- **[have_rich_text](lib/shoulda/matchers/active_record/have_rich_text_matcher.rb)**\n  tests your `has_rich_text` associations.\n- **[serialize](lib/shoulda/matchers/active_record/serialize_matcher.rb)** tests\n  usage of the `serialize` macro.\n- **[validate_uniqueness_of](lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb)**\n  tests usage of `validates_uniqueness_of`.\n- **[normalize](lib/shoulda/matchers/active_record/normalize_matcher.rb)** tests\n  usage of the `normalize` macro\n- **[encrypt](lib/shoulda/matchers/active_record/encrypt_matcher.rb)**\n  tests usage of the `encrypts` macro.\n\n### ActionController matchers\n\n- **[filter_param](lib/shoulda/matchers/action_controller/filter_param_matcher.rb)**\n  tests parameter filtering configuration.\n- **[permit](lib/shoulda/matchers/action_controller/permit_matcher.rb)** tests\n  that an action restricts the `params` hash.\n- **[redirect_to](lib/shoulda/matchers/action_controller/redirect_to_matcher.rb)**\n  tests that an action redirects to a certain location.\n- **[render_template](lib/shoulda/matchers/action_controller/render_template_matcher.rb)**\n  tests that an action renders a template.\n- **[render_with_layout](lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb)**\n  tests that an action is rendered with a certain layout.\n- **[rescue_from](lib/shoulda/matchers/action_controller/rescue_from_matcher.rb)**\n  tests usage of the `rescue_from` macro.\n- **[respond_with](lib/shoulda/matchers/action_controller/respond_with_matcher.rb)**\n  tests that an action responds with a certain status code.\n- **[route](lib/shoulda/matchers/action_controller/route_matcher.rb)** tests\n  your routes.\n- **[set_session](lib/shoulda/matchers/action_controller/set_session_matcher.rb)**\n  makes assertions on the `session` hash.\n- **[set_flash](lib/shoulda/matchers/action_controller/set_flash_matcher.rb)**\n  makes assertions on the `flash` hash.\n- **[use_after_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L29)**\n  tests that an `after_action` callback is defined in your controller.\n- **[use_around_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L75)**\n  tests that an `around_action` callback is defined in your controller.\n- **[use_before_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L4)**\n  tests that a `before_action` callback is defined in your controller.\n\n### Routing matchers\n\n- **[route](lib/shoulda/matchers/action_controller/route_matcher.rb)** tests\n  your routes.\n\n### Independent matchers\n\n- **[delegate_method](lib/shoulda/matchers/independent/delegate_method_matcher.rb)**\n  tests that an object forwards messages to other, internal objects by way of\n  delegation.\n\n## Extensions\n\nOver time our community has created extensions to Shoulda Matchers. If you've\ncreated something that you want to share, please [let us know][new-issue]!\n\n- **[shoulda-matchers-cucumber]** – Adds support for using Shoulda Matchers in\n  Cucumber tests.\n\n[new-issue]: https://github.com/thoughtbot/shoulda-matchers/issues/new\n[shoulda-matchers-cucumber]: https://github.com/majioa/shoulda-matchers-cucumber\n\n## Contributing\n\nHave a fix for a problem you've been running into or an idea for a new feature\nyou think would be useful? Take a look at the [Contributing\ndocument](CONTRIBUTING.md) for instructions on setting up the repo on your\nmachine, understanding the codebase, and creating a good pull request.\n\n## Compatibility\n\nShoulda Matchers is tested and supported against Ruby 3.2+, Rails\n7.1+, RSpec 3.x, and Minitest 5.x.\n\n- For Ruby \u003c 2.4 and Rails \u003c 4.1 compatibility, please use [v3.1.3][v3.1.3].\n- For Ruby \u003c 3.0 and Rails \u003c 6.1 compatibility, please use [v4.5.1][v4.5.1].\n- For Rails \u003c 7.1 compatibility, please use [v6.5.0][v6.5.0].\n\n[v3.1.3]: https://github.com/thoughtbot/shoulda-matchers/tree/v3.1.3\n[v4.5.1]: https://github.com/thoughtbot/shoulda-matchers/tree/v4.5.1\n[v6.5.0]: https://github.com/thoughtbot/shoulda-matchers/tree/v6.5.0\n\n## Versioning\n\nShoulda Matchers follows Semantic Versioning 2.0 as defined at\n\u003chttps://semver.org\u003e.\n\n## Team\n\nShoulda Matchers is currently maintained by [Pedro Paiva][VSPPedro] and [Matheus\nSales][matsales28]. Previous maintainers include [Elliot Winkler][mcmire],\n[Gui Albuk][guialbuk], [Jason Draper][drapergeek], [Melissa Xie][mxie],\n[Gabe Berke-Williams][gabebw], [Ryan McGeary][rmm5t], [Joe Ferris][jferris], and\n[Tammer Saleh][tammersaleh].\n\n[VSPPedro]: https://github.com/VSPPedro\n[matsales28]: https://github.com/matsales28\n[mcmire]: https://github.com/mcmire\n[guialbuk]: https://github.com/guialbuk\n[drapergeek]: https://github.com/drapergeek\n[mxie]: https://github.com/mxie\n[gabebw]: https://github.com/gabebw\n[rmm5t]: https://github.com/rmm5t\n[jferris]: https://github.com/jferris\n[tammersaleh]: https://github.com/tammersaleh\n\n## Copyright/License\n\nShoulda Matchers is copyright © Tammer Saleh and [thoughtbot,\ninc][thoughtbot-website]. It is free and open-source software and may be\nredistributed under the terms specified in the [LICENSE](LICENSE) file.\n\n[thoughtbot-website]: https://thoughtbot.com\n\n\u003c!-- START /templates/footer.md --\u003e\n## About thoughtbot\n\n![thoughtbot](https://thoughtbot.com/thoughtbot-logo-for-readmes.svg)\n\nThis repo is maintained and funded by thoughtbot, inc.\nThe names and logos for thoughtbot are trademarks of thoughtbot, inc.\n\nWe love open source software!\nSee [our other projects][community].\nWe are [available for hire][hire].\n\n[community]: https://thoughtbot.com/community?utm_source=github\n[hire]: https://thoughtbot.com/hire-us?utm_source=github\n\n\u003c!-- END /templates/footer.md --\u003e\n","funding_links":["https://github.com/sponsors/thoughtbot"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["activerecord","mvc","activejob","rubygems","crash-reporting","rack","sinatra","sidekiq","factories","factory-bot"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/123","html_url":"https://ruby.ecosyste.ms/projects/123"}