class Cacchern::SortedSet

Attributes

key[R]

Public Class Methods

contain_class(klass) click to toggle source
# File lib/cacchern/sorted_set.rb, line 10
def contain_class(klass)
  @value_class = klass
end
new(key) click to toggle source
# File lib/cacchern/sorted_set.rb, line 19
def initialize(key)
  @key = "#{self.class.name.underscore}:#{key}"
end
value_class() click to toggle source
# File lib/cacchern/sorted_set.rb, line 14
def value_class
  @value_class ||= SortableMember
end

Public Instance Methods

add(value) click to toggle source
# File lib/cacchern/sorted_set.rb, line 49
def add(value)
  return false unless value.instance_of?(self.class.value_class)

  if value.valid?
    Redis.current.zadd @key, value.value, value.key
    true
  else
    false
  end
end
add_all(values) click to toggle source
# File lib/cacchern/sorted_set.rb, line 60
def add_all(values)
  values.each { |value| add(value) }
end
get(id) click to toggle source
# File lib/cacchern/sorted_set.rb, line 23
def get(id)
  score = Redis.current.zscore @key, id
  return nil if score.nil?

  self.class.value_class.new(id, score)
end
order(direction = :asc) click to toggle source
# File lib/cacchern/sorted_set.rb, line 37
def order(direction = :asc)
  values = case direction
           when :asc
             Redis.current.zrange @key, 0, -1, withscores: true
           when :desc
             Redis.current.zrevrange @key, 0, -1, withscores: true
           else
             Redis.current.zrange @key, 0, -1, withscores: true
           end
  values.map { |value| self.class.value_class.new(value[0], value[1]) }
end
remove(key) click to toggle source
# File lib/cacchern/sorted_set.rb, line 64
def remove(key)
  Redis.current.zrem @key, key
end
remove_all() click to toggle source
# File lib/cacchern/sorted_set.rb, line 68
def remove_all
  Redis.current.del @key
end
where_by_score(min: '-inf', max: '+inf') click to toggle source
# File lib/cacchern/sorted_set.rb, line 30
def where_by_score(min: '-inf', max: '+inf')
  min = min.to_s if min.is_a? Numeric
  max = max.to_s if max.is_a? Numeric
  values = Redis.current.zrangebyscore @key, min, max, withscores: true
  values.map { |value| self.class.value_class.new(value[0], value[1]) }
end