kpumuk/meta-tags
69.5
Adequate · 19 September 2026
1.3k
lines of production code
Ruby
primary language
1
measurement over time
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.