{"id":123,"name":null,"description":"Simple one-liner tests for common Rails functionality","url":"https://github.com/thoughtbot/shoulda-matchers","last_synced_at":"2026-06-15T19:30:15.576Z","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-05-25T20:04:53.000Z","size":16084,"stargazers_count":3584,"open_issues_count":45,"forks_count":915,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-06-07T23:02:58.668Z","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-06-06T20:56:55.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":34060093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-shoulda-matchers/latest_version","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":2667,"github":"debian","metadata":{"codename":"bookworm","funded_packages_count":395},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.459Z","updated_at":"2026-06-10T05:17:51.014Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-shoulda-matchers/latest_version","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":1701,"github":"ubuntu","metadata":{"codename":"noble","funded_packages_count":198},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:45.928Z","updated_at":"2026-06-10T05:17:44.581Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-shoulda-matchers/latest_version","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","funded_packages_count":93},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.156Z","updated_at":"2026-05-29T05:10:14.968Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-shoulda-matchers/latest_version","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":1430,"github":"ubuntu","metadata":{"codename":"focal","funded_packages_count":165},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:47.233Z","updated_at":"2026-06-10T05:17:46.717Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-shoulda-matchers/latest_version","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":2223,"github":"ubuntu","metadata":{"codename":"mantic","mirror":"http://old-releases.ubuntu.com/ubuntu","funded_packages_count":444},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.636Z","updated_at":"2026-06-10T05:17:48.008Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-shoulda-matchers/latest_version","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":1000,"github":"ubuntu","metadata":{"codename":"lunar","mirror":"http://old-releases.ubuntu.com/ubuntu","funded_packages_count":133},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:49.117Z","updated_at":"2026-06-10T05:17:49.008Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-shoulda-matchers/latest_version","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":764,"github":"debian","metadata":{"codename":"bullseye","funded_packages_count":100},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.702Z","updated_at":"2026-06-10T05:17:51.942Z","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":56,"first_release_published_at":"2023-12-03T01:58:51.113Z","latest_release_published_at":"2026-06-12T14:45:18.000Z","latest_release_number":"v8.0.0+incompatible","last_synced_at":"2026-06-12T18:01:32.445Z","created_at":"2023-12-03T01:58:14.507Z","updated_at":"2026-06-12T18:01:32.445Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fthoughtbot%2Fshoulda-matchers/latest_version","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":2169848,"maintainers_count":0,"namespaces_count":792747,"keywords_count":113213,"github":"golang","metadata":{"funded_packages_count":53976},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-06-10T05:03:23.672Z","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":14514134,"name":"dev-ruby/shoulda-matchers","ecosystem":"gentoo","description":"Making tests easy on the fingers and eyes","homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["amd64","arm","arm64","~hppa","~loong","ppc","ppc64","~riscv","~s390","~sparc","~x86"],"namespace":"dev-ruby","versions_count":5,"first_release_published_at":"2026-04-22T07:13:25.000Z","latest_release_published_at":"2026-04-22T07:13:25.000Z","latest_release_number":"7.0.1","last_synced_at":"2026-05-27T02:50:37.741Z","created_at":"2026-05-27T02:50:37.406Z","updated_at":"2026-05-27T02:50:38.232Z","registry_url":"https://packages.gentoo.org/packages/dev-ruby/shoulda-matchers","install_command":"emerge dev-ruby/shoulda-matchers","documentation_url":"https://packages.gentoo.org/packages/dev-ruby/shoulda-matchers","metadata":{"category":"dev-ruby","slot":"4","eapi":"8","inherit":"ruby-fakegem","iuse":"test ruby_targets_ruby32 ruby_targets_ruby33 ruby_targets_ruby34 doc test"},"repo_metadata":{},"repo_metadata_updated_at":"2026-05-27T02:50:38.203Z","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:gentoo/dev-ruby/shoulda-matchers","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/gentoo/dev-ruby/shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/gentoo/dev-ruby/shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/gentoo/dev-ruby/shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages/dev-ruby%2Fshoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages/dev-ruby%2Fshoulda-matchers/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages/dev-ruby%2Fshoulda-matchers/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages/dev-ruby%2Fshoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages/dev-ruby%2Fshoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages/dev-ruby%2Fshoulda-matchers/codemeta","maintainers":[],"registry":{"name":"gentoo-portage","url":"https://packages.gentoo.org/","ecosystem":"gentoo","default":true,"packages_count":19331,"maintainers_count":0,"namespaces_count":174,"keywords_count":382,"github":"gentoo","metadata":{"snapshot_url":"https://distfiles.gentoo.org/snapshots/portage-latest.tar.xz","funded_packages_count":77},"icon_url":"https://github.com/gentoo.png","created_at":"2026-05-26T08:59:24.155Z","updated_at":"2026-06-10T05:04:01.738Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/gentoo-portage/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":65,"first_release_published_at":"2011-01-19T16:19:40.111Z","latest_release_published_at":"2026-06-12T18:37:10.077Z","latest_release_number":"8.0.1","last_synced_at":"2026-06-13T03:00:55.114Z","created_at":"2022-04-06T10:53:16.637Z","updated_at":"2026-06-13T03:00:55.114Z","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":260269870,"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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/shoulda-matchers/latest_version","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":66,"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":207825,"maintainers_count":68941,"namespaces_count":0,"keywords_count":18771,"github":"rubygems","metadata":{"funded_packages_count":7455},"icon_url":"https://github.com/rubygems.png","created_at":"2022-04-04T15:19:23.446Z","updated_at":"2026-06-10T05:04:00.514Z","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":14528373,"name":"devel/ruby-shoulda-matchers","ecosystem":"pkgsrc","description":"Making tests easy on the fingers and eyes","homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/thoughtbot/shoulda-matchers","keywords_array":["devel","ruby"],"namespace":"devel","versions_count":1,"first_release_published_at":"2026-04-06T11:41:52.000Z","latest_release_published_at":"2026-04-06T11:41:52.000Z","latest_release_number":"7.0.1","last_synced_at":"2026-05-27T06:47:48.978Z","created_at":"2026-05-27T06:47:47.638Z","updated_at":"2026-05-27T07:07:03.330Z","registry_url":"https://pkgsrc.se/devel/ruby-shoulda-matchers","install_command":"pkg_add ruby40-shoulda-matchers","documentation_url":"https://pkgsrc.se/devel/ruby-shoulda-matchers","metadata":{"pkg_slug":"ruby-shoulda-matchers","pkgbase":"ruby33-shoulda-matchers","machine_arch":"x86_64","opsys":"NetBSD","pkgname_latest":"ruby33-shoulda-matchers-7.0.1"},"repo_metadata":{},"repo_metadata_updated_at":"2026-05-27T06:47:48.653Z","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:pkgsrc/devel/ruby-shoulda-matchers?arch=x86_64\u0026os=NetBSD","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pkgsrc/devel/ruby-shoulda-matchers","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pkgsrc/devel/ruby-shoulda-matchers","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pkgsrc/devel/ruby-shoulda-matchers/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fruby-shoulda-matchers/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fruby-shoulda-matchers/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fruby-shoulda-matchers/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fruby-shoulda-matchers/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fruby-shoulda-matchers/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fruby-shoulda-matchers/codemeta","maintainers":[],"registry":{"name":"pkgsrc-netbsd-x86_64-10.1-all","url":"https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.1/All","ecosystem":"pkgsrc","default":true,"packages_count":19498,"maintainers_count":0,"namespaces_count":42,"keywords_count":308,"github":"pkgsrc","metadata":{"funded_packages_count":48},"icon_url":"https://github.com/pkgsrc.png","created_at":"2026-05-26T08:59:24.518Z","updated_at":"2026-06-09T05:04:46.058Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-shoulda-matchers/latest_version","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":1523,"github":"ubuntu","metadata":{"codename":"jammy","funded_packages_count":167},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:46.486Z","updated_at":"2026-06-10T05:17:45.610Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-shoulda-matchers/latest_version","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":1473,"github":"ubuntu","metadata":{"codename":"oracular","mirror":"http://old-releases.ubuntu.com/ubuntu","funded_packages_count":214},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.028Z","updated_at":"2026-06-10T05:17:05.787Z","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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/guix/packages/ruby-shoulda-matchers/latest_version","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":31749,"maintainers_count":0,"namespaces_count":0,"keywords_count":1627,"github":"guix-mirror","metadata":{"funded_packages_count":368},"icon_url":"https://github.com/guix-mirror.png","created_at":"2026-03-02T16:23:46.981Z","updated_at":"2026-06-10T05:17:25.224Z","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":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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-shoulda-matchers/latest_version","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":1987,"github":"debian","metadata":{"codename":"trixie","funded_packages_count":316},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.448Z","updated_at":"2026-06-10T05:17:04.542Z","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"}},{"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":65,"first_release_published_at":"2011-01-19T16:19:40.111Z","latest_release_published_at":"2026-06-12T18:37:10.077Z","latest_release_number":"8.0.1","last_synced_at":"2026-06-14T02:02:28.690Z","created_at":"2025-10-07T05:57:04.844Z","updated_at":"2026-06-14T02:09:22.934Z","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-05-25T20:04:53.000Z","size":16084,"stargazers_count":3584,"open_issues_count":45,"forks_count":915,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-06-07T23:02:58.668Z","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-06-06T20:56:55.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":34060093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"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":"2026-06-14T02:09:22.933Z","dependent_packages_count":0,"downloads":260317556,"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-06-12T18:00:59.879Z","issues_count":96,"pull_requests_count":206,"avg_time_to_close_issue":24295640.587301586,"avg_time_to_close_pull_request":10453256.558510639,"issues_closed_count":63,"pull_requests_closed_count":188,"pull_request_authors_count":69,"issue_authors_count":84,"avg_comments_per_issue":3.125,"avg_comments_per_pull_request":1.6310679611650485,"merged_pull_requests_count":159,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":26,"past_year_avg_time_to_close_issue":1897255.2857142857,"past_year_avg_time_to_close_pull_request":717353.9583333334,"past_year_issues_closed_count":7,"past_year_pull_requests_closed_count":24,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.1666666666666667,"past_year_avg_comments_per_pull_request":0.34615384615384615,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":23,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":56,"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":16,"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","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/shoulda-matchers/latest_version","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":66,"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":192660,"maintainers_count":67954,"namespaces_count":0,"keywords_count":18400,"github":"gem-coop","metadata":{"funded_packages_count":6885},"icon_url":"https://github.com/gem-coop.png","created_at":"2025-10-06T17:24:20.932Z","updated_at":"2026-06-10T05:17:24.062Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/namespaces"}}],"commits":{"id":3396,"full_name":"thoughtbot/shoulda-matchers","default_branch":"main","total_commits":2047,"total_committers":340,"total_bot_commits":18,"total_bot_committers":3,"mean_commits":6.020588235294118,"dds":0.7107962872496336,"past_year_total_commits":32,"past_year_total_committers":11,"past_year_total_bot_commits":2,"past_year_total_bot_committers":1,"past_year_mean_commits":2.909090909090909,"past_year_dds":0.40625,"last_synced_at":"2026-06-14T03:04:00.344Z","last_synced_commit":"eeae1868018d1aef474e976b129d3e0fa02baee2","created_at":"2023-03-07T09:17:33.024Z","updated_at":"2026-06-14T02:45:49.154Z","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":"Matheus Sales","email":"matheus_usales@hotmail.com","login":"matsales28","count":55},{"name":"Dan Croak","email":"dcroak@thoughtbot.com","login":"croaky","count":50},{"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":"Gui Albuk","email":"guilherme@n-pix.com","login":null,"count":20},{"name":"Mike Burns","email":"mburns@thoughtbot.com","login":"mike-burns","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":"github-actions[bot]","email":"41898282+github-actions[bot]","login":"github-actions[bot]","count":9},{"name":"Derek Prior","email":"derekprior@gmail.com","login":"derekprior","count":9},{"name":"Erik Michaels-Ober","email":"sferik@gmail.com","login":"sferik","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":"Sean Doyle","email":"sean.p.doyle24@gmail.com","login":"seanpdoyle","count":5},{"name":"Jacob Morris","email":"jacob@creativesoapbox.com","login":null,"count":5},{"name":"Yukio Mizuta","email":"untidyhair@gmail.com","login":"untidy-hair","count":5},{"name":"Mike Boone","email":"mike@boonedocks.net","login":"boone","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":"Neilson Carvalho","email":"neilvilela@gmail.com","login":"neilvcarvalho","count":4},{"name":"Vít Ondruch","email":"vondruch@redhat.com","login":"voxik","count":4},{"name":"Stafford Brunk","email":"wingrunr21@gmail.com","login":"wingrunr21","count":4},{"name":"Lawrence Pit","email":"lawrence.pit@gmail.com","login":"lawrencepit","count":4},{"name":"Damian Galarza","email":"damian@thoughtbot.com","login":null,"count":4},{"name":"Damian Galarza and Harry Schwartz","email":"support+Damian+Harry@thoughtbot.com","login":null,"count":4},{"name":"Luciano Sousa","email":"ls@lucianosousa.net","login":null,"count":4},{"name":"matflores","email":"mflores@atlanware.com","login":null,"count":4},{"name":"Håkon Lerring","email":"hakon@powow.no","login":"Hakon","count":4},{"name":"Daniel Duvall","email":"dan@mutual.io","login":"marxarelli","count":4},{"name":"Bob Showalter","email":"showaltb@gmail.com","login":"showaltb","count":4},{"name":"Amalrik Maia","email":"amalrik.maia@gmail.com","login":"amalrik","count":4},{"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":"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":"Tom Milewski","email":"tmilewski@gmail.com","login":"tmilewski","count":3},{"name":"Tristan Dunn","email":"tristanzdunn@gmail.com","login":"tristandunn","count":3},{"name":"Utkarsh Gupta","email":"utkarsh@debian.org","login":"utkarsh2102","count":3},{"name":"Alex Grant","email":"alexgrant@apprentice.io","login":"digitalcora","count":3},{"name":"Dean Strelau","email":"dean@mintdigital.com","login":null,"count":3},{"name":"Chad Pytel","email":"cpytel@thoughtbot.com","login":null,"count":3},{"name":"Ari Pollak","email":"ari@thelevelup.com","login":null,"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":"Geoff Harcourt","email":"geoff.harcourt@gmail.com","login":"geoffharcourt","count":2},{"name":"Douglas Marques","email":"46424071+dougmrqs","login":"dougmrqs","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":"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":"Scott Albertson","email":"ascottalbertson@gmail.com","login":"salbertson","count":2},{"name":"Stef Schenkelaars","email":"stef.schenkelaars@gmail.com","login":"StefSchenkelaars","count":2},{"name":"Francisco","email":"78037877+franlocus","login":"franlocus","count":2},{"name":"Steve Madsen","email":"steve@lightyearsoftware.com","login":"sjmadsen","count":2},{"name":"barelyknown","email":"sean@buytruckload.com","login":null,"count":2},{"name":"jmpage","email":"jenpage@ebay.com","login":null,"count":2},{"name":"Stefanni Brasil","email":"stefannibrasil@gmail.com","login":null,"count":2},{"name":"Dan Croak","email":"dan@thoughtbot.com","login":null,"count":2},{"name":"Ashley Lake","email":"39317653+lake-effect","login":"lake-effect","count":1},{"name":"Artiom Diomin","email":"kron82@gmail.com","login":"kron4eg","count":1},{"name":"Artin Boghosian","email":"artinboghosian@gmail.com","login":"artinboghosian","count":1},{"name":"Antonio Terceiro","email":"terceiro@softwarelivre.org","login":"terceiro","count":1},{"name":"Anthony Williams","email":"hi@antw.me","login":"antw","count":1},{"name":"André Moreira","email":"andre.lumor1@gmail.com","login":"andreLumor","count":1},{"name":"Andrey Deryabin","email":"deriabin@gmail.com","login":"aderyabin","count":1},{"name":"Andrew Bromwich","email":"a.bromwich@gmail.com","login":"abrom","count":1},{"name":"Ana María Martínez Gómez","email":"ammartinez@suse.de","login":"Ana06","count":1},{"name":"Aaron Gibralter","email":"aaron.gibralter@gmail.com","login":"agibralter","count":1},{"name":"Aaron Vasquez","email":"aaronvasquez1@gmail.com","login":"AaronVasquez","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":"Lucas D'Avila","email":"lucas@lucasdavi.la","login":null,"count":1},{"name":"Justin Case","email":"justin@playelite.net","login":null,"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":"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":"Andy Chambers","email":"anchambers@paypal.com","login":null,"count":1},{"name":"Anthony Navarre","email":"anthony@thoughtbot.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":"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":"Ben J Woodcroft","email":"donttrustben@gmail.com","login":"wwood","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":"vfrride","email":"jeff@jpcutler.net","login":"vfrride","count":1},{"name":"Dave Schweisguth","email":"dave@schweisguth.org","login":"dschweisguth","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":"Dimitrij Denissenko","email":"dimitrij.denissenko@blacksquaremedia.com","login":"dim","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":"Mateusz Swiszcz","email":"mateusz.swiszcz@akra.net","login":null,"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":"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":"Berislav Babic","email":"babinho@gmail.com","login":"berislavbabic","count":1},{"name":"Christopher Chow","email":"chris@chowie.net","login":"christophersjchow","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":"Jeff Dutil","email":"jdutil21@gmail.com","login":"JDutil","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":"Geremia Taglialatela","email":"tagliala","login":"tagliala","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":"Leo Nikkilä","email":"hello@lnikki.la","login":"lnikkila","count":1}],"past_year_committers":[{"name":"Matheus Sales","email":"matheus_usales@hotmail.com","login":"matsales28","count":19},{"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":"Artin Boghosian","email":"artinboghosian@gmail.com","login":"artinboghosian","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-06-14T00:00:10.507Z","repositories_count":6259505,"commits_count":882512434,"contributors_count":35085189,"owners_count":1166608,"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-06-14T02:09:37.189Z","status":"active","issues_count":96,"pull_requests_count":207,"avg_time_to_close_issue":23916151.421875,"avg_time_to_close_pull_request":10343235.615789473,"issues_closed_count":64,"pull_requests_closed_count":190,"pull_request_authors_count":69,"issue_authors_count":84,"avg_comments_per_issue":3.1354166666666665,"avg_comments_per_pull_request":1.6231884057971013,"merged_pull_requests_count":161,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":27,"past_year_avg_time_to_close_issue":1661140.125,"past_year_avg_time_to_close_pull_request":662270.3461538461,"past_year_issues_closed_count":8,"past_year_pull_requests_closed_count":26,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.25,"past_year_avg_comments_per_pull_request":0.3333333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":25,"created_at":"2023-05-12T17:14:01.644Z","updated_at":"2026-06-14T02:09:37.189Z","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":73,"CONTRIBUTOR":12,"COLLABORATOR":8,"MEMBER":3},"pull_request_author_associations_count":{"CONTRIBUTOR":82,"COLLABORATOR":64,"NONE":40,"MEMBER":21},"issue_authors":{"VSPPedro":6,"matsales28":4,"fabriciobonjorno":2,"mochetts":2,"mjankowski":2,"sarobakhtiyari":2,"calebhearth":1,"sirwolfgang":1,"felix-as":1,"aripollak":1,"gruschis":1,"rubendinho":1,"lioneldebauge":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,"ArcDlrt":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,"Jonathandeveloper19":1,"mcmire":1,"thisismydesign":1,"professor":1,"nbibler":1,"HeitorMC":1,"brett-puddick":1},"pull_request_authors":{"matsales28":59,"VSPPedro":26,"github-actions[bot]":7,"stefannibrasil":7,"technicalpickles":6,"voxik":5,"HeitorMC":5,"theodorton":4,"neilvcarvalho":3,"amalrik":3,"mswiszcz":2,"hanachin":2,"vsppedro":2,"jeduardo824":2,"JuzerShakir":2,"spdawson":2,"clemens":2,"franlocus":2,"freesteph":2,"mjankowski":2,"Earlopain":2,"pjpires":2,"StefSchenkelaars":2,"theforestvn88":2,"dougmrqs":2,"EduardoSCosta":2,"lake-effect":2,"hotoolong":2,"ilianah":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,"andreLumor":1,"antifun":1,"vaot":1,"HoangMinhBK":1,"gabrielbaldao":1,"MatheusRich":1,"brendanthomas1":1,"artinboghosian":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-06-14T00:00:24.059Z","repositories_count":14804457,"issues_count":33161443,"pull_requests_count":109317906,"authors_count":11305997,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"NONE":5,"CONTRIBUTOR":4,"MEMBER":3},"past_year_pull_request_author_associations_count":{"MEMBER":14,"CONTRIBUTOR":11,"NONE":2},"past_year_issue_authors":{"matsales28":3,"amalrik":1,"dev-mori":1,"felix-as":1,"garrettgregor":1,"jasonkarns":1,"mjankowski":1,"PikachuEXE":1,"stefannibrasil":1,"TamerShlash":1},"past_year_pull_request_authors":{"matsales28":14,"stefannibrasil":4,"github-actions[bot]":2,"yelvert":2,"artinboghosian":1,"brendanthomas1":1,"HoangMinhBK":1,"LarytheLord":1,"MatheusRich":1},"maintainers":[{"login":"matsales28","count":57,"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":17,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":14,"PullRequestEvent":22,"ForkEvent":12,"IssuesEvent":15,"WatchEvent":72,"IssueCommentEvent":38,"PushEvent":48,"PullRequestReviewCommentEvent":8,"PullRequestReviewEvent":11,"CreateEvent":11},"last_year":{"ReleaseEvent":1,"DeleteEvent":13,"PullRequestEvent":10,"ForkEvent":2,"IssuesEvent":9,"WatchEvent":20,"IssueCommentEvent":9,"PushEvent":40,"PullRequestReviewEvent":7,"PullRequestReviewCommentEvent":6,"CreateEvent":9}},"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.28491167702735,"created_at":"2024-12-15T21:38:07.042Z","updated_at":"2026-06-15T19:30:15.583Z","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","error-monitoring","factories"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/123","html_url":"https://ruby.ecosyste.ms/projects/123"}