class RedmineAirbrakeBackend::BacktraceElement

Backtrace element received by airbrake

Constants

DEFAULT_ROOT

Attributes

column[R]
file[R]
function[R]
line[R]
root[R]

Public Class Methods

new(data) click to toggle source
# File lib/redmine_airbrake_backend/backtrace_element.rb, line 12
def initialize(data)
  @root, @file = parse_root_and_file(data[:file].presence)
  @line = data[:line].presence
  @function = data[:function].presence
  @column = data[:column].presence
end

Public Instance Methods

checksum() click to toggle source
# File lib/redmine_airbrake_backend/backtrace_element.rb, line 19
def checksum
  @checksum ||= Digest::MD5.hexdigest("#{root}|#{file}|#{normalized_function_name}|#{line}|#{column}")
end
formatted_file() click to toggle source
# File lib/redmine_airbrake_backend/backtrace_element.rb, line 23
def formatted_file
  if root.undefined?
    file
  else
    "[#{root.upcase}_ROOT]#{file}"
  end
end

Private Instance Methods

normalized_function_name() click to toggle source
# File lib/redmine_airbrake_backend/backtrace_element.rb, line 43
def normalized_function_name
  name = @function
         .downcase
         .gsub(/([\d_]+$)?/, '') # ruby blocks

  RedmineAirbrakeBackend.filter(name)
end
parse_root_and_file(file) click to toggle source
# File lib/redmine_airbrake_backend/backtrace_element.rb, line 33
def parse_root_and_file(file)
  return DEFAULT_ROOT, file if file.blank?

  match = %r{\A/([A-Z]+)_ROOT(/.+)}.match(file.strip)

  return ActiveSupport::StringInquirer.new(match[1].downcase), match[2].strip if match.present?

  [DEFAULT_ROOT, file]
end