Sha256: d0612175d9cb3257be87e299ec92a46dd8bd87c377b49b8961f53395bc2ad38f

Contents?: true

Size: 1.26 KB

Versions: 8

Compression:

Stored size: 1.26 KB

Contents

module CrashLog
  class Backtrace

    autoload :Line,       'crash_log/backtrace/line'
    autoload :LineCache,  'crash_log/backtrace/line_cache'

    # holder for an Array of Backtrace::Line instances
    attr_reader :lines

    def self.parse(ruby_backtrace, opts = {})
      ruby_lines = split_multiline_backtrace(ruby_backtrace)

      lines = ruby_lines.to_a.map do |unparsed_line|
        Line.parse(unparsed_line)
      end

      filters = opts[:filters] || []

      lines.each do |line|
        filters.each do |filter|
          line.apply_filter(filter)
        end
      end

      lines = lines.reject do |line|
        line.marked_for_deletion?
      end

      instance = new(lines)
    end

    def initialize(lines)
      self.lines = lines
    end

    def inspect
      "<Backtrace: " + lines.map { |line| line.inspect }.join(", ") + ">"
    end

    def ==(other)
      if other.respond_to?(:lines)
        lines == other.lines
      else
        false
      end
    end

    def to_a
      lines.map do |line|
        line.to_hash
      end
    end

    private

    attr_writer :lines

    def self.split_multiline_backtrace(backtrace)
      if backtrace.to_a.size == 1
        backtrace.to_a.first.split(/\n\s*/)
      else
        backtrace
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
crashlog-1.0.3 lib/crash_log/backtrace.rb
crashlog-1.0.2.1 lib/crash_log/backtrace.rb
crashlog-1.0.2 lib/crash_log/backtrace.rb
crashlog-1.0.1 lib/crash_log/backtrace.rb
crashlog-1.0.0 lib/crash_log/backtrace.rb
crashlog-1.0.0.rc2 lib/crash_log/backtrace.rb
crashlog-1.0.0.rc1 lib/crash_log/backtrace.rb
crashlog-0.0.2 lib/crash_log/backtrace.rb