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 |
.reset ⇒ Object
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 |