Class: Crimson::Agent::EventEmitter
- Inherits:
-
Object
- Object
- Crimson::Agent::EventEmitter
- Defined in:
- lib/crimson/agent/event_emitter.rb
Overview
Pub/sub event emitter for agent lifecycle events.
Instance Method Summary collapse
-
#clear ⇒ void
Remove all listeners.
-
#emit(event_type, **payload) ⇒ void
Emit an event with keyword payload.
-
#initialize ⇒ EventEmitter
constructor
A new instance of EventEmitter.
-
#listener_count(event_type = nil) ⇒ Integer
Count listeners, optionally filtered by event type.
-
#off(event_type, handler) ⇒ void
Remove a previously registered handler.
-
#on(event_type) { ... } ⇒ Proc
Register a handler for an event type.
Constructor Details
#initialize ⇒ EventEmitter
Returns a new instance of EventEmitter.
7 8 9 |
# File 'lib/crimson/agent/event_emitter.rb', line 7 def initialize @listeners = Hash.new { |h, k| h[k] = [] } end |
Instance Method Details
#clear ⇒ void
This method returns an undefined value.
Remove all listeners.
40 41 42 |
# File 'lib/crimson/agent/event_emitter.rb', line 40 def clear @listeners.clear end |
#emit(event_type, **payload) ⇒ void
This method returns an undefined value.
Emit an event with keyword payload.
32 33 34 35 36 |
# File 'lib/crimson/agent/event_emitter.rb', line 32 def emit(event_type, **payload) @listeners[event_type].each do |handler| handler.call(event_type, **payload) end end |
#listener_count(event_type = nil) ⇒ Integer
Count listeners, optionally filtered by event type.
47 48 49 50 51 52 53 |
# File 'lib/crimson/agent/event_emitter.rb', line 47 def listener_count(event_type = nil) if event_type @listeners[event_type].size else @listeners.values.sum(&:size) end end |
#off(event_type, handler) ⇒ void
This method returns an undefined value.
Remove a previously registered handler.
24 25 26 |
# File 'lib/crimson/agent/event_emitter.rb', line 24 def off(event_type, handler) @listeners[event_type].delete(handler) end |
#on(event_type) { ... } ⇒ Proc
Register a handler for an event type.
15 16 17 18 |
# File 'lib/crimson/agent/event_emitter.rb', line 15 def on(event_type, &handler) @listeners[event_type] << handler handler end |