railties/lib/rails/backtrace_cleaner.rb
# frozen_string_literal: true
require "active_support/backtrace_cleaner"
require "active_support/core_ext/string/access"
module Rails
class BacktraceCleaner < ActiveSupport::BacktraceCleaner # :nodoc:
APP_DIRS_PATTERN = /\A(?:\.\/)?(?:app|config|lib|test|\(\w*\))/
RENDER_TEMPLATE_PATTERN = /:in [`'].*_\w+_{2,3}\d+_\d+'/
def initialize
super
add_filter do |line|
# We may be called before Rails.root is assigned.
# When that happens we fallback to not truncating.
@root ||= Rails.root && "#{Rails.root}/"
@root && 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_silencer { |line| !APP_DIRS_PATTERN.match?(line) }
end
def clean(backtrace, kind = :silent)
kind = nil if ENV["BACKTRACE"]
super(backtrace, kind)
end
alias_method :filter, :clean
def clean_frame(frame, kind = :silent)
kind = nil if ENV["BACKTRACE"]
super(frame, kind)
end
end
end