class Koine::EventManager::EventListener
Attributes
listeners[R]
subscribers[R]
Public Class Methods
new()
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 6 def initialize @listeners = {} @subscribers = {} end
Public Instance Methods
listen_to(event_type, &block)
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 11 def listen_to(event_type, &block) raise ArgumentError, 'block not given' unless block_given? add_listener(event_type, &block) end
listeners_for(event_type)
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 44 def listeners_for(event_type) listeners.select do |class_or_object, _collection| event_type.ancestors.map(&:to_s).include?(class_or_object.to_s) end.values.flatten end
subscribe(subscriber, to:)
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 16 def subscribe(subscriber, to:) @subscribers[subscriber] ||= [] @subscribers[subscriber] << to @subscribers[subscriber] = @subscribers[subscriber].flatten.map(&:to_s).uniq end
trigger(event_object)
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 30 def trigger(event_object) listeners_for(event_object.class).each do |block| block.call(event_object) end subscribers.each do |subscriber, events| events.each do |event| if event_object.class.ancestors.map(&:to_s).include?(event.to_s) subscriber.publish(event_object) end end end end
unsubscribe(subscriber, from:)
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 22 def unsubscribe(subscriber, from:) all = Array(subscribers[subscriber]) filtered = all.reject do |object_type| object_type.to_s == from.to_s end subscribers[subscriber] = filtered end
Private Instance Methods
add_listener(event_type, &block)
click to toggle source
# File lib/koine/event_manager/event_listener.rb, line 52 def add_listener(event_type, &block) listeners[event_type.to_s] ||= [] listeners[event_type.to_s] << block end