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