Skip to content
CAI
Software that uses CAICheck a score

ActsAsParanoid/acts_as_paranoid

65.6

Adequate · 19 September 2026

455

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

ActsAsParanoid is a Ruby gem that provides soft-delete functionality for ActiveRecord models, allowing records to be marked as deleted via a timestamp column rather than being permanently removed. It manages the lifecycle of these records through features like recovery, configurable dependent associations, and scoped queries that can optionally include deleted items. The library ensures compatibility across modern Rails versions by maintaining a robust test suite and modular internal structure.

Features

Initial release of ActsAsParanoid gem

This commit introduces the core library for the ActsAsParanoid gem, enabling soft-delete functionality for ActiveRecord models. Users can now call \acts\_as\_paranoid\ on their models to mark records as deleted via a \deleted\_at\ column (supporting time, boolean, or string types) rather than permanently removing them. The implementation includes a default scope to filter out deleted records, configurable options for dependent association recovery and double-tap destruction, and integration with ActiveRecord's callback and reflection systems to handle soft-deleted states transparently.

lib · high confidence

Behavioural changes

ActsAsParanoid 0.11.0: Refined soft-delete logic and :with\_deleted association support

This release restructures the gem into modular files (core, associations, validations, etc.) and introduces a :with\_deleted option for belongs\_to associations, allowing them to include soft-deleted records while preserving automatic inverse association detection. It adds a recover! method with before\_recover/after\_recover callbacks, a double\_tap\_destroys\_fly option to hard-delete on a second destroy call, and a validates\_uniqueness\_of\_without\_deleted validator. The default scope logic is refined to handle string, boolean, and nullable column types correctly, and destroy! now raises ActiveRecord::RecordNotDestroyed on failure.

_lib/acts\_as\paranoid · high confidence

ActsAsParanoid now targets Rails 6.1+ and Ruby 3.1+

This release drops support for older versions of Rails (5.2, 6.0) and Ruby (2.4–3.0). The gem now officially supports Rails 6.1 through 8.1 and Ruby 3.1 through 3.4. Users on older environments must continue using an older version of the gem.

(repo-wide) · high confidence

Test coverage

Added integration tests for paranoid has\_many :through associations; Added legacy test suite for paranoid model behaviors; Establishes centralized test infrastructure and coverage.

Dependencies

Added Appraisal gemfiles for Rails 7.2, 8.0, and 8.1

The project now includes dedicated Appraisal gemfiles to support testing against Rails 7.2.0, 8.0.0, and 8.1.0. These new configuration files (active\_record\_72.gemfile, active\_record\_80.gemfile, and active\_record\_81.gemfile) allow the library to be validated against these specific versions of ActiveRecord and ActiveSupport, ensuring compatibility with newer Rails releases.

gemfiles · high confidence

Update to support Rails 7.2 and 8.0

The gem now requires Ruby 3.2 or higher and targets ActiveRecord and ActiveSupport versions 7.2 through 8.1. Development dependencies have been updated to include RuboCop 1.90, SimpleCov 1.2, and RDoc 8.0, while the Gemfile now explicitly pins SQLite3 and JRuby-compatible RBS versions for the development environment.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 66.

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 53
  • Readiness 74
  • Security 96

Changes since last survey

  • 300 commits — 280 feature/other, 20 fixes

By area

  • (root) — 116 commits
  • (repo) — 111 commits
  • .github/workflows — 23 commits
  • lib/acts_as_paranoid — 20 commits
  • test/test_associations.rb — 7 commits
  • test/legacy — 5 commits
  • test/test_helper.rb — 5 commits
  • test/test_core.rb — 4 commits
  • lib/acts_as_paranoid.rb — 3 commits
  • test/integration — 2 commits
  • .github/dependabot.yml — 1 commit
  • gemfiles/active_record_52.gemfile — 1 commit
  • gemfiles/active_record_edge.gemfile — 1 commit
  • test/test_default_scopes.rb — 1 commit

Notable commits

  • fix: Fix CI Badge
  • fix: Fix Performance/CollectionLiteralInLoop offense
  • fix: Fix Performance/RedundantMerge offense
  • fix: Fix Style/FrozenStringLiteralComment offenses
  • fix: Fix new Style/SuperArguments offense
  • fix: Fix rubocop error
  • fix: Fix rubocop error
  • fix: Fix rubocop errors
  • fix: Fix: Change dependencies from 7.0 to 7.1
  • fix: Merge pull request #256 from ActsAsParanoid/fix-exe-bit
  • fix: Merge pull request #277 from ActsAsParanoid/issue-232-fix-association-building
  • fix: Merge pull request #320 from ActsAsParanoid/fix-new-rubocop-offense
  • fix: Merge pull request #329 from fatkodima/fix-ci
  • fix: Merge pull request #330 from fatkodima/fix-ar-early-loading
  • fix: Merge pull request #333 from ActsAsParanoid/fix-rubocop-offense
  • fix: Merge pull request #350 from tagliala/chore/fix-ci-badge
  • fix: Merge pull request #362 from ActsAsParanoid/fix-build
  • fix: Merge pull request #365 from ActsAsParanoid/fix-rubocop-offenses
  • fix: Revert "Fix rubocop error"
  • fix: fix: wrong version"
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

ActsAsParanoid/acts_as_paranoid was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4b30f2ef17b2cc697e95b69ba3278fffa327b4c3 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.