@@ -231,8 +231,8 @@ def clear
231
231
# # payload: { id: 123 },
232
232
# # }
233
233
class EventReporter
234
- attr_reader :subscribers
235
- attr_accessor :raise_on_error
234
+ attr_reader :subscribers # :nodoc:
235
+ attr_reader :raise_on_error # :nodoc:
236
236
237
237
ENCODERS = {
238
238
json : Encoders ::JSON ,
@@ -272,6 +272,12 @@ def initialize(*subscribers, raise_on_error: false, tags: nil)
272
272
@raise_on_error = raise_on_error
273
273
end
274
274
275
+ # Sets whether to raise an error if a subscriber raises an error during
276
+ # event emission, or when unexpected arguments are passed to +notify+.
277
+ def raise_on_error = ( value )
278
+ @raise_on_error = value
279
+ end
280
+
275
281
# Registers a new event subscriber. The subscriber must respond to
276
282
#
277
283
# emit(event: Hash)
@@ -293,10 +299,21 @@ def subscribe(subscriber, &filter)
293
299
unless subscriber . respond_to? ( :emit )
294
300
raise ArgumentError , "Event subscriber #{ subscriber . class . name } must respond to #emit"
295
301
end
296
-
297
302
@subscribers << { subscriber : subscriber , filter : filter }
298
303
end
299
304
305
+ # Unregister an event subscriber. Accepts either a subscriber or a class.
306
+ #
307
+ # subscriber = MyEventSubscriber.new
308
+ # Rails.event.subscribe(subscriber)
309
+ #
310
+ # Rails.event.unsubscribe(subscriber)
311
+ # # or
312
+ # Rails.event.unsubscribe(MyEventSubscriber)
313
+ def unsubscribe ( subscriber )
314
+ @subscribers . delete_if { |s | subscriber === s }
315
+ end
316
+
300
317
# Reports an event to all registered subscribers. An event name and payload can be provided:
301
318
#
302
319
# Rails.event.notify("user.created", { id: 123 })
0 commit comments