Module: TestMap::Event

Defined in:
lib/test_map/event.rb

Overview

Publish/subscribe event bus. No overhead when no subscribers.

Topics use type.action format, e.g. cache.create, map.create.

Block form measures elapsed time and passes it to subscribers:

Event.publish('cache.create') { write_cache }

Fire-and-forget form for simple notifications:

Event.publish('cache.found', test_file:)

Class Method Summary collapse

Class Method Details

.publish(topic, **payload, &block) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/test_map/event.rb', line 21

def publish(topic, **payload, &block)
  listeners = @subscribers[topic]
  return notify(listeners, topic, **payload) unless block
  return yield unless listeners

  publish_with_timing(listeners, topic, **payload, &block)
end

.resetObject



29
30
31
# File 'lib/test_map/event.rb', line 29

def reset
  @subscribers = {}
end

.subscribe(topic, &block) ⇒ Object



17
18
19
# File 'lib/test_map/event.rb', line 17

def subscribe(topic, &block)
  (@subscribers[topic] ||= []) << block
end