Class: Eventish::Adapters::ActiveSupport
- Inherits:
-
Object
- Object
- Eventish::Adapters::ActiveSupport
- Defined in:
- lib/eventish/adapters/active_support.rb
Class Method Summary collapse
- .publish(event, target = nil, block: nil) ⇒ Object
- .subscribe(event, handler) ⇒ Object
- .unsubscribe(event) ⇒ Object
Class Method Details
.publish(event, target = nil, block: nil) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/eventish/adapters/active_support.rb', line 7 def publish(event, target = nil, block: nil) raise ArgumentError, 'Missing event to publish' if event.nil? = { block: block } ::ActiveSupport::Notifications.instrument(event.to_s, target: target, options: ) end |
.subscribe(event, handler) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/eventish/adapters/active_support.rb', line 14 def subscribe(event, handler) raise ArgumentError, 'Missing event to subscribe' if event.nil? raise ArgumentError, 'Missing handler for subscription' if handler.nil? subscriber = ::ActiveSupport::Notifications.subscribe(event.to_s) do |name, start, finish, id, payload| args = { event: name, id: id, start: start, finish: finish } handler.trigger(payload[:target], args, &payload.dig(:options, :block)) end Eventish.subscribers[event.to_s] = subscriber subscriber end |
.unsubscribe(event) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/eventish/adapters/active_support.rb', line 26 def unsubscribe(event) raise ArgumentError, 'Missing event to unsubscribe' if event.nil? ::ActiveSupport::Notifications.unsubscribe(event.to_s) Eventish.subscribers.delete(event.to_s) end |