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