Class: Eventish::Adapters::ActiveSupport

Inherits:
Object
  • Object
show all
Defined in:
lib/eventish/adapters/active_support.rb

Class Method Summary collapse

Class Method Details

.publish(event, target = nil, block: nil) ⇒ Object

Raises:

  • (ArgumentError)


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?

  options = { block: block }
  ::ActiveSupport::Notifications.instrument(event.to_s, target: target, options: options)
end

.subscribe(event, handler) ⇒ Object

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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