lib/ost.rb in ost-0.1.6 vs lib/ost.rb in ost-1.0.0.rc1

- old
+ new

@@ -1,57 +1,60 @@ -require "nest" +require "nido" +require "redic" module Ost - TIMEOUT = (ENV["OST_TIMEOUT"] || 2).to_i + TIMEOUT = ENV["OST_TIMEOUT"] || "2" class Queue attr :key attr :backup def initialize(name) - @key = Nest.new(:ost, redis)[name] + @key = Nido.new(:ost)[name] @backup = @key[Socket.gethostname][Process.pid] + @stopping = false end def push(value) - key.lpush(value) + redis.call("LPUSH", @key, value) end def each(&block) - @stopping = false - loop do - break if @stopping + item = redis.call("BRPOPLPUSH", @key, @backup, TIMEOUT) - item = @key.brpoplpush(@backup, TIMEOUT) + if item + block.call(item) + redis.call("LPOP", @backup) + end - next unless item - - block.call(item) - - @backup.lpop + break if @stopping end end def stop @stopping = true end def items - key.lrange(0, -1) + redis.call("LRANGE", @key, 0, -1) end alias << push alias pop each def size - key.llen + redis.call("LLEN", @key) end def redis - @redis ||= Redis.connect(Ost.options) + defined?(@redis) ? @redis : Ost.redis end + + def redis=(redis) + @redis = redis + end end @queues = Hash.new do |hash, key| hash[key] = Queue.new(key) end @@ -62,15 +65,13 @@ def self.stop @queues.each { |_, queue| queue.stop } end - @options = nil - - def self.connect(options = {}) - @options = options + def self.redis + @redis ||= Redic.new end - def self.options - @options || {} + def self.redis=(redis) + @redis = redis end end