class Almicube::Ranking::Base

Attributes

aggregator[R]
bundler[R]
class_name[R]
date[R]
per_page[RW]
prefix[R]
selector[R]
suffix[R]

Public Class Methods

new(options={}) click to toggle source
# File lib/almicube/ranking/base.rb, line 7
def initialize(options={})
  self.selector = options[:selector]
  self.aggregator = options[:aggregator] || Aggregator::SumAggregator.new
  self.bundler = options[:bundler]
  @prefix = options[:prefix]
  @suffix = options[:suffix]
  @date = options[:date] || Date.today
  @class_name = options[:class_name]
  @class_name = @class_name.constantize if @class_name.is_a? String
  @per_page = options[:per_page] || 10
end

Public Instance Methods

aggregate(options = {}) click to toggle source
# File lib/almicube/ranking/base.rb, line 68
def aggregate(options = {})
  aggregate! options
  true
rescue Exception => e
  false
end
aggregate!(options = {}) click to toggle source
# File lib/almicube/ranking/base.rb, line 62
def aggregate!(options = {})
  cogs.each { |cog| cog.before_aggregate }
  @aggregator.aggregate self
  cogs.each { |cog| cog.after_aggregate }
end
aggregator=(value) click to toggle source
# File lib/almicube/ranking/base.rb, line 44
def aggregator=(value)
  @aggregator = value
  @aggregator.ranking = self unless @aggregator.nil?
end
bundled_keys() click to toggle source
# File lib/almicube/ranking/base.rb, line 23
def bundled_keys
  bundler.keys || []
end
bundler=(value) click to toggle source
# File lib/almicube/ranking/base.rb, line 49
def bundler=(value)
  @bundler = value
  @bundler.ranking = self unless @bundler.nil?
end
cogs() click to toggle source
# File lib/almicube/ranking/base.rb, line 54
def cogs
  cogs = []
  cogs << @selector unless @selector.nil?
  cogs << @aggregator unless @aggregator.nil?
  cogs << @bundler unless @bundler.nil?
  cogs
end
connection() click to toggle source
# File lib/almicube/ranking/base.rb, line 27
def connection
  Almicube::Config.config.connection
end
data?() click to toggle source
# File lib/almicube/ranking/base.rb, line 75
def data?
  false
end
incr(item, score = 1) click to toggle source
# File lib/almicube/ranking/base.rb, line 87
def incr(item, score = 1)
  connection.zincrby key, score, item.to_param
end
page(page=1) click to toggle source
# File lib/almicube/ranking/base.rb, line 31
def page(page=1)
  page = [1, page.to_i].max
  revrange = connection.zrevrange(key, (page - 1) * per_page, page * per_page - 1)
  records = class_name.where("id IN (?)", revrange)
  records.each { |record| record.current_ranking = self }
  revrange.inject([]) { |l, v| l << records.detect { |r| r.to_param == v } }
end
rank(item) click to toggle source
# File lib/almicube/ranking/base.rb, line 83
def rank(item)
  connection.zrevrank(key, item.to_param) + 1
end
records() click to toggle source
# File lib/almicube/ranking/base.rb, line 19
def records
  selector.records
end
score(item) click to toggle source
# File lib/almicube/ranking/base.rb, line 79
def score(item)
  ( connection.zscore key, item.to_param ) || @options.fetch(:default_score, 0)
end
selector=(value) click to toggle source
# File lib/almicube/ranking/base.rb, line 39
def selector=(value)
  @selector = value
  @selector.ranking = self unless @selector.nil?
end