Sha256: 6b39f8fc17e3857c5e1dfaecb3565eb289733fe9733fbdfcaaf9ab7f87f6fa05

Contents?: true

Size: 768 Bytes

Versions: 1

Compression:

Stored size: 768 Bytes

Contents

require 'dry-equalizer'

module Messaging
  module Routing
    # Internal: Used by routing to match a pattern against a callable (handler)
    class Subscriber
      include Dry::Equalizer(:matcher, :handler)

      attr_reader :matcher
      attr_reader :handler

      def initialize(pattern, topic, handler)
        @matcher = MessageMatcher.new(pattern: pattern, topic: topic)
        @handler = handler
        verify_handler!
      end

      def call(message)
        return unless @matcher.matches?(message)

        @handler.call(message)
      end

      def topics
        matcher.topics
      end

      private

      def verify_handler!
        raise ArgumentError, 'Handler must be callable' unless handler.respond_to? :call
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
messaging-3.4.1 lib/messaging/routing/subscriber.rb