Module: Legion::Events
- Defined in:
- lib/legion/events.rb
Class Method Summary collapse
- .clear ⇒ Object
- .emit(event_name, **payload) ⇒ Object
- .listener_count(event_name = nil) ⇒ Object
- .listeners ⇒ Object
- .off(event_name, block = nil) ⇒ Object
- .on(event_name, &block) ⇒ Object
- .once(event_name, &block) ⇒ Object
Class Method Details
.clear ⇒ Object
55 56 57 |
# File 'lib/legion/events.rb', line 55 def clear @listeners = nil end |
.emit(event_name, **payload) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/legion/events.rb', line 23 def emit(event_name, **payload) Legion::Logging.debug "[Events] emit: #{event_name}" if defined?(Legion::Logging) event = { event: event_name.to_s, timestamp: Time.now, **payload } listeners[event_name.to_s].each do |listener| listener.call(event) rescue StandardError => e Legion::Logging.log_exception(e, payload_summary: "[Events] listener error on #{event_name}", component_type: :event) end # Also fire wildcard listeners listeners['*'].each do |listener| listener.call(event) rescue StandardError => e Legion::Logging.warn "[Events] wildcard listener error on #{event_name}: #{e.}" end event end |
.listener_count(event_name = nil) ⇒ Object
59 60 61 62 63 64 65 |
# File 'lib/legion/events.rb', line 59 def listener_count(event_name = nil) if event_name listeners[event_name.to_s].size else listeners.values.sum(&:size) end end |
.listeners ⇒ Object
6 7 8 |
# File 'lib/legion/events.rb', line 6 def listeners @listeners ||= Hash.new { |h, k| h[k] = [] } end |
.off(event_name, block = nil) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/legion/events.rb', line 15 def off(event_name, block = nil) if block listeners[event_name.to_s].delete(block) else listeners.delete(event_name.to_s) end end |
.on(event_name, &block) ⇒ Object
10 11 12 13 |
# File 'lib/legion/events.rb', line 10 def on(event_name, &block) listeners[event_name.to_s] << block block end |
.once(event_name, &block) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/legion/events.rb', line 47 def once(event_name, &block) wrapper = proc do |event| block.call(event) off(event_name, wrapper) end on(event_name, &wrapper) end |