Sha256: f6e0f196441bfc6591742fc39d72d9ccc363526f167aa62cda3a91a00d1e839e

Contents?: true

Size: 1.58 KB

Versions: 5

Compression:

Stored size: 1.58 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

    def inline!(&block)
      current_routes = @routes.dup
      consumer_definitions.each do |_, definition|
        definition.fetch(:block)&.call(self)
      end

      block.call

    ensure
      clear_routes!
      @routes = current_routes
    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

5 entries across 5 versions & 1 rubygems

Version Path
messaging-3.5.5 lib/messaging/routes.rb
messaging-3.5.4 lib/messaging/routes.rb
messaging-3.5.3 lib/messaging/routes.rb
messaging-3.5.2 lib/messaging/routes.rb
messaging-3.5.1 lib/messaging/routes.rb