Class: Featurevisor::Emitter
- Inherits:
-
Object
- Object
- Featurevisor::Emitter
- Defined in:
- lib/featurevisor/emitter.rb
Overview
Event emitter class for handling event subscriptions and triggers
Instance Attribute Summary collapse
-
#listeners ⇒ Object
readonly
Returns the value of attribute listeners.
Instance Method Summary collapse
-
#clear_all ⇒ Object
Clear all event listeners.
-
#initialize ⇒ Emitter
constructor
Initialize a new emitter.
-
#on(event_name, callback) ⇒ Proc
Subscribe to an event.
-
#trigger(event_name, details = {}) ⇒ Object
Trigger an event with optional details.
Constructor Details
#initialize ⇒ Emitter
Initialize a new emitter
12 13 14 |
# File 'lib/featurevisor/emitter.rb', line 12 def initialize @listeners = {} end |
Instance Attribute Details
#listeners ⇒ Object (readonly)
Returns the value of attribute listeners.
9 10 11 |
# File 'lib/featurevisor/emitter.rb', line 9 def listeners @listeners end |
Instance Method Details
#clear_all ⇒ Object
Clear all event listeners
56 57 58 |
# File 'lib/featurevisor/emitter.rb', line 56 def clear_all @listeners = {} end |
#on(event_name, callback) ⇒ Proc
Subscribe to an event
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/featurevisor/emitter.rb', line 20 def on(event_name, callback) @listeners[event_name] ||= [] listeners = @listeners[event_name] listeners << callback is_active = true # Return unsubscribe function -> do return unless is_active is_active = false index = listeners.index(callback) listeners.delete_at(index) if index && index >= 0 end end |
#trigger(event_name, details = {}) ⇒ Object
Trigger an event with optional details
40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/featurevisor/emitter.rb', line 40 def trigger(event_name, details = {}) listeners = @listeners[event_name] return unless listeners listeners.each do |listener| begin listener.call(details) rescue => err # Log error but don't stop execution warn "Error in event listener: #{err.}" end end end |