class Mindtrick::Set
Attributes
max_length[R]
max_terms[R]
prefix[R]
redis[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/mindtrick/set.rb, line 5 def initialize(opts = {}) @redis = opts[:redis] || Redis.new @prefix = opts[:prefix] || 'mndtrk' @max_terms = opts[:max_terms] || 250 @max_length = opts[:max_length] || 15 end
Public Instance Methods
add(term)
click to toggle source
# File lib/mindtrick/set.rb, line 12 def add(term) fragmentize(term) do |k| redis.zincrby(k, 1, term) enforce_term_limit(k) end end
fragmentize(term) { |prefixed| ... }
click to toggle source
# File lib/mindtrick/set.rb, line 28 def fragmentize(term) term = Text.new(term) term.each_fragment do |f| if f.length <= max_length yield f.prefixed(prefix) else break end end end
seed(term)
click to toggle source
# File lib/mindtrick/set.rb, line 19 def seed(term) fragmentize(term) do |k| unless redis.zscore(k, term) redis.zadd(k, 1, term) enforce_term_limit(k) end end end
suggest(partial, count = 10)
click to toggle source
# File lib/mindtrick/set.rb, line 39 def suggest(partial, count = 10) key = Text.new(partial).prefixed(prefix) redis.zrevrange key, 0, count end
Private Instance Methods
enforce_term_limit(key)
click to toggle source
# File lib/mindtrick/set.rb, line 46 def enforce_term_limit(key) if (over = redis.zcount(key, 0, '+inf') - max_terms) > 0 partials = redis.zrange(key, 0, over * 3).sample(over) redis.zrem(key, partials) end end