Class: Lapsoss::BacktraceFrameFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/lapsoss/backtrace_frame_factory.rb

Constant Summary collapse

BACKTRACE_PATTERNS =

Backtrace line patterns for different Ruby implementations

[
  # Standard Ruby format: filename.rb:123:in `method_name'
  /^(?<filename>[^:]+):(?<line>\d+):in [`'](?<method>.*?)[`']$/,

  # Ruby format without method: filename.rb:123
  /^(?<filename>[^:]+):(?<line>\d+)$/,

  # JRuby format: filename.rb:123:in method_name
  /^(?<filename>[^:]+):(?<line>\d+):in (?<method>.*)$/,

  # Eval'd code: (eval):123:in `method_name'
  /^\(eval\):(?<line>\d+):in [`'](?<method>.*?)[`']$/,

  # Block format: filename.rb:123:in `block in method_name'
  /^(?<filename>[^:]+):(?<line>\d+):in [`']block (?<block_level>\(\d+\s+levels\)\s+)?in (?<method>.*?)[`']$/,

  # Native extension format: [native_gem] filename.c:123:in `method_name'
  /^\[(?<native_gem>[^\]]+)\]\s*(?<filename>[^:]+):(?<line>\d+):in [`'](?<method>.*?)[`']$/,

  # Java backtrace format: org.jruby.Ruby.runScript(Ruby.java:123)
  /^(?<method>[^(]+)\((?<filename>[^:)]+):(?<line>\d+)\)$/,

  # Java backtrace format without line number: org.jruby.Ruby.runScript(Ruby.java)
  /^(?<method>[^(]+)\((?<filename>[^:)]+)\)$/,

  # Malformed Ruby format with invalid line number: filename.rb:abc:in `method'
  /^(?<filename>[^:]+):(?<line>[^:]*):in [`'](?<method>.*?)[`']$/,

  # Malformed Ruby format with missing line number: filename.rb::in `method'
  /^(?<filename>[^:]+)::in [`'](?<method>.*?)[`']$/,

  # Malformed Ruby format with missing method: filename.rb:123:in
  /^(?<filename>[^:]+):(?<line>\d+):in$/
].freeze
LIBRARY_INDICATORS =

Common paths that indicate library/gem code

[
  "/gems/",
  "/.bundle/",
  "/vendor/",
  "/ruby/",
  "(eval)",
  "(irb)",
  "/lib/ruby/",
  "/rbenv/",
  "/rvm/",
  "/usr/lib/ruby",
  "/System/Library/Frameworks"
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(in_app_patterns: [], exclude_patterns: [], load_paths: []) ⇒ BacktraceFrameFactory

Returns a new instance of BacktraceFrameFactory.



61
62
63
64
65
# File 'lib/lapsoss/backtrace_frame_factory.rb', line 61

def initialize(in_app_patterns: [], exclude_patterns: [], load_paths: [])
  @in_app_patterns = Array(in_app_patterns)
  @exclude_patterns = Array(exclude_patterns)
  @load_paths = Array(load_paths)
end

Class Method Details

.from_raw_line(raw_line, in_app_patterns: [], exclude_patterns: [], load_paths: []) ⇒ Object



56
57
58
59
# File 'lib/lapsoss/backtrace_frame_factory.rb', line 56

def self.from_raw_line(raw_line, in_app_patterns: [], exclude_patterns: [], load_paths: [])
  new(in_app_patterns: in_app_patterns, exclude_patterns: exclude_patterns, load_paths: load_paths)
    .create_frame(raw_line)
end

Instance Method Details

#create_frame(raw_line) ⇒ Object



67
68
69
70
# File 'lib/lapsoss/backtrace_frame_factory.rb', line 67

def create_frame(raw_line)
  @raw_line = raw_line.to_s.strip
  parse_backtrace_line
end