class RedisQueue::Simple

Attributes

config[R]
name[R]

Public Class Methods

all() click to toggle source
# File lib/redis-call/redis_queue.rb, line 34
def all
  klass = self
  query do
    queued(keys "queue.*") do |result|
      (result.collect {|name| name.gsub /\Aqueue\./, ''} | RedisQueue.config.keys).sort.collect {|name| klass.new name}
    end
  end
end
delete(*names) click to toggle source
# File lib/redis-call/redis_queue.rb, line 43
def delete *names
  query do
    del *(names.map{|name| key(:queue)/name})
  end
end
new(name = nil, args = {}) click to toggle source
Calls superclass method RedisCall::new
# File lib/redis-call/redis_queue.rb, line 52
def initialize(name = nil, args = {})
  super(args)
  
  @name = key(name)
  @key = key(:queue)/name

  @config = args[:config] || RedisQueue.config[name] || {}
end

Public Instance Methods

backed_up_blocking_pop(timeout = 0) { |element| ... } click to toggle source

Returns element

# File lib/redis-call/redis_queue.rb, line 102
def backed_up_blocking_pop timeout = 0
  if raw_element = brpoplpush(@key, @key/:backup, timeout)
    element = decode(raw_element)
    
    if block_given?
      yield(element)
      remove_raw_backup_element raw_element
    else
      return element
    end
  end
end
backed_up_pop() click to toggle source
# File lib/redis-call/redis_queue.rb, line 97
def backed_up_pop
  queued(rpoplpush(@key, @key/:backup)) {|result| decode(result) if result}
end
backed_up_pop_all() click to toggle source
# File lib/redis-call/redis_queue.rb, line 128
def backed_up_pop_all
  raise(NonTransactionalMethod) if inside_transaction?
  result = []
  # We does not call backed_up_pop here, because of the edge case, when element is a string "null" which JSON-decoded as nil
  while element = rpoplpush(@key, @key/:backup)
    result.push decode(element)
  end
  result
end
backup_elements() click to toggle source
# File lib/redis-call/redis_queue.rb, line 150
def backup_elements
  queued(lgetall(@key/:backup)) {|result| result.map {|element| decode(element)}.reverse }
end
backup_length() click to toggle source
# File lib/redis-call/redis_queue.rb, line 196
def backup_length
  llen(@key/:backup)
end
blocking_pop(timeout = 0) click to toggle source

Returns element

# File lib/redis-call/redis_queue.rb, line 91
def blocking_pop timeout = 0
  if result = brpop(@key, timeout)
    decode(result.last)
  end
end
blocking_redirect(to, timeout = 0) click to toggle source

NOTE: Make sure your redis is 2.2.13 or higher to use this method

https://github.com/antirez/redis/commit/c47d152c8d96415de1af994b1a4bb3e0347caef3
http://code.google.com/p/redis/issues/detail?id=593
# File lib/redis-call/redis_queue.rb, line 170
def blocking_redirect to, timeout = 0
  brpoplpush(@key, key(:queue)/(to.kind_of?(RedisQueue::Simple) ? to.name : to), timeout)
end
decode(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 66
def decode element
  element
end
delete() click to toggle source
# File lib/redis-call/redis_queue.rb, line 200
def delete
  del(@key)
end
Also aliased as: destroy
destroy()
Alias for: delete
elements() click to toggle source
# File lib/redis-call/redis_queue.rb, line 146
def elements
  queued(lgetall(@key)) {|result| result.map {|element| decode(element)}.reverse }
end
encode(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 62
def encode element
  element
end
error_length() click to toggle source
# File lib/redis-call/redis_queue.rb, line 192
def error_length
  llen(@key/:error)
end
error_push(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 76
def error_push element
  lpush(@key/:error, encode(element))
end
error_push_raw(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 80
def error_push_raw element
  lpush(@key/:error, element)
end
filter_backup_element(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 184
def filter_backup_element element
  element
end
length() click to toggle source
# File lib/redis-call/redis_queue.rb, line 188
def length
  llen(@key)
end
pop() click to toggle source

Returns element

# File lib/redis-call/redis_queue.rb, line 86
def pop
  queued(rpop @key) {|result| decode(result) if result}
end
pop_all() click to toggle source
# File lib/redis-call/redis_queue.rb, line 138
def pop_all
  multi do
    queued(lgetall(@key)) {|result| result.map {|element| decode(element)}.reverse }
    queued(del @key)
  end
end
push(element) click to toggle source

Returns the number of elements inside the queue after the push operation.

# File lib/redis-call/redis_queue.rb, line 72
def push element
  lpush(@key, encode(element))
end
raw_backup_elements() click to toggle source
# File lib/redis-call/redis_queue.rb, line 154
def raw_backup_elements
  queued(lgetall(@key/:backup)) {|result| result.reverse }
end
remove_raw_backup_element(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 115
def remove_raw_backup_element element
  queued(lrem(@key/:backup, -1, element)) do |result|
    raise(RedisQueue::ElementNotFound, "Not found element #{element.inspect} in queue #{@key/:backup}") if result != 1
  end
end
remove_raw_element(element) click to toggle source
# File lib/redis-call/redis_queue.rb, line 121
def remove_raw_element element
  queued(lrem(@key, -1, element)) do |result|
    raise(RedisQueue::ElementNotFound, "Not found element #{element.inspect} in queue #{@key}") if result != 1
  end
end
restore_backup() click to toggle source
# File lib/redis-call/redis_queue.rb, line 174
def restore_backup
  raise(NonTransactionalMethod) if inside_transaction?
  
  while element = rpop(@key/:backup)
    if element = filter_backup_element(element)
      lpush(@key, element)
    end
  end
end
watch(*keys) click to toggle source
Calls superclass method
# File lib/redis-call/redis_queue.rb, line 159
def watch *keys
  keys.empty? ? super(@key) : super(*keys)
end
watch_backup() click to toggle source
# File lib/redis-call/redis_queue.rb, line 163
def watch_backup
  watch @key/:backup
end