class Rbexy::Component::BacktraceCleaner

Attributes

backtrace[R]
found_templates[R]

Public Class Methods

new(backtrace) click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 6
def initialize(backtrace)
  @backtrace = backtrace
  @found_templates = {}
end

Public Instance Methods

call() click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 11
def call
  backtrace
    .reject(&method(:internal_implementation_detail?))
    .map(&method(:strip_rbx_internals_block_mention))
end

Private Instance Methods

internal_implementation_detail?(line) click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 21
def internal_implementation_detail?(line)
  if template = template_name_if_rbx_internals(line)
    redundant_internal_block?(line, template)
  else
    internal_method_call?(line)
  end
end
internal_method_call?(line) click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 29
def internal_method_call?(line)
  line =~ /lib\/rbexy\/.*\.rb/ ||
    line =~ /lib\/action_view\/.*\.rb/ ||
    line =~ /lib\/active_support\/notifications\.rb/
end
redundant_internal_block?(line, template) click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 35
def redundant_internal_block?(line, template)
  if found_templates[template]
    true
  else
    found_templates[template] = true
    false
  end
end
strip_rbx_internals_block_mention(line) click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 44
def strip_rbx_internals_block_mention(line)
  if template_name_if_rbx_internals(line)
    line.gsub(/block (\(\d+ levels\))? ?in /, "")
  else
    line
  end
end
template_name_if_rbx_internals(line) click to toggle source
# File lib/rbexy/component/backtrace_cleaner.rb, line 52
def template_name_if_rbx_internals(line)
  if /\/(?<template>[^\/]*)\.rbx:\d+:in `(block |_)/ =~ line
    template
  end
end