Sha256: 734e50285e7011c40b59df0c194acdd69832b17b69b0ccc54f2994cc3cd9b261
Contents?: true
Size: 1.63 KB
Versions: 4
Compression:
Stored size: 1.63 KB
Contents
# encoding: utf-8 require "amq/client/callbacks" require "amq/client/openable" module AMQ module Client module RegisterEntityMixin # @example Registering Channel implementation # Adapter.register_entity(:channel, Channel) # # ... so then I can do: # channel = client.channel(1) # # instead of: # channel = Channel.new(client, 1) def register_entity(name, klass) define_method(name) do |*args, &block| klass.new(self, *args, &block) end # define_method end # register_entity end # RegisterEntityMixin module ProtocolMethodHandlers def handle(klass, &block) AMQ::Client::HandlersRegistry.register(klass, &block) end def handlers AMQ::Client::HandlersRegistry.handlers end end # ProtocolMethodHandlers # AMQ entities, as implemented by AMQ::Client, have callbacks and can run them # when necessary. # # @note Exchanges and queues implementation is based on this class. # # @abstract module Entity # # Behaviors # include Openable include Callbacks # # API # # @return [Array<#call>] attr_reader :callbacks def initialize(connection) @connection = connection # Be careful with default values for #ruby hashes: h = Hash.new(Array.new); h[:key] ||= 1 # won't assign anything to :key. MK. @callbacks = Hash.new end def error(exception) callbacks = [@callbacks[:close]].flatten.compact callbacks.map { |c| c.call(exception) } if callbacks.any? end end end end
Version data entries
4 entries across 4 versions & 1 rubygems