Class: EntityStore::EventBus
- Inherits:
-
Object
- Object
- EntityStore::EventBus
- Includes:
- Logging
- Defined in:
- lib/entity_store/event_bus.rb
Constant Summary collapse
- ALL_METHOD =
:all_events
Instance Method Summary collapse
- #feed_store ⇒ Object
- #publish(entity_type, event) ⇒ Object
- #publish_to_feed(entity_type, event) ⇒ Object
-
#replay(since, type, subscriber) ⇒ Object
Public - replay events of a given type to a given subscriber.
- #send_to_subscriber(subscriber, receiver_name, event) ⇒ Object
- #subscribers ⇒ Object
- #subscribers_to(event_name) ⇒ Object
- #subscribers_to_all ⇒ Object
Methods included from Logging
Instance Method Details
#feed_store ⇒ Object
44 45 46 |
# File 'lib/entity_store/event_bus.rb', line 44 def feed_store EntityStore::Config.feed_store end |
#publish(entity_type, event) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/entity_store/event_bus.rb', line 7 def publish(entity_type, event) publish_to_feed entity_type, event subscribers_to(event.receiver_name).each do |s| send_to_subscriber s, event.receiver_name, event end subscribers_to_all.each do |s| send_to_subscriber s, ALL_METHOD, event end end |
#publish_to_feed(entity_type, event) ⇒ Object
40 41 42 |
# File 'lib/entity_store/event_bus.rb', line 40 def publish_to_feed(entity_type, event) feed_store.add_event(entity_type, event) if feed_store end |
#replay(since, type, subscriber) ⇒ Object
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
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/entity_store/event_bus.rb', line 55 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.} 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) ⇒ Object
14 15 16 17 18 19 |
# File 'lib/entity_store/event_bus.rb', line 14 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.} when calling #{subscriber.name}##{receiver_name} with #{event.inspect}", e end |
#subscribers ⇒ Object
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/entity_store/event_bus.rb', line 29 def subscribers EntityStore::Config.event_subscribers.map do |subscriber| case subscriber when String Utils.get_type_constant(subscriber) else subscriber end end end |
#subscribers_to(event_name) ⇒ Object
21 22 23 |
# File 'lib/entity_store/event_bus.rb', line 21 def subscribers_to(event_name) subscribers.select { |s| s.instance_methods.include?(event_name.to_sym) } end |
#subscribers_to_all ⇒ Object
25 26 27 |
# File 'lib/entity_store/event_bus.rb', line 25 def subscribers_to_all subscribers.select { |s| s.instance_methods.include?(ALL_METHOD) } end |