class UnifiedQueues::Multi::Driver::EMJackDriver::Connection

Multi queue driver for unified queues single queue interface.

Public Class Methods

new(cls, *args, &block) click to toggle source

Constructor.

# File lib/unified-queues/multi/driver/em-jack.rb, line 64
def initialize(cls, *args, &block)
    @native = cls::new(*args, &block)
    @subscribed_names = LookupHash["default"]
    @used_name = "default"
end

Public Instance Methods

list(&block) click to toggle source

Lists names of all available queues. @return [Array]

# File lib/unified-queues/multi/driver/em-jack.rb, line 174
def list(&block)
    @native.list(&block)
end
list_subscribed(&block) click to toggle source

Lists all subscribed queues. @return [Array]

# File lib/unified-queues/multi/driver/em-jack.rb, line 192
def list_subscribed(&block)
    @native.list(:watched, &block)
end
list_used(&block) click to toggle source

Lists all used queues. @return [Array]

# File lib/unified-queues/multi/driver/em-jack.rb, line 183
def list_used(&block)
    @native.list(:used, &block)
end
pop(blocking = false) { |result| ... } click to toggle source

Pops value from the queue. Callback is recurring, so it will keep callback active after #pop.

@param [Boolean] blocking indicates, it should block or not @return [Object, nil]

# File lib/unified-queues/multi/driver/em-jack.rb, line 89
def pop(blocking = false, &block)
    timeout = blocking ? nil : 0
    @native.each_job(timeout) do |job|
        result = job.body
        job.delete do
            yield result
        end
    end
end
push(value, key = value, &block) click to toggle source

Pushes value to the currently used queue.

@param [Object] value @param [Integer] key key for priority queues

# File lib/unified-queues/multi/driver/em-jack.rb, line 77
def push(value, key = value, &block)
    @native.put(value, :priority => key, &block)
end
subscribe(name) { || ... } click to toggle source

Subscribes to the queue. So marks it as target for {#pop}. Note, than only single queue can be subscribed at one time.

@param [Object] name name of the required queue

# File lib/unified-queues/multi/driver/em-jack.rb, line 124
def subscribe(name, &block)
    if not name.in? @subscribed_names
        @subscribed_names << name
        @native.watch(name, &block)
    elsif not block.nil?
        EM::next_tick do
            yield
        end
    end        
end
subscribed() { |self| ... } click to toggle source

Currently subscribed queue. @return [Queue]

# File lib/unified-queues/multi/driver/em-jack.rb, line 165
def subscribed
    yield self
end
unsubscribe(name) { || ... } click to toggle source

Unsubscribes from the queue. @param [Object] name name of the required queue\

# File lib/unified-queues/multi/driver/em-jack.rb, line 140
def unsubscribe(name, &block)
    if name.in? @subscribed_names
        @subscribed_names.delete name
        @native.ignore(name, &block)
    elsif not block.nil?
        EM::next_tick do
            yield
        end
    end
end
use(name) { || ... } click to toggle source

Sets queue with given name as used. So marks it as target for {#push}.

@param [Object] name name of the required queue

# File lib/unified-queues/multi/driver/em-jack.rb, line 106
def use(name, &block)
    if name != @used_name
        @used_name = name
        @native.use(name, &block)
    elsif not block.nil?
        EM::next_tick do
            yield
        end
    end
end
used() { |self| ... } click to toggle source

Currently used queue. @return [Queue]

# File lib/unified-queues/multi/driver/em-jack.rb, line 156
def used
    yield self
end