Releases: kerrizor/keela
Release list
v0.2.3 - Stop Seeing Double
🔍 Keela v0.2.3 - "Stop Seeing Double"
The one where we learned that = and =~ are not the same thing.
What's Fixed
Ever notice your baseline had the same constant listed twice? 👀 Turns out when you write:
DATETIME_REGEX = %r{...} # definition
DATETIME_REGEX =~ some_string # usageKeela was like "oh cool, TWO constants!"
No. Bad Keela. The =~ regex match operator is using the constant, not defining it. We've sent Keela back to Ruby school and she now understands the difference between assignment (=) and matching (=~).
What's Changed
We also stopped committing Gemfile.lock because we're a gem, not an app, and frankly it was causing more drama than a reality TV reunion special. 📺
Upgrade
gem install keela
# or
bundle update keelaThen regenerate your baseline and watch those duplicates disappear! ✨
v0.2.2 - The .keela/ directory is complete 📁
What's New
The .keela/ directory now supports config files too! All your Keela files can live together in one tidy home.
📁 Complete .keela/ Directory Support
Your project root can now be completely free of Keela files:
.keela/
├── config.yml # ← NEW in 0.2.2
├── baseline.yml
└── excluded.yml
Config file lookup order:
.keela/config.yml(new preferred)keela.yml.keela.yml
All existing root-level files continue to work—no migration required.
Full Changelog: v0.2.1...v0.2.2
Install / Upgrade
gem install keela
# or
bundle update keelav0.2.1 - Keela gets a home 🏠
What's New
Keela now supports organizing its files in a dedicated .keela/ directory, keeping your project root tidy. Plus, a new quiet mode for when you just want the results.
🤫 Quiet Mode
Suppress the progress bar with --quiet or -q:
keela --type methods --quietPerfect for CI pipelines or when you're piping output somewhere else.
🏠 New .keela/ Directory Support
Tired of dotfiles cluttering your project root? Keela now looks for its files in a .keela/ directory first:
.keela/
├── baseline.yml
└── excluded.yml
Don't worry—your existing root-level keela_baseline.yml and keela_excluded.yml files still work. Keela checks both locations:
.keela/excluded.yml→keela_excluded.yml.keela/baseline.yml→keela_baseline.yml
Explicit excluded_path or baseline_path config always wins.
Full Changelog: v0.2.0...v0.2.1
Install / Upgrade
gem install keela
# or
bundle update keelav0.2.0 - The Nose Knows 🐕
🐕 Keela v0.2.0 - The Nose Knows
Meet Keela — a code-sniffing springer spaniel who finds the unused code that other tools miss.
Named after the famous "CSI dog" who could detect microscopic traces that eluded forensic teams, Keela brings that same nose to your Ruby codebase.
What Can Keela Sniff Out?
🔧 Methods - def unused_method that nobody calls
🔍 Scopes - scope :inactive, -> { } that nothing queries
🔢 Constants - UNUSED_CONSTANT = "value" gathering dust (#2)
🔗 Delegations - delegate :unused_method, to: :target going nowhere (#4)
📝 Attributes - attr_accessor :unused_attr that nothing reads or writes (#5)
🌍 I18n Keys (beta) - Translation keys in your locale YAML that no view uses (#16)
How She Works
Baseline mode for CI — Keela tracks known unused code and only barks at new dead code:
keela --update-baseline # First run: establish the baseline
keela # CI runs: fail on new unused codeReport mode for exploration — See everything:
keela --reportConfiguration
📁 Config file - Drop a keela.yml in your project root (#11)
🎯 Include/exclude patterns - Tell Keela where to sniff (#12, #14)
# keela.yml
exclude_patterns:
- "vendor/**/*"
include_patterns:
- "engines/**/*.rb"🎛️ Multi-type scanning - Hunt for specific scents (#18)
keela --type methods,scopes,constants📊 JSON output - Machine-readable findings for your pipeline (#19)
keela --format jsonInstallation
gem install keelaFull Changelog: v0.1.0...v0.2.0
Good girl, Keela. Now go find that dead code! 🦴