class Batbugger::Backtrace::Line

Constants

INPUT_FORMAT

Attributes

file[RW]
filtered_file[RW]
filtered_method[RW]
filtered_number[RW]
method[RW]
number[RW]

Public Class Methods

new(file, number, method, filtered_file = file, filtered_number = number, filtered_method = method) click to toggle source
# File lib/batbugger/backtrace.rb, line 30
def initialize(file, number, method, filtered_file = file,
               filtered_number = number, filtered_method = method)
  self.filtered_file   = filtered_file
  self.filtered_number = filtered_number
  self.filtered_method = filtered_method
  self.file            = file
  self.number          = number
  self.method          = method
end
parse(unparsed_line, opts = {}) click to toggle source
# File lib/batbugger/backtrace.rb, line 15
def self.parse(unparsed_line, opts = {})
  filters = opts[:filters] || []
  filtered_line = filters.inject(unparsed_line) do |line, proc|
    proc.call(line)
  end

  if filtered_line
    _, file, number, method = unparsed_line.match(INPUT_FORMAT).to_a
    _, *filtered_args = filtered_line.match(INPUT_FORMAT).to_a
    new(file, number, method, *filtered_args)
  else
    nil
  end
end

Public Instance Methods

==(other) click to toggle source
# File lib/batbugger/backtrace.rb, line 44
def ==(other)
  to_s == other.to_s
end
application?() click to toggle source
# File lib/batbugger/backtrace.rb, line 52
def application?
  (filtered_file =~ /^\[PROJECT_ROOT\]/i) && !(filtered_file =~ /^\[PROJECT_ROOT\]\/vendor/i)
end
inspect() click to toggle source
# File lib/batbugger/backtrace.rb, line 48
def inspect
  "<Line:#{to_s}>"
end
source(radius = 2) click to toggle source
# File lib/batbugger/backtrace.rb, line 56
def source(radius = 2)
  @source ||= get_source(file, number, radius)
end
to_s() click to toggle source
# File lib/batbugger/backtrace.rb, line 40
def to_s
  "#{filtered_file}:#{filtered_number}:in `#{filtered_method}'"
end

Private Instance Methods

get_source(file, number, radius = 2) click to toggle source
# File lib/batbugger/backtrace.rb, line 64
def get_source(file, number, radius = 2)
  if file && File.exists?(file)
    before = after = radius
    start = (number.to_i - 1) - before
    start = 0 and before = 1 if start <= 0
    duration = before + 1 + after

    l = 0
    File.open(file) do |f|
      start.times { f.gets ; l += 1 }
      return Hash[duration.times.map { (line = f.gets) ? [(l += 1), line] : nil }.compact]
    end
  else
    {}
  end
end