{"id":123,"name":null,"description":"Simple one-liner tests for common Rails functionality","url":"https://github.com/thoughtbot/shoulda-matchers","last_synced_at":"2026-08-17T00:31:34.583Z","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-08-10T13:14:13.000Z","size":16436,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-10T21:33:18.736Z","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,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2026-08-10T13:15:55.000Z","dependencies_parsed_at":"2026-08-10T21:42:41.689Z","dependency_job_id":null,"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":65,"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":36540176,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-11T02:00:06.871Z","response_time":99,"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":13606109,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.600Z","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":{"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.599Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":416},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.156Z","updated_at":"2026-08-12T05:03:11.241Z","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":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-08-10T21:34:08.628Z","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":{"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.628Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":32256,"maintainers_count":0,"namespaces_count":0,"keywords_count":1649,"github":"guix-mirror","metadata":{"funded_packages_count":882},"icon_url":"https://github.com/guix-mirror.png","created_at":"2026-03-02T16:23:46.981Z","updated_at":"2026-08-12T05:05:19.604Z","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":13407364,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.591Z","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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.591Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":1697,"github":"ubuntu","metadata":{"codename":"noble","funded_packages_count":723},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:45.928Z","updated_at":"2026-08-10T05:07:57.238Z","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":13713347,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.595Z","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":{"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.594Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":2652,"github":"debian","metadata":{"codename":"bookworm","funded_packages_count":809},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.459Z","updated_at":"2026-08-10T05:08:01.819Z","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":13751742,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.602Z","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":{"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.601Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":1429,"github":"ubuntu","metadata":{"codename":"focal","funded_packages_count":464},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:47.233Z","updated_at":"2026-08-10T05:08:00.495Z","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":13567187,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.603Z","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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.603Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":613},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:49.117Z","updated_at":"2026-08-10T05:07:59.632Z","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":13467290,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.621Z","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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.621Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":1440,"github":"ubuntu","metadata":{"codename":"oracular","mirror":"http://old-releases.ubuntu.com/ubuntu","funded_packages_count":890},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.028Z","updated_at":"2026-08-12T05:05:16.435Z","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":13805323,"name":"ruby-shoulda-matchers","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.623Z","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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.623Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":2213,"github":"ubuntu","metadata":{"codename":"mantic","mirror":"http://old-releases.ubuntu.com/ubuntu","funded_packages_count":891},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.636Z","updated_at":"2026-08-10T05:07:58.402Z","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":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-07-27T01:16:49.920Z","created_at":"2026-05-27T02:50:37.406Z","updated_at":"2026-08-10T21:34:08.638Z","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 ruby_targets_ruby40 doc test"},"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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":"v8.0.1","sha":"cf3b3685f2c0f7ebcbad500e064aa7fd8b824f18","kind":"tag","published_at":"2026-06-12T18:36:01.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1/manifests"},{"name":"v8.0.0","sha":"c91c61cedd60727e28bd0dcdb49bc79867787efc","kind":"tag","published_at":"2026-06-12T14:46:27.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0/manifests"},{"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-08-10T21:34:08.638Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":19519,"maintainers_count":0,"namespaces_count":174,"keywords_count":1054,"github":"gentoo","metadata":{"snapshot_url":"https://distfiles.gentoo.org/snapshots/portage-latest.tar.xz","funded_packages_count":450},"icon_url":"https://github.com/gentoo.png","created_at":"2026-05-26T08:59:24.155Z","updated_at":"2026-08-12T05:05:20.132Z","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":13531008,"name":"ruby-shoulda-matchers","ecosystem":"debian","description":null,"homepage":"https://github.com/thoughtbot/shoulda-matchers","licenses":"mit","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-08-10T21:34:08.639Z","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":{"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.639Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":759,"github":"debian","metadata":{"codename":"bullseye","funded_packages_count":456},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.702Z","updated_at":"2026-08-10T05:08:02.664Z","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":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-08-10T21:34:08.654Z","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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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":"v8.0.1","sha":"cf3b3685f2c0f7ebcbad500e064aa7fd8b824f18","kind":"tag","published_at":"2026-06-12T18:36:01.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1/manifests"},{"name":"v8.0.0","sha":"c91c61cedd60727e28bd0dcdb49bc79867787efc","kind":"tag","published_at":"2026-06-12T14:46:27.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0/manifests"},{"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-08-10T21:34:08.654Z","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":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":1985,"github":"debian","metadata":{"codename":"trixie","funded_packages_count":1208},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.448Z","updated_at":"2026-08-12T05:05:15.557Z","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":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-08-10T21:34:08.675Z","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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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":"v8.0.1","sha":"cf3b3685f2c0f7ebcbad500e064aa7fd8b824f18","kind":"tag","published_at":"2026-06-12T18:36:01.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1/manifests"},{"name":"v8.0.0","sha":"c91c61cedd60727e28bd0dcdb49bc79867787efc","kind":"tag","published_at":"2026-06-12T14:46:27.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0/manifests"},{"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-08-10T21:34:08.674Z","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":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":1498,"github":"ubuntu","metadata":{"codename":"jammy","funded_packages_count":559},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:46.486Z","updated_at":"2026-08-10T05:07:56.140Z","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":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-08-11T22:03:45.952Z","created_at":"2022-04-06T10:53:16.637Z","updated_at":"2026-08-11T22:03:45.953Z","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":268316581,"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":210473,"maintainers_count":69451,"namespaces_count":0,"keywords_count":19391,"github":"rubygems","metadata":{"funded_packages_count":7917},"icon_url":"https://github.com/rubygems.png","created_at":"2022-04-04T15:19:23.446Z","updated_at":"2026-08-12T05:03:25.267Z","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":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":57,"first_release_published_at":"2023-12-03T01:58:51.113Z","latest_release_published_at":"2026-06-12T18:34:44.000Z","latest_release_number":"v8.0.1+incompatible","last_synced_at":"2026-08-11T22:03:46.927Z","created_at":"2023-12-03T01:58:14.507Z","updated_at":"2026-08-11T22:03:46.927Z","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":"2026-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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":"v8.0.1","sha":"cf3b3685f2c0f7ebcbad500e064aa7fd8b824f18","kind":"tag","published_at":"2026-06-12T18:36:01.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1/manifests"},{"name":"v8.0.0","sha":"c91c61cedd60727e28bd0dcdb49bc79867787efc","kind":"tag","published_at":"2026-06-12T14:46:27.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0/manifests"},{"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-08-10T21:34:08.658Z","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":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"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":2263068,"maintainers_count":0,"namespaces_count":837425,"keywords_count":122443,"github":"golang","metadata":{"funded_packages_count":65362,"sync_missing_packages_cursor":{"timestamp":"2026-08-12T00:18:10.975284Z","path":"github.com/fhunleth/muontrap","version":"v0.2.1"},"rate_limit":1},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-08-12T12:33:12.528Z","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":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-08-11T22:03:47.279Z","created_at":"2025-10-07T05:57:04.844Z","updated_at":"2026-08-11T22:08:35.061Z","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-08-10T13:14:13.000Z","size":16436,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-10T21:33:18.736Z","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,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"github":"thoughtbot"}},"created_at":"2010-12-15T22:41:52.000Z","updated_at":"2026-08-10T13:15:55.000Z","dependencies_parsed_at":"2026-08-10T21:42:41.689Z","dependency_job_id":null,"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":65,"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":36540176,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-11T02:00:06.871Z","response_time":99,"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":"v8.0.1","sha":"cf3b3685f2c0f7ebcbad500e064aa7fd8b824f18","kind":"tag","published_at":"2026-06-12T18:36:01.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.1","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.1/manifests"},{"name":"v8.0.0","sha":"c91c61cedd60727e28bd0dcdb49bc79867787efc","kind":"tag","published_at":"2026-06-12T14:46:27.000Z","download_url":"https://codeload.github.com/thoughtbot/shoulda-matchers/tar.gz/v8.0.0","html_url":"https://github.com/thoughtbot/shoulda-matchers/releases/tag/v8.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/thoughtbot/shoulda-matchers@v8.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/tags/v8.0.0/manifests"},{"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-08-11T22:08:35.060Z","dependent_packages_count":0,"downloads":268316581,"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-08-10T21:31:09.054Z","issues_count":97,"pull_requests_count":215,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":10894257.645,"issues_closed_count":66,"pull_requests_closed_count":200,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.572093023255814,"merged_pull_requests_count":168,"bot_issues_count":0,"bot_pull_requests_count":8,"past_year_issues_count":12,"past_year_pull_requests_count":31,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":444526.5483870968,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":31,"past_year_pull_request_authors_count":10,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.2903225806451613,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":1,"past_year_merged_pull_requests_count":29,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"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":195055,"maintainers_count":68463,"namespaces_count":0,"keywords_count":18999,"github":"gem-coop","metadata":{"funded_packages_count":7542},"icon_url":"https://github.com/gem-coop.png","created_at":"2025-10-06T17:24:20.932Z","updated_at":"2026-08-12T05:05:26.854Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/namespaces"}},{"id":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-08-10T21:34:08.625Z","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":{"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-07-24T16:28:45.000Z","size":16433,"stargazers_count":3583,"open_issues_count":41,"forks_count":917,"subscribers_count":75,"default_branch":"main","last_synced_at":"2026-08-03T18:06:43.225Z","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-07-27T21:36:34.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":65,"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":36319350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-05T02:00:06.619Z","response_time":104,"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"}},"repo_metadata_updated_at":"2026-08-10T21:34:08.625Z","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":["https://github.com/sponsors/thoughtbot"],"critical":null,"issue_metadata":{"last_synced_at":"2026-08-09T21:01:28.828Z","issues_count":97,"pull_requests_count":214,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":11003608.181818182,"issues_closed_count":66,"pull_requests_closed_count":198,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.5794392523364487,"merged_pull_requests_count":167,"bot_issues_count":0,"bot_pull_requests_count":7,"past_year_issues_count":12,"past_year_pull_requests_count":30,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":470455.6551724138,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":29,"past_year_pull_request_authors_count":9,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.3,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":28,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/thoughtbot%2Fshoulda-matchers/issues","maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"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":19690,"maintainers_count":0,"namespaces_count":43,"keywords_count":363,"github":"pkgsrc","metadata":{"funded_packages_count":332},"icon_url":"https://github.com/pkgsrc.png","created_at":"2026-05-26T08:59:24.518Z","updated_at":"2026-08-12T05:03:04.451Z","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"}}],"commits":{"id":3396,"full_name":"thoughtbot/shoulda-matchers","default_branch":"main","total_commits":2054,"total_committers":342,"total_bot_commits":18,"total_bot_committers":3,"mean_commits":6.005847953216374,"dds":0.7117818889970788,"past_year_total_commits":35,"past_year_total_committers":10,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":3.5,"past_year_dds":0.3142857142857143,"last_synced_at":"2026-08-16T00:02:06.306Z","last_synced_commit":"79cdfbc326e97c9b43991b644434ca53c1f62c4c","created_at":"2023-03-07T09:17:33.024Z","updated_at":"2026-08-16T00:02:05.441Z","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":60},{"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":"Amalrik Maia","email":"amalrik.maia@gmail.com","login":"amalrik","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":"Lawrence Pit","email":"lawrence.pit@gmail.com","login":"lawrencepit","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":"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":"Steve Madsen","email":"steve@lightyearsoftware.com","login":"sjmadsen","count":2},{"name":"Aditya Kapoor","email":"aditya.kapoor@vinsol.com","login":null,"count":2},{"name":"Adarsh Pandit","email":"adarsh@thoughtbot.com","login":null,"count":2},{"name":"Adam89","email":"adam@apprentice.io","login":null,"count":2},{"name":"Adam89","email":"adam.dev89@gmail.com","login":null,"count":2},{"name":"Jason Morrison","email":"jmorrison@thoughtbot.com","login":null,"count":2},{"name":"Igor Zubkov","email":"zubkov@mlsdev.com","login":null,"count":2},{"name":"Fujimura Daisuke","email":"dfujimura@aiming-inc.com","login":null,"count":2},{"name":"Dan Croak","email":"dan@thoughtbot.com","login":null,"count":2},{"name":"Stefanni Brasil","email":"stefannibrasil@gmail.com","login":null,"count":2},{"name":"jmpage","email":"jenpage@ebay.com","login":null,"count":2},{"name":"barelyknown","email":"sean@buytruckload.com","login":null,"count":2},{"name":"Francisco","email":"78037877+franlocus","login":"franlocus","count":2},{"name":"Stef Schenkelaars","email":"stef.schenkelaars@gmail.com","login":"StefSchenkelaars","count":2},{"name":"Scott Albertson","email":"ascottalbertson@gmail.com","login":"salbertson","count":2},{"name":"Aaron Vasquez","email":"aaronvasquez1@gmail.com","login":"AaronVasquez","count":1},{"name":"Aaron Gibralter","email":"aaron.gibralter@gmail.com","login":"agibralter","count":1},{"name":"Andrew Bromwich","email":"a.bromwich@gmail.com","login":"abrom","count":1},{"name":"Andrey Deryabin","email":"deriabin@gmail.com","login":"aderyabin","count":1},{"name":"André Moreira","email":"andre.lumor1@gmail.com","login":"andreLumor","count":1},{"name":"Anthony Williams","email":"hi@antw.me","login":"antw","count":1},{"name":"Antonio Terceiro","email":"terceiro@softwarelivre.org","login":"terceiro","count":1},{"name":"Artin Boghosian","email":"artinboghosian@gmail.com","login":"artinboghosian","count":1},{"name":"Artiom Diomin","email":"kron82@gmail.com","login":"kron4eg","count":1},{"name":"Ashley Lake","email":"39317653+lake-effect","login":"lake-effect","count":1},{"name":"August Lilleaas","email":"augustlilleaas@gmail.com","login":"augustl","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":"Ana María Martínez Gómez","email":"ammartinez@suse.de","login":"Ana06","count":1},{"name":"Mateusz Swiszcz","email":"mateusz.swiszcz@akra.net","login":null,"count":1},{"name":"Lucas D'Avila","email":"lucas@lucasdavi.la","login":null,"count":1},{"name":"Gavin Stark","email":"g.stark@realdigitalmedia.com","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":"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":"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":"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":"Derek Prior + Elliot Winkler","email":"dev+dp+ew@thoughtbot.com","login":null,"count":1},{"name":"Owen Davies","email":"git@obduk.com","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":"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":"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":"Recoordinate","email":"296084221+latent-9","login":"latent-9","count":1},{"name":"Roberto Romero","email":"sildurin@gmail.com","login":"sildur","count":1},{"name":"Leo Arnold","email":"leoarnold","login":"leoarnold","count":1},{"name":"Leo Nikkilä","email":"hello@lnikki.la","login":"lnikkila","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":"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":"Rodrigo A Chaves","email":"rodriggo.chaves@gmail.com","login":"rodriggochaves","count":1},{"name":"Victor Z","email":"shaggyone","login":"shaggyone","count":1},{"name":"Panupan Sriautharawong","email":"lionpeal@yahoo.com","login":"panupan","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":"vfrride","email":"jeff@jpcutler.net","login":"vfrride","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":"Tyson Gach","email":"tyson@tysongach.com","login":"tysongach","count":1},{"name":"Victor Andrey","email":"victorvaot@gmail.com","login":"vaot","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":"Ben J Woodcroft","email":"donttrustben@gmail.com","login":"wwood","count":1},{"name":"James Adam","email":"james@lazyatom.com","login":"lazyatom","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":"Savater Sebastien","email":"savater.sebastien@gmail.com","login":null,"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":"Connor Shea","email":"2977353+connorshea","login":"connorshea","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":"Gaurav Sharma","email":"gaurav.qwe@gmail.com","login":"gauravs","count":1},{"name":"Jason Morrison","email":"jason.p.morrison@gmail.com","login":"jasonm","count":1},{"name":"JasonM23","email":"jasonm23","login":"jasonm23","count":1},{"name":"Jeff Dutil","email":"jdutil21@gmail.com","login":"JDutil","count":1},{"name":"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":"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":"Yuriy Orlov","email":"orlov1991@gmail.com","login":"yaorlov","count":1},{"name":"Gaëtan Masson","email":"gaetanm","login":"gaetanm","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":"Michael Glass","email":"me@mike.is","login":"michaelglass","count":1},{"name":"Knut I. Stenmark","email":"knut.stenmark@gmail.com","login":"stonefield","count":1}],"past_year_committers":[{"name":"Matheus Sales","email":"matheus_usales@hotmail.com","login":"matsales28","count":24},{"name":"Stefanni Brasil","email":"stefannibrasil@proton.me","login":"stefannibrasil","count":3},{"name":"Recoordinate","email":"296084221+latent-9","login":"latent-9","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":"Connor Shea","email":"2977353+connorshea","login":"connorshea","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-08-17T00:00:06.017Z","repositories_count":6680358,"commits_count":957667090,"contributors_count":40538184,"owners_count":1343447,"committers_count":3318578,"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-08-14T23:31:46.407Z","status":"error","issues_count":97,"pull_requests_count":215,"avg_time_to_close_issue":23284314.939393938,"avg_time_to_close_pull_request":10894257.645,"issues_closed_count":66,"pull_requests_closed_count":200,"pull_request_authors_count":71,"issue_authors_count":85,"avg_comments_per_issue":3.11340206185567,"avg_comments_per_pull_request":1.572093023255814,"merged_pull_requests_count":168,"bot_issues_count":0,"bot_pull_requests_count":8,"past_year_issues_count":12,"past_year_pull_requests_count":31,"past_year_avg_time_to_close_issue":1942021.6,"past_year_avg_time_to_close_pull_request":444526.5483870968,"past_year_issues_closed_count":10,"past_year_pull_requests_closed_count":31,"past_year_pull_request_authors_count":10,"past_year_issue_authors_count":10,"past_year_avg_comments_per_issue":1.3333333333333333,"past_year_avg_comments_per_pull_request":0.2903225806451613,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":1,"past_year_merged_pull_requests_count":29,"created_at":"2023-05-12T17:14:01.644Z","updated_at":"2026-08-14T23:31:46.408Z","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":74,"CONTRIBUTOR":12,"COLLABORATOR":8,"MEMBER":3},"pull_request_author_associations_count":{"CONTRIBUTOR":85,"COLLABORATOR":64,"NONE":40,"MEMBER":26},"issue_authors":{"VSPPedro":6,"matsales28":4,"fabriciobonjorno":2,"mochetts":2,"mjankowski":2,"sarobakhtiyari":2,"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,"ArcDlrt":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,"calebhearth":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,"Samsinite":1,"TamerShlash":1,"stevenou":1,"pjpires":1,"merof-code":1,"dbforge":1,"aliaksandrb":1,"abhinavramesh8":1,"dgmstuart":1,"jarenas9539":1,"burkematthew":1,"runephilosof-abtion":1,"osingaatje":1,"sshaw":1,"josemigallas":1,"ElamT":1,"thedean7":1,"Jonathandeveloper19":1,"mcmire":1,"thisismydesign":1,"professor":1,"nbibler":1,"HeitorMC":1,"brett-puddick":1,"Skulli":1},"pull_request_authors":{"matsales28":64,"VSPPedro":26,"github-actions[bot]":8,"stefannibrasil":7,"technicalpickles":6,"HeitorMC":5,"voxik":5,"theodorton":4,"neilvcarvalho":3,"amalrik":3,"JuzerShakir":2,"freesteph":2,"jeduardo824":2,"spdawson":2,"franlocus":2,"clemens":2,"vsppedro":2,"hanachin":2,"mswiszcz":2,"theforestvn88":2,"dougmrqs":2,"mjankowski":2,"EduardoSCosta":2,"lake-effect":2,"hotoolong":2,"ilianah":2,"pjpires":2,"Earlopain":2,"yelvert":2,"rhannequin":2,"asilano":2,"ioquatix":2,"StefSchenkelaars":2,"sarahraqueld":1,"ohbarye":1,"dewyze":1,"LarytheLord":1,"aditya-kapoor":1,"y-yagi":1,"antifun":1,"HoangMinhBK":1,"vaot":1,"andreLumor":1,"jarenas9539":1,"mi-wada":1,"MorganBat":1,"stonefield":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,"connorshea":1,"latent-9":1,"Kutomore":1,"olleolleolle":1,"abrom":1,"tagliala":1,"mcmire":1,"vyrak":1,"callahat":1,"LukasBarry":1,"maxehmookau":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-16T00:00:06.928Z","repositories_count":16037326,"issues_count":40239629,"pull_requests_count":130409287,"authors_count":11454335,"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":19,"CONTRIBUTOR":12},"past_year_issue_authors":{"matsales28":3,"amalrik":1,"dev-mori":1,"felix-as":1,"garrettgregor":1,"jasonkarns":1,"mjankowski":1,"PikachuEXE":1,"Samsinite":1,"stefannibrasil":1},"past_year_pull_request_authors":{"matsales28":19,"stefannibrasil":4,"artinboghosian":1,"brendanthomas1":1,"connorshea":1,"github-actions[bot]":1,"HoangMinhBK":1,"LarytheLord":1,"latent-9":1,"MatheusRich":1},"maintainers":[{"login":"matsales28","count":62,"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":22,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matsales28"}]},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":16,"PullRequestEvent":22,"ForkEvent":12,"IssuesEvent":15,"WatchEvent":72,"IssueCommentEvent":38,"PushEvent":52,"PullRequestReviewCommentEvent":8,"PullRequestReviewEvent":11,"CreateEvent":12},"last_year":{"ReleaseEvent":1,"DeleteEvent":14,"PullRequestEvent":4,"ForkEvent":2,"IssuesEvent":8,"WatchEvent":16,"IssueCommentEvent":9,"PushEvent":41,"PullRequestReviewEvent":7,"PullRequestReviewCommentEvent":6,"CreateEvent":10}},"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.29874247742734,"created_at":"2024-12-15T21:38:07.042Z","updated_at":"2026-08-17T00:31:34.606Z","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 8.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 8.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.3+, Rails\n7.2+, 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- For Ruby \u003c 3.3 and Rails \u003c 7.2 compatibility, please use [v7.0.1][v7.0.1].\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[v7.0.1]: https://github.com/thoughtbot/shoulda-matchers/tree/v7.0.1\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","activejob","mvc","rubygems","crash-reporting","rack","sinatra","sidekiq","error-monitoring","thoughtbot"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/123","html_url":"https://ruby.ecosyste.ms/projects/123"}