module Lunar class ResultSet include Enumerable attr :key def initialize(key, &block) @key = key @block = block end def each(&block) all.each(&block) end end class SortedResultSet < ResultSet def all(options = {}) start = Integer(options[:start] || 0) limit = Integer(options[:limit] || 0) finish = start + limit - 1 puts "Getting: #{key}, #{Lunar.redis.zrange(key, start, finish)}" if $GAME Lunar.redis.zrevrange(key, start, finish).map(&@block) end def size Lunar.redis.zcard(key) end end class UnsortedResultSet < ResultSet def all(options = {}) start = Integer(options[:start] || 0) limit = Integer(options[:limit] || 100) Lunar.redis.sort(key, :limit => [start, limit]).map(&@block) end def size Lunar.redis.scard(key) end end end