diff --git a/railties/lib/rails/backtrace_cleaner.rb b/railties/lib/rails/backtrace_cleaner.rb index 7c2eb1dc42..6ac963e1ef 100644 --- a/railties/lib/rails/backtrace_cleaner.rb +++ b/railties/lib/rails/backtrace_cleaner.rb @@ -4,18 +4,25 @@ require "active_support/backtrace_cleaner" module Rails class BacktraceCleaner < ActiveSupport::BacktraceCleaner - APP_DIRS_PATTERN = /^\/?(app|config|lib|test|\(\w*\))/ + APP_DIRS_PATTERN = /\A\/?(?:app|config|lib|test|\(\w*\))/ RENDER_TEMPLATE_PATTERN = /:in `.*_\w+_{2,3}\d+_\d+'/ - EMPTY_STRING = "" - SLASH = "/" - DOT_SLASH = "./" def initialize super @root = "#{Rails.root}/" - add_filter { |line| line.sub(@root, EMPTY_STRING) } - add_filter { |line| line.sub(RENDER_TEMPLATE_PATTERN, EMPTY_STRING) } - add_filter { |line| line.sub(DOT_SLASH, SLASH) } # for tests + add_filter do |line| + line.start_with?(@root) ? line.from(@root.size) : line + end + add_filter do |line| + if RENDER_TEMPLATE_PATTERN.match?(line) + line.sub(RENDER_TEMPLATE_PATTERN, "") + else + line + end + end + add_filter do |line| + line.start_with?("./") ? line.from(1) : line + end add_silencer { |line| !APP_DIRS_PATTERN.match?(line) } end end