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