Sha256: d7f4c13b60eab939a757daf73020788f9cbf6f23565721b034b1cfa572794f32

Contents?: true

Size: 1.65 KB

Versions: 18

Compression:

Stored size: 1.65 KB

Contents

# This is the base class that provides the template for all queue services.
# The child classes must implement the following methods to become a concrete class :
# assign_storage, insert, raw_head, construct_message_from, delete and size.
# The instances of this class or it's child classes are supposed to perform the following actions on the queue service :
# initialize, push, pop and empty?
module DispatchRider
  module QueueServices
    class Base
      attr_accessor :queue

      def initialize(options = {})
        @queue = assign_storage(options.symbolize_keys)
      end

      def assign_storage(attrs)
        raise NotImplementedError
      end

      def push(item)
        message = serialize(item)
        insert(message)
        message
      end

      def insert(item)
        raise NotImplementedError
      end

      def pop(&block)
        obj = head
        if obj
          block.call(obj.message) && delete(obj.item)
          obj.message
        end
      end

      def head
        raw_item = raw_head
        raw_item && OpenStruct.new(:item => raw_item, :message => construct_message_from(raw_item))
      end

      def raw_head
        raise NotImplementedError
      end

      def construct_message_from(item)
        raise NotImplementedError
      end

      def delete(item)
        raise NotImplementedError
      end

      def empty?
        size.zero?
      end

      def size
        raise NotImplementedError
      end

      protected

      def serialize(item)
        item.to_json
      end

      def deserialize(item)
        attrs = JSON.parse(item).symbolize_keys
        DispatchRider::Message.new(attrs)
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
dispatch-rider-1.0.2 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-1.0.1 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-1.0.0 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.7 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.6 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.5 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.4 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.3 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.2 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.1 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.2.0 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.1.2 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.1.1.1 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.1.0 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.0.7 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.0.5 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.0.4 lib/dispatch-rider/queue_services/base.rb
dispatch-rider-0.0.3 lib/dispatch-rider/queue_services/base.rb