class Aggro::Subscription
Private: Handles invoking events on a subscriber object.
Attributes
caught_up[R]
Public Class Methods
new(topic, subscriber, namespace, filters, at_version)
click to toggle source
# File lib/aggro/subscription.rb, line 6 def initialize(topic, subscriber, namespace, filters, at_version) @topic = topic @subscriber = subscriber @namespace = namespace @filters = filters @at_version = at_version @canceled = false end
Public Instance Methods
cancel()
click to toggle source
# File lib/aggro/subscription.rb, line 15 def cancel Aggro.event_bus.unsubscribe @topic, self unless @canceled @canceled = true end
handle_event(event)
click to toggle source
# File lib/aggro/subscription.rb, line 20 def handle_event(event) return if @canceled invoke(event) if handles_event?(event) && matches_filter?(event) end
notify_subscription_caught_up()
click to toggle source
# File lib/aggro/subscription.rb, line 26 def notify_subscription_caught_up @caught_up = true return unless @subscriber.handles_event? :caught_up, @namespace @subscriber.send "#{@namespace}_caught_up" end
Private Instance Methods
expand_event(event)
click to toggle source
# File lib/aggro/subscription.rb, line 36 def expand_event(event) event.details.merge now: event.occured_at, today: event.occured_at.to_date end
handles_event?(event)
click to toggle source
# File lib/aggro/subscription.rb, line 40 def handles_event?(event) @subscriber.handles_event? event.name, @namespace end
invoke(event)
click to toggle source
# File lib/aggro/subscription.rb, line 44 def invoke(event) Invokr.invoke method: "#{@namespace}_#{event.name}", on: @subscriber, using: expand_event(event) end
matches_filter?(event)
click to toggle source
# File lib/aggro/subscription.rb, line 49 def matches_filter?(event) @filters.all? do |filter_key, filter_value| event.details[filter_key] == filter_value end end