mbleigh/acts-as-taggable-on
67.5
Adequate · 26 September 2026
1.7k
lines of production code
Ruby
primary language
4
measurements over time
What this system is
Features
Added executable binstubs for development and testing tools
New executable binstubs have been added to the bin directory for rake, rspec, guard, and appraisal. These scripts facilitate running these tools directly from the project's environment, ensuring consistent execution contexts for development workflows and test suites.
bin · high confidence
Added support for ActiveRecord 8.0, 8.1, and edge versions
The project now includes new Gemfile configurations for testing against ActiveRecord 8.0.0, 8.1.0, and the Rails main branch (edge). This allows the library to be validated against these newer versions of ActiveRecord, ensuring compatibility with upcoming releases.
gemfiles · high confidence
New rake tasks for MySQL collation and initializer installation
Added three new rake tasks to the library. The 'acts\_as\_taggable\_on:tag\_names:collate\_bin' and 'acts\_as\_taggable\_on:tag\_names:collate\_ci' tasks allow MySQL users to force binary or case-insensitive collation for tag names, addressing issues with binary-encoded strings. Additionally, the 'acts\_as\_taggable\_on:sharded\_db:install\_initializer' task copies an example initializer file to 'config/initializers/acts-as-taggable-on.rb', providing a template for configuring the base class for tag and tagging models.
lib/tasks · high confidence
Repository restructured with modern tooling and updated changelog
The repository has been restructured to modernize the development environment and documentation. A new CHANGELOG.md has been added to track version history, and the README has been significantly updated with a table of contents and detailed usage examples. Development tooling has been standardized with the addition of a .rspec configuration, a Guardfile for automated testing, and a docker-compose.yml for local database services. Additionally, legacy files such as init.rb, install.rb, and the old README have been removed, and the license file has been renamed to LICENSE.md.
(repo-wide) · high confidence
Removals
Removal of legacy taggable\_on module
The lib/active\_record/acts/taggable\_on.rb file has been removed from the codebase. This deletion eliminates the previous implementation of the 'acts\_as\_taggable\_on' functionality, which previously provided methods for tagging models, finding related tags, and managing tag counts. Users relying on this specific module's API will need to migrate to the current tagging implementation.
_lib/active\record · high confidence
Behavioural changes
Enable tag caching and refactor taggable query logic
The taggable module has been refactored into separate concerns: \Caching\, \Collection\, \Core\, \Ownership\, \Related\, and \TaggedWithQuery\. Caching is now enabled by default, storing tag lists in database columns (e.g., \cached\_tag\_list\) to improve performance. The \tagged\_with\ query logic has been extracted into a dedicated \TaggedWithQuery\ module with separate classes for \AllTagsQuery\, \AnyTagsQuery\, and \ExcludeTagsQuery\. This change improves performance and code maintainability by separating tag retrieval, counting, and filtering logic.
lib/acts-as-taggable-on/taggable · high confidence
Migrate to Zeitwerk autoloading and remove legacy model files
The library now uses Zeitwerk for autoloading, replacing the previous manual load path and autoloading mechanisms. As part of this modernization, the legacy \lib/tag.rb\ and \lib/tagging.rb\ files have been removed, with the functionality consolidated into the new \lib/acts-as-taggable-on.rb\ entry point. This change ensures compatibility with modern Rails versions that rely on Zeitwerk, while maintaining backward compatibility by conditionally loading the Rails engine if available.
lib · high confidence
Refactored tagging architecture with new parser and model classes
The library has been restructured to improve modularity and modernize the codebase. A new \DefaultParser\ class handles tag string parsing, replacing the previous inline logic in \TagList.from\. The \Tag\ and \Tagging\ models have been moved into the \ActsAsTaggableOn\ namespace, with \Tag\ now inheriting from \ActsAsTaggableOn.base\_class.constantize\ and \Tagging\ inheriting from \ActsAsTaggableOn.base\_class.constantize\. The \TagList\ class was refactored to use the new parser and added support for \:parser\ and \:parse\ options in \add\ and \remove\ methods. The \TagsHelper\ was updated to use \taggings\_count\ for the tag cloud calculation. These changes represent a significant internal refactoring of how tags are parsed, stored, and displayed.
lib/acts-as-taggable-on · high confidence
Removal of obsolete Rake task file
The placeholder Rake task file for acts\_as\_taggable\_on has been removed from the codebase, cleaning up unused task definitions.
tasks · high confidence
Fixes
Consolidates acts\_as\_taggable\_on database migrations
The database migration for the acts\_as\_taggable\_on gem has been consolidated into a single file (1\_setup\_acts\_as\_taggable\_on.rb). This change combines the previous separate migrations for the tags and taggings tables, along with their associated indexes and MySQL-specific collation adjustments, into one unified migration step.
db · high confidence
Test coverage
Added comprehensive test coverage for the acts-as-taggable-on gem; Added database schema for internal test suite; Added sample database configuration for testing; Added test fixtures for taggable models; Added test support helpers for database and environment detection; Removed debug.log and schema.rb from spec directory.
Dependencies
ActsAsTaggableOn 2.0.0: Rails 8.0 and Ruby 3.3+ support
The gem has been updated to version 2.0.0, introducing support for Rails 8.0 and requiring Ruby 3.3 or higher. The runtime dependencies have been tightened to ActiveRecord (\>= 8.0, \< 9.0) and Zeitwerk (\>= 2.4, \< 3.0).
(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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 50 → 67 (+17.1)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 99 (-0.9)
- Architecture 94 → 98 (+3.7)
- Maturity 57 → 56 (-0.6)
- Readiness 26 → 58 (+32.7)
- Security 82 → 95 (+13.2)
Resolved (7)
- Coverage not measured — test suite did not build
- Dimension evaluation failed
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- No tests found
- Test reliability not included
New (19)
- Change coupling: core.rb ↔ ownership.rb (lib/acts-as-taggable-on/taggable/core.rb)
- Duplicated block (14 lines × 2) (lib/acts-as-taggable-on/taggable/tagged_with_query/all_tags_query.rb)
- Duplicated block (7 lines × 2) (lib/acts-as-taggable-on/taggable/tagged_with_query/all_tags_query.rb)
- FixmeComment (lib/acts-as-taggable-on/taggable/tagged_with_query/exclude_tags_query.rb)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Highly confusing overlap between tag_list_on, all_tags_list_on, all_tags_on, and tags_on. It is unclear what the semantic difference is between 'tag_list' and 'tags', or the significance of the 'all_' prefix. tag_list_on likely returns a TagList object, while tags_on returns an ActiveRecord::Relation, but the naming does not clearly convey this distinction to the user.
- Inconsistent naming convention for query methods. The methods named and named_like take a single argument, while named_any and named_like_any take a list. However, the prefix 'named' is ambiguous compared to 'find_by_name' or 'where_name'. More critically, the distinction between 'named' (exact match) and 'named_like' (pattern match) is clear, but the suffix '_any' is applied inconsistently in intent vs signature across the domain. A more standard Rails-like convention would be where_name, where_name_like, where_name_in, where_name_like_in.
- Inconsistent naming for cache-related operations. cached_tag_list_on and tag_list_cache_on appear to do the same thing (retrieve cached list). tag_list_cache_set_on is for setting. The duplication between cached_... and ...cache is redundant.
- Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
- Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No dependency advisory monitoring
- Off-boarding risk: anonymized user #1
- Orphaned files with no living knowledge
- TodoComment (lib/acts-as-taggable-on/taggable/collection.rb)
- Workflow token permissions not restricted
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
mbleigh/acts-as-taggable-on 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 26 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 4d58c53e7d455bd07196d024c25b0ca6ff76c179 — 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-7c1cb6328e11.