Class: Rack::Reqorder::BacktraceCleaner

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/reqorder/services/backtrace_cleaner.rb

Instance Method Summary collapse

Constructor Details

#initializeBacktraceCleaner

Returns a new instance of BacktraceCleaner.



3
4
5
# File 'lib/rack/reqorder/services/backtrace_cleaner.rb', line 3

def initialize
  @filters, @silencers = [], []
end

Instance Method Details

#add_filter(&block) ⇒ Object

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, '') }


28
29
30
# File 'lib/rack/reqorder/services/backtrace_cleaner.rb', line 28

def add_filter(&block)
  @filters << block
end

#add_silencer(&block) ⇒ Object

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/ }


37
38
39
# File 'lib/rack/reqorder/services/backtrace_cleaner.rb', line 37

def add_silencer(&block)
  @silencers << block
end

#clean(backtrace, kind = :silent) ⇒ Object Also known as: filter

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



9
10
11
12
13
14
15
16
17
18
19
20
# 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

#remove_filters!Object

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.



51
52
53
# File 'lib/rack/reqorder/services/backtrace_cleaner.rb', line 51

def remove_filters!
  @filters = []
end

#remove_silencers!Object

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.



44
45
46
# File 'lib/rack/reqorder/services/backtrace_cleaner.rb', line 44

def remove_silencers!
  @silencers = []
end