{"adoption": {"forks": 56, "observed_at": "2026-08-28T04:04:41.815205+00:00", "stars": 1427}, "canonical_url": "https://ross.abutalabs.com/products/pretender", "card": {"archived": false, "artifact_type": "library", "description": "Log in as another user in Rails", "domain": ["web-development", "security", "developer-tools"], "enriched": true, "function": ["auth", "middleware"], "health_score": 65, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["ankane/pretender"], "name": "ankane/pretender", "platform": ["ruby"], "pushed_at": "2026-04-02T03:42:50+00:00", "repo": "ankane/pretender", "stars": 1427, "tags": ["rails", "user-impersonation", "authentication", "admin-tools", "web-server"], "topics": [], "urls": [], "use_cases": ["impersonate a user to debug their reported issue", "see exactly what another user sees as an admin", "switch between user accounts during support sessions", "keep audit logs attributed to the true user while impersonating", "add sign-in-as-user functionality to a Rails admin panel"], "what_it_is": "Pretender is a lightweight Ruby gem that lets admins log in as (impersonate) another user in Rails applications. It works with any authentication system like Devise, Authlogic, or Sorcery, and integrates with Action Cable and auditing tools.", "when_to_avoid": ["you are not using Ruby on Rails", "you need impersonation with built-in admin UI or authorization controls", "your framework is not Ruby-based"], "when_to_choose": ["you run a Rails app and admins need to view the app as another user", "you want minimal code changes and compatibility with any auth library", "you need impersonation that works with Action Cable and audit tools"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pretender", "repo": "ankane/pretender", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "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:04:41.815205+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:41.815205+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:37:21.325109+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "76063eca567f839f28c305421c8db4197f69bd712cfab741571e5bd44eb82933", "fetched_at": "2026-08-28T04:04:41.815205+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/pretender"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 75, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4929, "days_push": 153, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}