class RedisOpen3::Enum

Constants

EOF

magic :(

EOF_REGX
ERR
ERR_REGX

Attributes

list_name[R]

Public Class Methods

new(list_name, opts={}) click to toggle source
# File lib/redis_open3/enum.rb, line 19
def initialize(list_name, opts={})
  @list_name = list_name
  @timeout   = opts[:timeout]
  @redis     = opts[:redis] || Redis.new(opts[:redis_opts] || {})
end

Public Instance Methods

<<(input) click to toggle source
# File lib/redis_open3/enum.rb, line 25
def <<(input)
  push(input)
end
close() click to toggle source
# File lib/redis_open3/enum.rb, line 29
def close
  push(EOF)
end
delete() click to toggle source
# File lib/redis_open3/enum.rb, line 42
def delete
  @redis.del(list_name)
end
each(&block) click to toggle source
# File lib/redis_open3/enum.rb, line 33
def each(&block)
  Enumerator.new do |y|
    until (line = pop.chomp) =~ EOF_REGX
      raise Error, "Received error signal." if line =~ ERR_REGX
      y << line
    end
  end.each(&block)
end
fail() click to toggle source
# File lib/redis_open3/enum.rb, line 46
def fail
  push(ERR)
end

Private Instance Methods

pop() click to toggle source
# File lib/redis_open3/enum.rb, line 57
def pop
  popped = @redis.blpop(list_name, @timeout)
  @redis.expire(list_name, @timeout + 10)
  if popped
    popped.last
  else
    raise TimeoutError, "Timeout of #{@timeout.inspect} seconds expired on list_name #{list_name.inspect}."
  end
end
push(string) click to toggle source
# File lib/redis_open3/enum.rb, line 52
def push(string)
  @redis.rpush(list_name, string)
  @redis.expire(list_name, @timeout + 10)
end