Sha256: 5494642831f886dc255fe8de712d0962af0ffe818d6f165ae767c4b65a485bee

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

module MessageDriver
  module Adapters
    class Base
      include Logging

      def contexts
        @contexts ||= []
      end

      def initialize(configuration)
        raise "Must be implemented in subclass"
      end

      def new_context
        ctx = build_context
        contexts << ctx
        ctx
      end

      def build_context
        raise "Must be implemented in subclass"
      end

      def stop
        if @contexts
          ctxs = @contexts
          @contexts = []
          ctxs.each { |ctx| ctx.invalidate }
        end
      end
    end

    class ContextBase
      include Logging

      attr_reader :adapter
      attr_accessor :valid

      def initialize(adapter)
        @adapter = adapter
        @valid = true
      end

      def publish(destination, body, headers={}, properties={})
        raise "Must be implemented in subclass"
      end

      def pop_message(destination, options={})
        raise "Must be implemented in subclass"
      end

      def subscribe(destination, options={}, &consumer)
        raise "#subscribe is not supported by #{adapter.class}"
      end

      def create_destination(name, dest_options={}, message_props={})
        raise "Must be implemented in subclass"
      end

      def valid?
        @valid
      end

      def invalidate
        @valid = false
      end

      def supports_transactions?
        false
      end

      def supports_client_acks?
        false
      end

      def supports_subscriptions?
        false
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
message-driver-0.2.2 lib/message_driver/adapters/base.rb