lib/lunar/sets.rb in lunar-0.1.1 vs lib/lunar/sets.rb in lunar-0.2.0
- old
+ new
@@ -1,12 +1,51 @@
module Lunar
- class Sets < Array
+ module Sets
+ def self.new(prefix, keywords, field = '*')
+ case keywords
+ when String
+ KeywordSets.new(prefix, keywords, field)
+ when Range
+ RangeSets.new(prefix, keywords, field)
+ else
+ raise TypeError, ":keywords should only be a String or Range"
+ end
+ end
+ end
+
+ class RangeSets < Array
+ attr :prefix, :field, :range
+
+ def initialize(prefix, range, field)
+ @prefix = prefix
+ @field = field
+ @range = range
+
+ super [write_and_retrieve_key]
+ end
+
+ def write_and_retrieve_key
+ zrange = Lunar.redis.zrangebyscore(Lunar.nest[prefix][field],
+ @range.first, @range.last)
+ zrange.each do |id|
+ Lunar.redis.zadd key, 1, id
+ end
+ # TODO :expire the key in X seconds where X is customizable
+ key.to_s
+ end
+
+ def key
+ @key ||= Lunar.nest[prefix][field]["#{ range.first }_TO_#{ range.last }"]
+ end
+ end
+
+ class KeywordSets < Array
attr :prefix, :words, :field
def initialize(prefix, keywords, field = '*')
@prefix = prefix
- @words = Words.new(keywords)
@field = field
+ @words = Words.new(keywords)
super(redis_set_keys)
end
protected