BacktraceCleaner and gems in rails
UPDATE: Fixed the monkey-patch to match the latest version of the patch, and to explicitly require Rails::BacktraceCleaner before patching it to make sure it has been loaded
If there’s one thing my mother taught me, if you’re going to clean something up you may as well do it properly. Be thorough, cover every surface.
Rails::BacktraceCleaner
is a bit sloppy when it comes to gem directories. It misses all sorts of dust – hyphens, underscores, upper case letters, numbers. That’s not going to earn any pocket money. Let’s teach it a lesson.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# config/initializers/this_is_what_a_gem_looks_like.rb require 'rails/backtrace_cleaner' module Rails class BacktraceCleaner < ActiveSupport::BacktraceCleaner private GEM_REGEX = "([A-Za-z0-9_-]+)-([0-9.]+)" def add_gem_filters Gem.path.each do |path| # http://gist.github.com/30430 add_filter { |line| line.sub(/(#{path})\/gems\/#{GEM_REGEX}\/(.*)/, '\2 (\3) \4')} end vendor_gems_path = Rails::GemDependency.unpacked_path.sub("#{RAILS_ROOT}/",'') add_filter { |line| line.sub(/(#{vendor_gems_path})\/#{GEM_REGEX}\/(.*)/, '\2 (\3) [v] \4')} end end end |
I’ve submitted a patch to rails, please review if you like.
Kudos to Matthew Todd for pairing with me on this.