class Rack::Reqorder::BacktraceCleaner

Public Class Methods

new() click to toggle source
# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 3
def initialize
  @filters, @silencers = [], []
end

Public Instance Methods

add_filter(&block) click to toggle source

Adds a filter from the block provided. Each line in the backtrace will be mapped against this filter.

# Will turn "/my/rails/root/app/models/person.rb" into "/app/models/person.rb"
backtrace_cleaner.add_filter { |line| line.gsub(Rails.root, '') }
# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 28
def add_filter(&block)
  @filters << block
end
add_silencer(&block) click to toggle source

Adds a silencer from the block provided. If the silencer returns true for a given line, it will be excluded from the clean backtrace.

# Will reject all lines that include the word "mongrel", like "/gems/mongrel/server.rb" or "/app/my_mongrel_server/rb"
backtrace_cleaner.add_silencer { |line| line =~ /mongrel/ }
# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 37
def add_silencer(&block)
  @silencers << block
end
clean(backtrace, kind = :silent) click to toggle source

Returns the backtrace after all filters and silencers have been run against it. Filters run first, then silencers.

# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 9
def clean(backtrace, kind = :silent)
  filtered = filter_backtrace(backtrace)

  case kind
  when :silent
    silence(filtered)
  when :noise
    noise(filtered)
  else
    filtered
  end
end
Also aliased as: filter
filter(backtrace, kind = :silent)
Alias for: clean
remove_filters!() click to toggle source

Removes all filters, but leaves in the silencers. Useful if you suddenly need to see entire filepaths in the backtrace that you had already filtered out.

# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 51
def remove_filters!
  @filters = []
end
remove_silencers!() click to toggle source

Removes all silencers, but leaves in the filters. Useful if your context of debugging suddenly expands as you suspect a bug in one of the libraries you use.

# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 44
def remove_silencers!
  @silencers = []
end

Private Instance Methods

filter_backtrace(backtrace) click to toggle source
# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 56
def filter_backtrace(backtrace)
  @filters.each do |f|
    backtrace = backtrace.map { |line| f.call(line) }
  end

  backtrace
end
noise(backtrace) click to toggle source
# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 72
def noise(backtrace)
  backtrace - silence(backtrace)
end
silence(backtrace) click to toggle source
# File lib/rack/reqorder/services/backtrace_cleaner.rb, line 64
def silence(backtrace)
  @silencers.each do |s|
    backtrace = backtrace.reject { |line| s.call(line) }
  end

  backtrace
end