{"adoption": {"forks": 91, "observed_at": "2026-08-28T04:03:56.866624+00:00", "stars": 1195}, "canonical_url": "https://ross.abutalabs.com/products/active_attr", "card": {"archived": false, "artifact_type": "library", "description": "What ActiveModel left out", "domain": ["web-development", "backend", "developer-tools"], "enriched": true, "function": ["orm", "serialization", "form-handling"], "health_score": 62, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["cgriego/active_attr"], "name": "cgriego/active_attr", "platform": ["ruby", "jvm"], "pushed_at": "2026-03-01T18:52:16+00:00", "repo": "cgriego/active_attr", "stars": 1195, "tags": ["activemodel", "plain-ruby-models", "attributes", "typecasting", "rails"], "topics": ["activemodel", "rails", "models"], "urls": [], "use_cases": ["create plain ruby models with activemodel compatibility", "define typed attributes with defaults on non-database models", "build form objects that behave like active record models", "add attribute typecasting to plain old ruby objects", "make service objects satisfy the activemodel api", "extract model logic out of active record into lightweight classes"], "what_it_is": "ActiveAttr is a Ruby gem providing composable modules that let you build plain Ruby objects with ActiveModel-compatible features like attribute definitions, defaults, typecasting, and querying. It fills the gaps in ActiveModel so POROs can behave like ORM-backed models without a database.", "when_to_avoid": ["you're already using ActiveRecord or another full ORM with persistence", "you need a lightweight modern alternative like Virtus or dry-types with different APIs", "your project doesn't use Ruby"], "when_to_choose": ["you need ActiveModel API compliance without ActiveRecord or a database", "you want composable attribute functionality instead of a full ORM", "you're building form objects, service objects, or domain models in a Rails app"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/active_attr", "repo": "cgriego/active_attr", "role": "main", "score": 64}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "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:03:56.866624+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:56.866624+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:22:05.373930+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cf4c60032567c3127285a38ff34ffa7077a64b859dc9141c4a61d04da838b11f", "fetched_at": "2026-08-28T04:03:56.866624+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cgriego/active_attr"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 70, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5452, "days_push": 185, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 64, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}