{"adoption": {"forks": 376, "observed_at": "2026-08-28T04:07:45.733743+00:00", "stars": 3137}, "canonical_url": "https://ross.abutalabs.com/products/factory_bot_rails", "card": {"archived": false, "artifact_type": "library", "description": "Factory Bot ♥ Rails", "domain": ["testing", "web-development", "developer-tools"], "enriched": true, "function": ["testing", "mocking", "data-generation"], "health_score": 90, "homepage": "https://thoughtbot.com/services/ruby-on-rails", "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["thoughtbot/factory_bot_rails"], "name": "thoughtbot/factory_bot_rails", "platform": ["ruby"], "pushed_at": "2026-07-21T12:19:09+00:00", "repo": "thoughtbot/factory_bot_rails", "stars": 3137, "tags": ["fixtures-replacement", "test-data", "factories", "ruby-gem", "rails-integration", "rails"], "topics": [], "urls": [], "use_cases": ["replace Rails fixtures with factories in my test suite", "generate test data for Rails models", "create saved and unsaved instances for RSpec tests", "define multiple factories for the same class like user and admin_user", "auto-load factory definitions from spec/factories", "generate factories instead of fixtures with Rails generators"], "what_it_is": "factory_bot_rails provides Rails integration for Factory Bot, a fixtures replacement library for defining test data with a straightforward factory definition syntax. It supports multiple build strategies (saved instances, unsaved instances, attribute hashes, stubbed objects), factory inheritance, automatic factory definition loading, and Rails generators that produce factories instead of fixtures.", "when_to_avoid": ["you are not using Ruby on Rails (use the plain factory_bot gem instead)", "you prefer simple built-in Rails fixtures or a different test data approach", "your project does not have a test suite that needs object factories"], "when_to_choose": ["you are building a Rails app and need maintainable, flexible test data setup", "you want fixtures replacement with build strategies and factory inheritance", "you use RSpec, Minitest, or Test::Unit and want automatic factory loading and generator integration"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/factory_bot_rails", "repo": "thoughtbot/factory_bot_rails", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:45.733743+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:45:36.608240+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b4c4e9c40a5cbfbbb6c6df053f275a07acf3fa2e4820a74185c514476886b53", "fetched_at": "2026-08-28T04:07:45.733743+00:00", "kind": "readme", "missing": false, "url": "https://github.com/thoughtbot/factory_bot_rails"}, {"content_hash": "a485bc4ffceae04fd0d89c6f5ea413ece43d62874db0840fa87b28c198b53fd0", "fetched_at": "2026-08-29T09:40:48.467495+00:00", "kind": "homepage", "missing": false, "url": "https://thoughtbot.com/services/ruby-on-rails"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 93, "longevity": 100, "rhythm": 22}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5945, "days_push": 43, "days_rel": 362, "gap_med": 157.5, "n_releases_24m": 3}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}