Skip to content

Commit

Permalink
ErrorReporter: allow to unsubscribe
Browse files Browse the repository at this point in the history
This may be useful if you'd like to replace or remove a subscriber
added by one of your dependencies.
  • Loading branch information
byroot committed Sep 14, 2022
1 parent d695972 commit 217df1a
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
12 changes: 12 additions & 0 deletions activesupport/lib/active_support/error_reporter.rb
Expand Up @@ -123,6 +123,18 @@ def subscribe(subscriber)
@subscribers << subscriber
end

# Unregister an error subscriber. Accepts either a subscriber or a class.
#
# subscriber = MyErrorSubscriber.new
# Rails.error.subscribe(subscriber)
#
# Rails.error.unsubscribe(subscriber)
# # or
# Rails.error.unsubscribe(MyErrorSubscriber)
def unsubscribe(subscriber)
@subscribers.delete_if { |s| subscriber === s }
end

# Prevent a subscriber from being notified of errors for the
# duration of the block. You may pass in the subscriber itself, or its class.
#
Expand Down
25 changes: 25 additions & 0 deletions activesupport/test/error_reporter_test.rb
Expand Up @@ -143,6 +143,31 @@ class ErrorReporterTest < ActiveSupport::TestCase
assert_equal 1, second_subscriber.events.size
end

test "can unsubscribe" do
second_subscriber = ErrorSubscriber.new
@reporter.subscribe(second_subscriber)

error = ArgumentError.new("Oops")
@reporter.report(error, handled: true)

@reporter.unsubscribe(second_subscriber)

error = ArgumentError.new("Oops 2")
@reporter.report(error, handled: true)

assert_equal 2, @subscriber.events.size
assert_equal 1, second_subscriber.events.size

@reporter.subscribe(second_subscriber)
@reporter.unsubscribe(ErrorSubscriber)

error = ArgumentError.new("Oops 3")
@reporter.report(error, handled: true)

assert_equal 2, @subscriber.events.size
assert_equal 1, second_subscriber.events.size
end

test "handled errors default to :warning severity" do
@reporter.report(@error, handled: true)
assert_equal :warning, @subscriber.events.dig(0, 2)
Expand Down

0 comments on commit 217df1a

Please sign in to comment.