Skip to content
CAI
Software that uses CAICheck a score

Mange/roadie

71.3

Strong · 19 September 2026

1.7k

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Roadie is a Ruby library designed to inline CSS styles into HTML documents, primarily for use in email generation. It features a modular architecture with pluggable asset providers for fetching stylesheets from various sources and configurable URL rewriters. The system handles the transformation pipeline, including specificity management and media query merging, while supporting multiple output formats and caching strategies.

How it got here

2009 — Rebranding to Roadie

4 changes.

The project was rebranded from Shemail to Roadie, involving a repository restructuring with modern tooling and a migration to RSpec 3. This period saw the removal of legacy inline CSS styling features and the introduction of a new provider system and asset scanner.

2010–2011 — Roadie 5.3.1 internal rewrite

4 changes.

This period focused on a comprehensive internal refactor of the Roadie library, introducing a new architecture with dedicated domain objects and a flexible asset provider system. The work included implementing new URL handling, transformation pipelines, and HTML5 support, accompanied by the establishment of a robust development environment and an extensive RSpec test suite to verify the new components.

2013–2026 — Test coverage and dependency compatibility

4 changes.

This period focused on expanding test coverage by adding shared examples for asset providers, cache stores, and URL rewriters, alongside new CSS styling fixtures. It also established continuous integration support for multiple major versions of the css\_parser dependency to ensure backward and forward compatibility.

Removals

Removal of inline CSS styling feature

The inline styles capability for Shemail has been removed. The \lib/shemail/inline\_styles.rb\ file, which previously injected CSS styles directly into HTML email parts using Nokogiri and CssParser, is no longer present. Users relying on automatic inline style application for their emails will no longer have this feature available.

lib/shemail · high confidence

Behavioural changes

Renamed gem from Shemail to Roadie

The library has been renamed from Shemail to Roadie. The old entry point \lib/shemail.rb\ has been removed and replaced with \lib/roadie.rb\, which now serves as the main module and requires the updated set of components including the new provider system, asset scanner, and URL rewriters.

lib · high confidence

Repository restructured with modern tooling and updated documentation

The repository has been reorganized to support modern development workflows. Configuration files for \.gitignore\, RuboCop (using \standard\), Solargraph, and StandardRB have been added, with the Ruby target version set to 2.7. Documentation has been migrated from Textile to Markdown (\README.md\), and the Changelog has been formalized in \Changelog.md\. Legacy files such as \init.rb\ and \readme.textile\ have been removed, and the license file has been renamed to \LICENSE\. The gem is now in passive maintenance mode.

(repo-wide) · high confidence

Roadie 5.3.1: Complete internal rewrite with new asset provider system and URL handling

This release introduces a comprehensive internal refactor of the Roadie library, updating the gem to version 5.3.1. The core inlining engine has been replaced with a new architecture featuring dedicated domain objects for CSS (Stylesheet, StyleBlock, StyleProperty, Selector) and a new AssetScanner that extracts styles from both inline \<style\> tags and \<link\> elements. Asset retrieval is now handled by a flexible provider system, including a new FilesystemProvider, NetHttpProvider (with host whitelisting), PathRewriterProvider, CachedProvider, and NullProvider, all managed via a ProviderList. URL rewriting has been separated into its own UrlGenerator and UrlRewriter classes, which now correctly handle scheme-less URLs and anchor links. The transformation pipeline is exposed via before\_transformation and after\_transformation callbacks, and the Document class now supports HTML5 doctypes by default, XHTML/XML output modes, and options to keep uninlinable CSS or merge media queries.

lib/roadie · high confidence

Test coverage

Added RSpec shared examples for asset providers and cache stores; Added comprehensive test suite for Roadie core components; Added shared test suites for asset providers and URL rewriters; Added test fixtures for CSS styling scenarios; Extracted custom RSpec matchers and added a test asset provider; Migrated test suite to RSpec 3 and modernized test infrastructure.

Dependencies

Add CI gemfiles for css\_parser 1.x, 2.x, and 3.x compatibility

New gemfiles have been added to the gemfiles directory to explicitly pin the css\_parser dependency to major versions 1, 2, and 3 (specifically \~\> 1.4, \~\> 2.0, and \~\> 3.0). These files evaluate the root Gemfile and are intended to enable continuous integration testing across these different major versions of the css\_parser library, ensuring backward and forward compatibility.

gemfiles · high confidence

Initial gem specification and development environment setup

The project introduces its core gemspec (roadie.gemspec) and a Gemfile to define dependencies and development tooling. The gem requires Ruby 3.3 or higher and depends on nokogiri (\~\> 1.15) and css\_parser (\>= 1.4, \< 4.0). Development dependencies include rake, rspec (\~\> 3.0), rspec-collection\_matchers (\~\> 1.0), webmock (\~\> 3.0), and standardrb, while the Gemfile adds simplecov and solargraph for CI and local development respectively.

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

Lenses

  • Code Health 100
  • Architecture 100
  • Maturity 55
  • Readiness 74
  • Security 96

Changes since last survey

  • 300 commits — 268 feature/other, 32 fixes

By area

  • (root) — 152 commits
  • lib/roadie — 63 commits
  • (repo) — 43 commits
  • .github/workflows — 13 commits
  • spec/lib — 11 commits
  • spec/support — 5 commits
  • gemfiles/css_parser_1.gemfile — 3 commits
  • spec/spec_helper.rb — 2 commits
  • .github/dependabot.yml — 1 commit
  • autotest/discover.rb — 1 commit
  • gemfiles/css_parser_1.gemfile.lock — 1 commit
  • gemfiles/css_parser_2.gemfile — 1 commit
  • lib/roadie.rb — 1 commit
  • spec/fixtures — 1 commit
  • spec/integration_spec.rb — 1 commit
  • spec/railsapps — 1 commit

Notable commits

  • fix: ! Fix copy & paste error in gemspec
  • fix: ! Fix issues reported by standardrb
  • fix: ! Fix issues reported by standardrb
  • fix: ! Fix missing gem source in new gemfiles
  • fix: ! Fix new gemfiles missing stuff that's only in root Gemfile
  • fix: ! Fix standardrb violations
  • fix: ! Fix standardrb violations
  • fix: "Fix" CI by disabling linter (requires Ruby 2.6)
  • fix: * Update GH CI about ubuntu, actions/checkout, fix lint job
  • fix: Add scheme to schemeless URLs to help email clients (fixes #104)
  • fix: BUG: CSS was mutated when parsing it
  • fix: Fix a few errors in README; Rubinius support no longer experimental
  • fix: Fix build on JRuby
  • fix: Fix in ruby 2.0
  • fix: Fix invalid example code in README.md
  • fix: Fix last errors and deprecations from RSpec 3
  • fix: Fix linter error
  • fix: Fix release version in changelog
  • fix: Fix selector parsing by removing BOM
  • fix: Fix some errors in README thanks to @ShPakvel
  • …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

Mange/roadie 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 05e4e42a147e21bf6e113728b3fd4424cd5c9b8b — 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.