class UnifiedQueues::Multi

More queues single interface.

More queues single interface.

Universal multi queue interface.

Universal multi queue interface.

Constants

DRIVERS

Contains assignment of classnames to drivers. @return [Hash]

Attributes

driver[RW]

Contains driver for specific class instance. @return [UnifiedQueues::Multi::Driver] driver instance

Public Class Methods

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

Constructor.

@param [Class|UnifiedQueues::Multi::Driver] cls required class object or driver instance @param [Array] *args array of arguments for the queue constructor @param [Proc] &block block for the queue constructor

# File lib/unified-queues/multi.rb, line 45
def initialize(cls, *args, &block)
    if cls.kind_of? UnifiedQueues::Multi::Driver
        @driver = cls
    else
        self.assign_driver(cls, args, block)
    end
end

Public Instance Methods

assign_driver(cls, args, block) click to toggle source

Assigns driver to interface according to given class name.

@param [Class] cls required class @param [Array] args array of arguments for the queue constructor @param [Proc] block block for the queue constructor @return [UnifiedQueues::Multi::Driver] new driver instance

# File lib/unified-queues/multi.rb, line 62
def assign_driver(cls, args, block)
    _cls = cls
    if not _cls.kind_of? Class
        _cls = cls.class
    end

    driver = nil
    name = nil
    
    self.class::DRIVERS.each_pair do |_name, _driver|
        begin
            _module = Module::get_module(_name.to_s)
        rescue NameError
            next
        end
        
        if _cls <= _module
            driver = _driver
            name = _name
            break
        end
    end
    
    ###
    
    require "unified-queues/multi/driver/" << driver
    
    path = name.to_s.split("::")
    classname = path.shift << 'Driver::' << path.join('::')
    _module = Module::get_module("UnifiedQueues::Multi::Driver::" << classname)
    
    args = [cls] + args
    @driver = _module::new(*args, &block)
    return @driver
end
close(&block) click to toggle source

Closes the session.

# File lib/unified-queues/multi.rb, line 202
def close(&block)
    @driver.close(&block)  
end
Also aliased as: close!
close!(&block)
Alias for: close
list(&block) click to toggle source

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

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

Lists all subscribed queues. @return [Array]

# File lib/unified-queues/multi.rb, line 194
def list_subscribed(&block)
    @driver.list_subscribed(&block)
end
list_used(&block) click to toggle source

Lists all used queues. @return [Array]

# File lib/unified-queues/multi.rb, line 185
def list_used(&block)
    @driver.list_used(&block)
end
pop(blocking = false, &block) click to toggle source

Pops value from the queue. In contrast to default Queue library, blocks or returns nil if empty.

@param [Boolean|Integer] blocking true or timeout if it should block, false otherwise @return [Object|nil]

# File lib/unified-queues/multi.rb, line 117
def pop(blocking = false, &block)
    @driver.pop(blocking, &block)
end
push(value, key = value, &block) click to toggle source

Pushes value to the currently used queue.

@param [Object] value @param [Object] key key for priority purposes

# File lib/unified-queues/multi.rb, line 105
def push(value, key = value, &block)
    @driver.push(value, key, &block)
end
subscribe(name, &block) click to toggle source

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

@param [Object] name name of the required queue

# File lib/unified-queues/multi.rb, line 140
def subscribe(name, &block)
    @driver.subscribe(name, &block)
end
subscribed(&block) click to toggle source

Currently subscribed queue. @return [Queue]

# File lib/unified-queues/multi.rb, line 167
def subscribed(&block)
    @driver.subscribed(&block)
end
unsubscribe(name, &block) click to toggle source

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

# File lib/unified-queues/multi.rb, line 149
def unsubscribe(name, &block)
    @driver.unsubscribe(name, &block)
end
use(name, &block) 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.rb, line 128
def use(name, &block)
    @driver.use(name, &block)
end
used(&block) click to toggle source

Currently used queue. @return [Queue]

# File lib/unified-queues/multi.rb, line 158
def used(&block)
    @driver.used(&block)
end