Module: Stackify::Backtrace

Defined in:
lib/stackify/utils/backtrace.rb

Constant Summary collapse

ALL_TEXT_FROM_START_TO_FIRST_COLON_REGEXP =
/\A([^:]+)/
NUMBER_BETWEEN_TWO_COLONS_REGEXP =
/:(\d+):/
TEXT_AFTER_IN_BEFORE_END_REGEXP =
/in\s`(\S+)'\z/

Class Method Summary collapse

Class Method Details

.backtrace_in_line(backtrace) ⇒ Object



33
34
35
# File 'lib/stackify/utils/backtrace.rb', line 33

def self.backtrace_in_line backtrace
  backtrace.join("\n")
end

.file_name(backtrace_str) ⇒ Object



16
17
18
# File 'lib/stackify/utils/backtrace.rb', line 16

def self.file_name backtrace_str
  backtrace_str[ALL_TEXT_FROM_START_TO_FIRST_COLON_REGEXP, 1]
end

.line_number(backtrace_str) ⇒ Object



7
8
9
# File 'lib/stackify/utils/backtrace.rb', line 7

def self.line_number backtrace_str
  backtrace_str[NUMBER_BETWEEN_TWO_COLONS_REGEXP, 1]
end

.method_name(backtrace_str) ⇒ Object



11
12
13
14
# File 'lib/stackify/utils/backtrace.rb', line 11

def self.method_name backtrace_str
  return nil unless backtrace_str
  backtrace_str[TEXT_AFTER_IN_BEFORE_END_REGEXP, 1]
end

.stacktrace(depth = 5, backtrace) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/stackify/utils/backtrace.rb', line 20

def self.stacktrace depth=5, backtrace
  return nil unless backtrace
  new_backtrace = []
  backtrace.take(depth).each do |line|
    new_backtrace << {
      'LineNum' => line_number(line),
      'Method' => method_name(line),
      'CodeFileName' => file_name(line)
    }
  end
  new_backtrace
end