Class: Klenod::Runtime::BacktraceRewriter

Inherits:
Object
  • Object
show all
Defined in:
lib/klenod/runtime/backtrace_rewriter.rb

Defined Under Namespace

Classes: BacktraceString, ParsedBacktraceEntry

Instance Method Summary collapse

Constructor Details

#initialize(mods) ⇒ BacktraceRewriter

Returns a new instance of BacktraceRewriter.



41
42
43
44
45
# File 'lib/klenod/runtime/backtrace_rewriter.rb', line 41

def initialize(mods)
  @source_maps = source_maps_for(mods)
  @source_map_cache = Hash.new { |h, path| h[path] = @source_maps[path] }
  @constant_display_names = constant_display_names_for(mods)
end

Instance Method Details

#rewrite_backtrace(backtrace) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/klenod/runtime/backtrace_rewriter.rb', line 52

def rewrite_backtrace(backtrace)
  backtrace.map do |line|
    if (entry = ParsedBacktraceEntry.parse(line))
      rewrite_backtrace_entry(entry).to_backtrace_string
    else
      line
    end
  end
end

#rewrite_exception(e) ⇒ Object



47
48
49
50
# File 'lib/klenod/runtime/backtrace_rewriter.rb', line 47

def rewrite_exception(e)
  rewrite_exception_message(e)
  e.set_backtrace(rewrite_backtrace(e.backtrace))
end

#source_for(file) ⇒ Object

The original source of the module evaluated from file, for tools that show an excerpt next to a frame.



64
65
66
# File 'lib/klenod/runtime/backtrace_rewriter.rb', line 64

def source_for(file)
  @source_map_cache[file]&.input
end