Sha256: 64b4f5eea3fe0fc39bffd377c5d7ce3edb4e28fd7c62bf0b70e733d20ae77c65

Contents?: true

Size: 1.33 KB

Versions: 2

Compression:

Stored size: 1.33 KB

Contents

module Messaging
  # Public: Used by Messaging.routes to setup the routes for matching messages to callables
  #
  # See routing.rb for more information.
  class Routes
    include Routing

    # Creates a consumer for the default adapter
    #
    # @param name [Symbol] the name of the consumer.
    def consumer(name, **options, &block)
      consumer_definitions[name] = { options: options, block: block }
    end

    def define_consumers!
      return unless consumers.empty?

      consumer_definitions.each do |name, definition|
        c = Messaging.consumer_adapter.create_consumer(name, definition.fetch(:options))
        definition.fetch(:block)&.call(c)
        consumers << c
      end
    end

    # Keeps the consumers, but reload their subscriptions so code reloading works.
    # The consumer has a reference to the class name of each of its handlers,
    # if the handler is reloaded the reference would point to an old instance.
    def reload_consumer_routes!
      consumers.each do |c|
        c.clear_routes!
        consumer_definitions[c.name].fetch(:block)&.call(c)
      end
    end

    def consumers
      @consumers ||= []
    end

    # Public: Evaluate route definition.
    def draw(&block)
      instance_eval(&block)
    end

    private

    def consumer_definitions
      @consumer_definitions ||= {}
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
messaging-3.4.3 lib/messaging/routes.rb
messaging-3.4.2 lib/messaging/routes.rb