mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fix BacktraceCleaner#noise for multiple silencers.
The previous implementation of BacktraceSilencer#noise did not work correctly if more than one silencer was configured -- specifically, it would only return noise which was matched by all silencers. The new implementation is such that anything that has been matched by silencers is removed from the backtrace using Array#- (array difference), ie. we now return all elements within a backtrace that have been matched by any silencer (and are thus removed by #silence). Fixes #11030.
This commit is contained in:
parent
7c69a829a3
commit
a3678e45ec
3 changed files with 29 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
* Fix return value from `BacktraceCleaner#noise` when the cleaner is configured
|
||||
with multiple silencers.
|
||||
|
||||
Fixes #11030
|
||||
|
||||
*Mark J. Titorenko*
|
||||
|
||||
* `HashWithIndifferentAccess#select` now returns a `HashWithIndifferentAccess`
|
||||
instance instead of a `Hash` instance.
|
||||
|
||||
|
|
|
@ -97,11 +97,7 @@ module ActiveSupport
|
|||
end
|
||||
|
||||
def noise(backtrace)
|
||||
@silencers.each do |s|
|
||||
backtrace = backtrace.select { |line| s.call(line) }
|
||||
end
|
||||
|
||||
backtrace
|
||||
backtrace - silence(backtrace)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -36,6 +36,27 @@ class BacktraceCleanerSilencerTest < ActiveSupport::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
class BacktraceCleanerMultipleSilencersTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@bc = ActiveSupport::BacktraceCleaner.new
|
||||
@bc.add_silencer { |line| line =~ /mongrel/ }
|
||||
@bc.add_silencer { |line| line =~ /yolo/ }
|
||||
end
|
||||
|
||||
test "backtrace should not contain lines that match the silencers" do
|
||||
assert_equal \
|
||||
[ "/other/class.rb" ],
|
||||
@bc.clean([ "/mongrel/class.rb", "/other/class.rb", "/mongrel/stuff.rb", "/other/yolo.rb" ])
|
||||
end
|
||||
|
||||
test "backtrace should only contain lines that match the silencers" do
|
||||
assert_equal \
|
||||
[ "/mongrel/class.rb", "/mongrel/stuff.rb", "/other/yolo.rb" ],
|
||||
@bc.clean([ "/mongrel/class.rb", "/other/class.rb", "/mongrel/stuff.rb", "/other/yolo.rb" ],
|
||||
:noise)
|
||||
end
|
||||
end
|
||||
|
||||
class BacktraceCleanerFilterAndSilencerTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@bc = ActiveSupport::BacktraceCleaner.new
|
||||
|
|
Loading…
Reference in a new issue