@@ -214,8 +214,8 @@ def clear
214
214
# end
215
215
#
216
216
class EventReporter
217
- attr_reader :subscribers
218
- attr_accessor :raise_on_error
217
+ attr_reader :subscribers # :nodoc:
218
+ attr_reader :raise_on_error # :nodoc:
219
219
220
220
class << self
221
221
attr_accessor :context_store # :nodoc:
@@ -254,6 +254,12 @@ def initialize(*subscribers, raise_on_error: false, tags: nil)
254
254
@raise_on_error = raise_on_error
255
255
end
256
256
257
+ # Sets whether to raise an error if a subscriber raises an error during
258
+ # event emission, or when unexpected arguments are passed to +notify+.
259
+ def raise_on_error = ( value )
260
+ @raise_on_error = value
261
+ end
262
+
257
263
# Registers a new event subscriber. The subscriber must respond to
258
264
#
259
265
# emit(event: Hash)
@@ -270,10 +276,21 @@ def subscribe(subscriber)
270
276
unless subscriber . respond_to? ( :emit )
271
277
raise ArgumentError , "Event subscriber #{ subscriber . class . name } must respond to #emit"
272
278
end
273
-
274
279
@subscribers << subscriber
275
280
end
276
281
282
+ # Unregister an event subscriber. Accepts either a subscriber or a class.
283
+ #
284
+ # subscriber = MyEventSubscriber.new
285
+ # Rails.event.subscribe(subscriber)
286
+ #
287
+ # Rails.event.unsubscribe(subscriber)
288
+ # # or
289
+ # Rails.event.unsubscribe(MyEventSubscriber)
290
+ def unsubscribe ( subscriber )
291
+ @subscribers . delete_if { |s | subscriber === s }
292
+ end
293
+
277
294
# Reports an event to all registered subscribers. An event name and payload can be provided:
278
295
#
279
296
# Rails.event.notify("user.created", { id: 123 })
0 commit comments