class EntityStore::EventBus
Constants
- ALL_METHOD
Public Class Methods
new(event_subscribers = nil)
click to toggle source
# File lib/entity_store/event_bus.rb, line 7 def initialize(event_subscribers = nil) @_event_subscribers = event_subscribers if event_subscribers end
Public Instance Methods
event_subscribers()
click to toggle source
# File lib/entity_store/event_bus.rb, line 11 def event_subscribers @_event_subscribers || EntityStore::Config.event_subscribers end
feed_store()
click to toggle source
# File lib/entity_store/event_bus.rb, line 82 def feed_store EntityStore::Config.feed_store end
generate_subscriber_lookup()
click to toggle source
# File lib/entity_store/event_bus.rb, line 55 def generate_subscriber_lookup lookup = Hash.new { |h, k| h[k] = Array.new } subscribers.each do |s| s.instance_methods.each do |m| lookup[m] << s end end lookup end
publish(entity_type, event)
click to toggle source
# File lib/entity_store/event_bus.rb, line 15 def publish(entity_type, event) publish_to_feed(entity_type, event) subscribers_to(event.receiver_name).each { |s| send_to_subscriber(s, event.receiver_name, event) } subscribers_to_all.each { |s| send_to_subscriber(s, ALL_METHOD, event) } end
publish_to_feed(entity_type, event)
click to toggle source
# File lib/entity_store/event_bus.rb, line 78 def publish_to_feed(entity_type, event) feed_store.add_event(entity_type, event) if feed_store end
replay(since, type, subscriber)
click to toggle source
Public - replay events of a given type to a given subscriber
since - Time reference point type - String type name of event subscriber - Class of the subscriber to replay events to
Returns nothing
# File lib/entity_store/event_bus.rb, line 93 def replay(since, type, subscriber) max_items = 100 event_data_objects = feed_store.get_events(since, type, max_items) while event_data_objects.count > 0 do event_data_objects.each do |event_data_object| begin event = EntityStore::Config.load_type(event_data_object.type).new(event_data_object.attrs) subscriber.new.send(event.receiver_name, event) log_info { "replayed #{event.inspect} to #{subscriber.name}##{event.receiver_name}" } rescue => e log_error "#{e.message} when replaying #{event_data_object.inspect} to #{subscriber}", e end end event_data_objects = feed_store.get_events(event_data_objects.last.id, type, max_items) end end
send_to_subscriber(subscriber, receiver_name, event)
click to toggle source
# File lib/entity_store/event_bus.rb, line 22 def send_to_subscriber subscriber, receiver_name, event subscriber.new.send(receiver_name, event) log_debug { "called #{subscriber.name}##{receiver_name} with #{event.inspect}" } rescue => e log_error "#{e.message} when calling #{subscriber.name}##{receiver_name} with #{event.inspect}", e end
subscriber_lookup()
click to toggle source
# File lib/entity_store/event_bus.rb, line 41 def subscriber_lookup return generate_subscriber_lookup unless EntityStore::Config.cache_event_subscribers @lookup ||= begin lookup_cache_key = event_subscribers.map(&:to_s).join if subscriber_lookup_cache[lookup_cache_key] subscriber_lookup_cache[lookup_cache_key] else subscriber_lookup_cache[lookup_cache_key] = generate_subscriber_lookup end end end
subscriber_lookup_cache()
click to toggle source
# File lib/entity_store/event_bus.rb, line 37 def subscriber_lookup_cache @@lookup_cache ||= Hash.new end
subscribers()
click to toggle source
# File lib/entity_store/event_bus.rb, line 67 def subscribers event_subscribers.map do |subscriber| case subscriber when String EntityStore::Config.load_type(subscriber) else subscriber end end end
subscribers_to(event_name)
click to toggle source
# File lib/entity_store/event_bus.rb, line 29 def subscribers_to(event_name) subscriber_lookup[event_name.to_sym].dup end
subscribers_to_all()
click to toggle source
# File lib/entity_store/event_bus.rb, line 33 def subscribers_to_all subscribers_to(ALL_METHOD) end