Class: Raven::Backtrace::Line
- Inherits:
-
Object
- Object
- Raven::Backtrace::Line
- Defined in:
- lib/raven/backtrace.rb
Overview
Handles backtrace parsing line by line
Constant Summary collapse
- RUBY_INPUT_FORMAT =
regexp (optionnally allowing leading X: for windows support)
%r{^((?:[a-zA-Z]:)?[^:]+|<.*>):(\d+)(?::in `([^']+)')?$}
- JAVA_INPUT_FORMAT =
org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
%r{^(.+)\.([^\.]+)\(([^\:]+)\:(\d+)\)$}
Instance Attribute Summary collapse
-
#file ⇒ Object
readonly
The file portion of the line (such as app/models/user.rb).
-
#method ⇒ Object
readonly
The method of the line (such as index).
-
#module_name ⇒ Object
readonly
The module name (JRuby).
-
#number ⇒ Object
readonly
The line number portion of the line.
Class Method Summary collapse
- .in_app_pattern ⇒ Object
-
.parse(unparsed_line) ⇒ Line
Parses a single line of a given backtrace.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #in_app ⇒ Object
-
#initialize(file, number, method, module_name) ⇒ Line
constructor
A new instance of Line.
- #inspect ⇒ Object
-
#to_s ⇒ Object
Reconstructs the line in a readable fashion.
Constructor Details
#initialize(file, number, method, module_name) ⇒ Line
Returns a new instance of Line.
42 43 44 45 46 47 |
# File 'lib/raven/backtrace.rb', line 42 def initialize(file, number, method, module_name) self.file = file self.module_name = module_name self.number = number.to_i self.method = method end |
Instance Attribute Details
#file ⇒ Object
The file portion of the line (such as app/models/user.rb)
16 17 18 |
# File 'lib/raven/backtrace.rb', line 16 def file @file end |
#method ⇒ Object
The method of the line (such as index)
22 23 24 |
# File 'lib/raven/backtrace.rb', line 22 def method @method end |
#module_name ⇒ Object
The module name (JRuby)
25 26 27 |
# File 'lib/raven/backtrace.rb', line 25 def module_name @module_name end |
#number ⇒ Object
The line number portion of the line
19 20 21 |
# File 'lib/raven/backtrace.rb', line 19 def number @number end |
Class Method Details
.in_app_pattern ⇒ Object
70 71 72 73 74 75 |
# File 'lib/raven/backtrace.rb', line 70 def self.in_app_pattern @in_app_pattern ||= begin project_root = Raven.configuration.project_root && Raven.configuration.project_root.to_s Regexp.new("^(#{project_root}/)?#{Raven.configuration.app_dirs_pattern || APP_DIRS_PATTERN}") end end |
.parse(unparsed_line) ⇒ Line
Parses a single line of a given backtrace
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/raven/backtrace.rb', line 30 def self.parse(unparsed_line) ruby_match = unparsed_line.match(RUBY_INPUT_FORMAT) if ruby_match _, file, number, method = ruby_match.to_a module_name = nil else java_match = unparsed_line.match(JAVA_INPUT_FORMAT) _, module_name, method, file, number = java_match.to_a end new(file, number, method, module_name) end |
Instance Method Details
#==(other) ⇒ Object
62 63 64 |
# File 'lib/raven/backtrace.rb', line 62 def ==(other) to_s == other.to_s end |
#in_app ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/raven/backtrace.rb', line 49 def in_app if self.file =~ self.class.in_app_pattern true else false end end |
#inspect ⇒ Object
66 67 68 |
# File 'lib/raven/backtrace.rb', line 66 def inspect "<Line:#{self}>" end |
#to_s ⇒ Object
Reconstructs the line in a readable fashion
58 59 60 |
# File 'lib/raven/backtrace.rb', line 58 def to_s "#{file}:#{number}:in `#{method}'" end |