Sha256: d2a91bcb407f844c93011fa5ac57e67ce5b73c7ef40b67bdc5d10184dabc8788

Contents?: true

Size: 996 Bytes

Versions: 2

Compression:

Stored size: 996 Bytes

Contents

module Aggro
  # Private: Handles invoking events on a subscriber object.
  class Subscription
    def initialize(topic, subscriber, namespace, filters, at_version)
      @topic = topic
      @subscriber = subscriber
      @namespace = namespace
      @filters = filters
      @at_version = at_version
      @canceled = false
    end

    def cancel
      Aggro.event_bus.unsubscribe @topic, self unless @canceled
      @canceled = true
    end

    def handle_event(event)
      return if @canceled

      invoke(event) if handles_event?(event) && matches_filter?(event)
    end

    private

    def handles_event?(event)
      @subscriber.handles_event? event.name, @namespace
    end

    def invoke(event)
      Invokr.invoke method: "#{@namespace}_#{event.name}",
                    using: event.details, on: @subscriber
    end

    def matches_filter?(event)
      @filters.all? do |filter_key, filter_value|
        event.details[filter_key] == filter_value
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
aggro-0.0.3 lib/aggro/subscription.rb
aggro-0.0.2 lib/aggro/subscription.rb