Sha256: 50a33b7abc2be03571c8615b256a11edee36bfd5fce63485ead3559aca658c85

Contents?: true

Size: 1.51 KB

Versions: 2

Compression:

Stored size: 1.51 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 # initialize
    end # Entity
  end # Client
end # AMQ

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
amq-client-0.7.0.alpha34 lib/amq/client/entity.rb
amq-client-0.7.0.alpha33 lib/amq/client/entity.rb