class Minitest::Heat::Backtrace

Wrapper for separating backtrace into component parts

Constants

Line
UNREADABLE_FILE_ATTRIBUTES
UNREADABLE_LINE

Attributes

raw_backtrace[R]

Public Class Methods

new(raw_backtrace) click to toggle source
# File lib/minitest/heat/backtrace.rb, line 45
def initialize(raw_backtrace)
  @raw_backtrace = raw_backtrace
end

Public Instance Methods

empty?() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 49
def empty?
  raw_backtrace.nil? || raw_backtrace.empty?
end
final_location() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 53
def final_location
  parsed_lines.first
end
final_project_location() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 57
def final_project_location
  project_lines.first
end
final_source_code_location() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 65
def final_source_code_location
  source_code_lines.first
end
final_test_location() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 69
def final_test_location
  test_lines.first
end
freshest_project_location() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 61
def freshest_project_location
  recently_modified_lines.first
end
parsed_lines() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 89
def parsed_lines
  return [] if raw_backtrace.nil?

  @parsed_lines ||= raw_backtrace.map { |line| parse(line) }
end
project_lines() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 73
def project_lines
  @project_lines ||= parsed_lines.select { |line| line[:path].include?(Dir.pwd) }
end
recently_modified_lines() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 77
def recently_modified_lines
  @recently_modified_lines ||= project_lines.sort_by { |line| line[:mtime] }.reverse
end
source_code_lines() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 85
def source_code_lines
  @source_code_lines ||= project_lines - test_lines
end
test_lines() click to toggle source
# File lib/minitest/heat/backtrace.rb, line 81
def test_lines
  @tests_lines ||= project_lines.select { |line| test_file?(line) }
end

Private Instance Methods

line_attributes(line) click to toggle source
# File lib/minitest/heat/backtrace.rb, line 105
def line_attributes(line)
  parts = line.split(':')
  pathname = Pathname.new(parts[0])

  {
    path: pathname.dirname.to_s,
    file: pathname.basename.to_s,
    number: parts[1],
    container: reduce_container(parts[2]),
    mtime: pathname.exist? ? pathname.mtime : nil
  }
rescue
  UNREADABLE_FILE_ATTRIBUTES
end
parse(line) click to toggle source
# File lib/minitest/heat/backtrace.rb, line 101
def parse(line)
  Line.new(line_attributes(line))
end
reduce_container(container) click to toggle source
# File lib/minitest/heat/backtrace.rb, line 97
def reduce_container(container)
  container.delete_prefix('in `').delete_suffix("'")
end
test_file?(line) click to toggle source
# File lib/minitest/heat/backtrace.rb, line 120
def test_file?(line)
  line[:file].end_with?('_test.rb') || line[:file].start_with?('test_')
end