class RSpec::Core::BacktraceFormatter

@private

Attributes

exclusion_patterns[RW]

@private

inclusion_patterns[RW]

@private

Public Class Methods

new() click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 8
def initialize
  @full_backtrace = false

  patterns = [
    "/lib\d*/ruby/",
    "org/jruby/",
    "bin/",
    "/gems/",
  ].map { |s| Regexp.new(s.gsub("/", File::SEPARATOR)) }

  @system_exclusion_patterns = [Regexp.union(RSpec::CallerFilter::IGNORE_REGEX, *patterns)]
  @exclusion_patterns = [] + @system_exclusion_patterns
  @inclusion_patterns = [Regexp.new(Dir.getwd)]
end

Public Instance Methods

backtrace_line(line) click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 46
def backtrace_line(line)
  RSpec::Core::Metadata::relative_path(line) unless exclude?(line)
rescue SecurityError
  nil
end
exclude?(line) click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 52
def exclude?(line)
  return false if @full_backtrace
  matches_an_exclusion_pattern?(line) &&
  doesnt_match_inclusion_pattern_unless_system_exclusion?(line)
end
format_backtrace(backtrace, options = {}) click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 31
def format_backtrace(backtrace, options = {})
  return backtrace if options[:full_backtrace]

  backtrace.map { |l| backtrace_line(l) }.compact.
    tap do |filtered|
      if filtered.empty?
        filtered.concat backtrace
        filtered << ""
        filtered << "  Showing full backtrace because every line was filtered out."
        filtered << "  See docs for RSpec::Configuration#backtrace_exclusion_patterns and"
        filtered << "  RSpec::Configuration#backtrace_inclusion_patterns for more information."
      end
    end
end
full_backtrace=(full_backtrace) click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 23
def full_backtrace=(full_backtrace)
  @full_backtrace = full_backtrace
end
full_backtrace?() click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 27
def full_backtrace?
  @full_backtrace || @exclusion_patterns.empty?
end

Private Instance Methods

doesnt_match_inclusion_pattern_unless_system_exclusion?(line) click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 64
def doesnt_match_inclusion_pattern_unless_system_exclusion?(line)
  @system_exclusion_patterns.any? { |p| line =~ p } || @inclusion_patterns.none? { |p| p =~ line }
end
matches_an_exclusion_pattern?(line) click to toggle source
# File lib/rspec/core/backtrace_formatter.rb, line 60
def matches_an_exclusion_pattern?(line)
  @exclusion_patterns.any? { |p| line =~ p }
end