Skip to content
CAI
Software that uses CAICheck a score

kpumuk/meta-tags

69.5

Adequate · 19 September 2026

1.3k

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is the MetaTags Ruby gem, a library for managing SEO metadata in Rails applications. It provides a modular architecture for configuring, rendering, and normalizing meta tags, including support for Open Graph and canonical links. The gem ensures compatibility across multiple Rails versions and offers developer tooling such as RBS type signatures, automated setup generators, and security auditing scripts.

How it got here

2008–2009 — Modular architecture and tooling modernization

5 changes.

The MetaTags gem underwent a significant architectural restructuring, transitioning from a monolithic module to a modular design with dedicated classes for configuration, rendering, and tag handling. This refactoring was accompanied by a comprehensive modernization of the development environment, including the adoption of GitHub Actions, RSpec, and static type checking with Steep. The period also involved updating dependencies to require Ruby 3.0+ and expanding the test suite to ensure the stability of the new modular components.

2014–2016 — test coverage and tooling improvements

4 changes.

This period focused on enhancing the project's reliability and developer experience through comprehensive RSpec test coverage for the MetaTags ViewHelper and TextNormalizer classes. It also introduced new bin scripts for lockfile auditing, interactive console access, and project setup, alongside the addition of a signing certificate for secure gem distribution.

2017–2022 — Rails compatibility and developer experience

5 changes.

This period focused on enhancing the developer experience by introducing a Rails generator for configuration and comprehensive RBS type signatures for static analysis. Concurrently, the project expanded its compatibility matrix to support Rails versions up to 8.1, implementing specific dependency pinning to ensure stability across the evolving framework landscape.

Features

Added RBS type signatures for the MetaTags gem

This change introduces a comprehensive set of RBS type signature files for the MetaTags gem, covering the core library, configuration, renderer, controller and view helpers, and internal components like tags and text normalization. These signatures define the public API and internal structures, enabling static type checking with tools like Steep and improving IDE support for developers using the gem.

sig · high confidence

Added Rails generator for MetaTags configuration

Users can now run the MetaTags install generator to automatically copy the default configuration initializer into their Rails application, simplifying the setup process for the library.

_lib/generators/meta\tags · high confidence

New bin scripts for lockfile auditing, console, and setup

Added three new executable scripts to the bin directory: bin/audit-lockfiles, bin/console, and bin/setup. The audit-lockfiles script automates security auditing of development lockfiles using bundle-audit, enforcing a strict whitelist of known vulnerabilities (specifically handling exceptions for EOL Rails versions and Nokogiri issues on Ruby 3.1) and rejecting any unlisted advisories. The bin/console script provides a standardized environment for interactive experimentation with the gem, requiring bundler setup and IRB. The bin/setup script automates initial project configuration by running bundle install.

bin · high confidence

Behavioural changes

Added new signing certificate for gem distribution

A new public certificate (kpumuk.pem) has been added to the repository to support gem signing. This certificate is valid from September 29, 2025, to September 29, 2026, and is associated with the identity [e-mail redacted], ensuring that future gem releases can be cryptographically signed and verified using this key.

certs · high confidence

Expanded Rails compatibility matrix with version-specific dependency pinning

The gemfiles directory now includes dedicated Appraisal configurations for Rails 6.1, 7.0, 7.1, 7.2, 8.0, 8.1, and the Rails edge branch. To ensure stability across these versions, the gemfiles explicitly pin or constrain specific dependencies: \zeitwerk\ is locked to \\~\> 2.6.18\, \minitest\ to \\< 6.0\ (except in Rails 8.0+ where it allows 6.0), and \parallel\ to \\< 2.0\. Rails 6.1 and 7.0 gemfiles additionally require \base64\, \bigdecimal\, \logger\, and \mutex\_m\ as explicit dependencies, while Rails 7.1 and 7.2 gemfiles pin \securerandom\ to \0.3.0\ and constrain \connection\_pool\ and \erb\. Rails 8.0 and 8.1 gemfiles introduce \bundler-audit\ and remove older constraint gems, reflecting the evolving requirements of the Rails framework.

gemfiles · high confidence

MetaTags gem restructured with modular components and configuration

The library has been refactored from a single monolithic module into a modular structure with separate classes for configuration, rendering, and tag handling. A new configuration object allows users to customize gem behavior via \MetaTags.configure\, and the previous controller helper using \alias\_method\_chain\ has been replaced by a modern module inclusion approach. The main entry point now requires the version, configuration, and all component modules, providing a cleaner API for managing meta tags in Rails applications.

lib · high confidence

MetaTags gem version 2.24.0 release

This release updates the MetaTags gem to version 2.24.0. The diff shows a complete restructuring of the library's internal architecture, introducing dedicated classes for configuration (\Configuration\), tag rendering (\Tag\, \ContentTag\, \Renderer\), and text normalization (\TextNormalizer\). It also refactors the integration with Rails by moving initialization into a \Railtie\ and separating controller and view helpers. These changes provide a more modular and maintainable codebase while preserving the existing public API for setting and displaying meta tags.

_lib/meta\tags · high confidence

Modernized development tooling and configuration

The project has replaced its legacy development setup with modern standards: code style is now enforced by StandardRB (via \.rubocop.yml\) instead of CodeClimate, and the build system has switched from Travis CI to GitHub Actions. RSpec is now the primary test runner (configured via \.rspec\), and static type checking is introduced using Steep and RBS. The default development Ruby version is set to 3.3, and multi-version Rails testing is managed via Appraisals. Additionally, the documentation format has moved from RDoc to YARD (with strict linting via \.yard-lint.yml\), and the repository now includes a Code of Conduct and Security policy.

(repo-wide) · high confidence

New default configuration template for MetaTags

The library now provides a new default configuration template (\config/initializers/meta\_tags.rb\) that users can generate via the Rails generator. This template documents and sets defaults for key configuration options, including a 300-character limit for page descriptions, boundary-aware array truncation, the ability to add HTML attributes to the title tag, and options to control whether meta tags are self-closing or open. It also includes settings for minifying output, handling natural separators during truncation, and resolving symbolic references in arrays, giving users a comprehensive starting point for customizing SEO metadata behavior.

_lib/generators/meta\tags/templates · high confidence

Test coverage

Added comprehensive RSpec test suite for MetaTags; Added test coverage for text normalization logic; Added test infrastructure for MetaTags gem integration; Comprehensive test coverage for MetaTags ViewHelper.

Dependencies

Update development dependencies and enforce Ruby 3.0+ requirement

The gemspec now requires Ruby 3.0.0 or higher and lists all dependencies directly, including a runtime dependency on ActionPack \>= 6.0.0. Development dependencies have been updated to include Steep \~\> 1.10.0, Standard \~\> 1.31, standard-rails \~\> 1.6, and RSpec \~\> 3.13.0, while the Gemfile now delegates dependency management to the gemspec and adds yard-lint \~\> 1.4 for MRI 3.3.

(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 70.

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 61
  • Readiness 82
  • Security 86

Changes since last survey

  • 300 commits — 266 feature/other, 34 fixes

By area

  • (repo) — 116 commits
  • .github/workflows — 73 commits
  • (root) — 60 commits
  • lib/meta_tags — 17 commits
  • gemfiles/rails_6.0.gemfile.lock — 14 commits
  • sig/lib — 6 commits
  • gemfiles/rails_6.1.gemfile.lock — 5 commits
  • spec/view_helper — 3 commits
  • certs/kpumuk.pem — 2 commits
  • spec/support — 2 commits
  • gemfiles/rails_6.1.gemfile — 1 commit
  • spec/generators — 1 commit

Notable commits

  • fix: Document lowercase title fix
  • fix: Document robots none canonical suppression fix
  • fix: Fix README rendering examples
  • fix: Fix canonical suppression for custom noindex directives
  • fix: Fix canonical suppression for empty noindex lists
  • fix: Fix custom robots directive serialization
  • fix: Fix description limit RBS nullability
  • fix: Fix lowercase title option handling
  • fix: Fix packaged Rails RBS interfaces
  • fix: Fix page title default site handling
  • fix: Fix title helper return value
  • fix: Fix title tag attribute option types
  • fix: Fix zizmor ref-version-mismatch comments
  • fix: Fixed build on older older Rails with newer Ruby
  • fix: Fixed missing commit list links in the Changelog file
  • fix: Merge pull request #362 from kpumuk/fix/codeql-csrf-warning
  • fix: Merge pull request #404 from 1t1sCooL/fix-dead-links
  • fix: Merge pull request #405 from kpumuk/fix-empty-noindex-canonical
  • fix: Merge pull request #406 from kpumuk/fix-custom-robots-directives
  • fix: Merge pull request #407 from kpumuk/fix/steep-rake-status
  • …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

kpumuk/meta-tags 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 776a14e503645e4075e1692d906cb8b48f2bd8a0 — 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-13a154b7f5d1.