class UnifiedQueues::Multi::Driver::UnifiedQueuesDriver::Single

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/unified-queues.rb, line 70
def initialize(cls, *args, &block)
    @queues = { }
    @class = [cls, args, block]
end

Public Instance Methods

[](name)
Alias for: get
[]=(name, queue)
Alias for: insert
create(name, cls = @class) click to toggle source

Creates new queue under given name.

@param [Object] name identification @return [Queue] new queue

# File lib/unified-queues/multi/driver/unified-queues.rb, line 105
def create(name, cls = @class)
    if not name.in? @queues
        self[name] = cls.first::new(*cls.second, &cls.third)
    else
        self[name]
    end        
end
get(name) click to toggle source

Returns named queue from instance. @param [Object] name queue name

# File lib/unified-queues/multi/driver/unified-queues.rb, line 131
def get(name)
    @queues[name]
end
Also aliased as: []
insert(name, queue) click to toggle source

Inserts queue instance to queues.

@param [Object] name identification @param [Containers::Heap] queue heap instance

# File lib/unified-queues/multi/driver/unified-queues.rb, line 120
def insert(name, queue) 
    @queues[name] = queue
end
Also aliased as: []=
list() click to toggle source

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

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

Lists all subscribed queues. @return [Array]

# File lib/unified-queues/multi/driver/unified-queues.rb, line 219
def list_subscribed
    [@subscribed.first]
end
list_used() click to toggle source

Lists all used queues. @return [Array]

# File lib/unified-queues/multi/driver/unified-queues.rb, line 210
def list_used
    [@used.first]
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/driver/unified-queues.rb, line 94
def pop(blocking = false, &block)
    self.subscribed.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 queues

# File lib/unified-queues/multi/driver/unified-queues.rb, line 82
def push(value, key = value, &block)
    self.used.push(value, 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/unified-queues.rb, line 157
def subscribe(name, &block)
    self.create(name)
    @subscribed = [name, self[name]]
    yield if not block.nil?        
end
subscribed() { |second| ... } click to toggle source

Currently subscribed queue. @return [Queue]

# File lib/unified-queues/multi/driver/unified-queues.rb, line 191
def subscribed(&block)
    yield @subscribed.second if not block.nil?
    return @subscribed.second
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/unified-queues.rb, line 168
def unsubscribe(name, &block)
    if not @subscribed.nil? and (@subscribed.first == name)
        @subscribed = nil
    end
    
    yield if not block.nil?
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/unified-queues.rb, line 144
def use(name, &block)
    self.create(name)
    @used = [name, self[name]]
    yield if not block.nil?
end
used() { |second| ... } click to toggle source

Currently used queue. @return [Queue]

# File lib/unified-queues/multi/driver/unified-queues.rb, line 181
def used(&block)
    yield @used.second if not block.nil?
    return @used.second
end