class UnifiedQueues::Multi::Driver::UnifiedQueuesDriver::Single
Multi
queue driver for unified queues single queue interface.
Public Class Methods
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
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
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
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
Lists names of all available queues. @return [Array]
# File lib/unified-queues/multi/driver/unified-queues.rb, line 201 def list @queues.keys end
Lists all subscribed queues. @return [Array]
# File lib/unified-queues/multi/driver/unified-queues.rb, line 219 def list_subscribed [@subscribed.first] end
Lists all used queues. @return [Array]
# File lib/unified-queues/multi/driver/unified-queues.rb, line 210 def list_used [@used.first] end
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
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
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
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
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
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
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