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