Sha256: d4763320224270d9e1e002f67ef03b8961a384c888c34711ee2de8197b9dd6bb
Contents?: true
Size: 1.83 KB
Versions: 2
Compression:
Stored size: 1.83 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(client) @client = client # 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) # Asynchronous error handling. # Set callback for given class (Queue for example) # or for the Connection class (or instance, of course). callbacks = [self.callbacks[:close], self.client.connection.callbacks[:close]].flatten.compact callbacks.map { |c| c.call(exception) } if callbacks.any? end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
amq-client-0.7.0.alpha25 | lib/amq/client/entity.rb |
amq-client-0.7.0.alpha24 | lib/amq/client/entity.rb |