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
Contains driver for specific class instance. @return [UnifiedQueues::Multi::Driver] driver instance
Public Class Methods
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
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
Closes the session.
# File lib/unified-queues/multi.rb, line 202 def close(&block) @driver.close(&block) end
Lists names of all available queues. @return [Array]
# File lib/unified-queues/multi.rb, line 176 def list(&block) @driver.list(&block) end
Lists all subscribed queues. @return [Array]
# File lib/unified-queues/multi.rb, line 194 def list_subscribed(&block) @driver.list_subscribed(&block) end
Lists all used queues. @return [Array]
# File lib/unified-queues/multi.rb, line 185 def list_used(&block) @driver.list_used(&block) 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.rb, line 117 def pop(blocking = false, &block) @driver.pop(blocking, &block) end
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
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
Currently subscribed queue. @return [Queue]
# File lib/unified-queues/multi.rb, line 167 def subscribed(&block) @driver.subscribed(&block) end
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
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
Currently used queue. @return [Queue]
# File lib/unified-queues/multi.rb, line 158 def used(&block) @driver.used(&block) end