class Almicube::Ranking::DataRanking

Constants

KEY_PATTERN

Public Class Methods

default_options() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 8
def default_options
  { attribute_name: :score,
    prefix: 'ranking',
    suffix: '',
    distinction: '%{date}',
    date_format: '%Y%m%d',
    date: Date.today,
    per_page: 10,
    as: Float,
    default_score: 0,
    class_name: nil }
end
new(options={}) click to toggle source
Calls superclass method Almicube::Ranking::Base::new
# File lib/almicube/ranking/data_ranking.rb, line 22
def initialize(options={})
  @options = self.class.default_options.merge options.symbolize_keys

  raise TypeError, ":as option is only allowed Integer or Float" unless [Integer, Float].include? @options[:as]

  super(@options)

  @selector ||= Selector::AllSelector.new self.options
  @options.delete(:selector)
  @selector.ranking = self

  @options[:aggregator] ||= Aggregator::SumAggregator.new
  @options[:aggregator].ranking = self
end

Public Instance Methods

attribute_name() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 47
def attribute_name
  @options.fetch(:attribute_name, :score).to_s.to_sym
end
data?() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 75
def data?
  selector.data_provider?
end
data_key() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 43
def data_key
  Almicube::Key.new self, @options.merge( type: :data )
end
date() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 51
def date
  @options.fetch(:date, Date.today)
end
default_score() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 83
def default_score
  @options.fetch(:default_score, 0)
end
exists?() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 79
def exists?
  connection.exists key
end
in(target) click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 55
def in(target)
  association_name = class_name.to_s.underscore.pluralize

  if ( target.class != class_name ) && target.respond_to?(association_name)
    _selector = Selector::HasManySelector.new target: target, association_name: association_name
    _selector.ranking = self
    return SubRanking.new self, selector: _selector
  end

  self
end
key(options={}) click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 39
def key(options={})
  Almicube::Key.new self, options.merge( type: :data )
end
options() click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 71
def options
  @options.select{ |k| k != :type }.merge({ selector: selector, aggregator: aggregator })
end
ranged(name) click to toggle source
# File lib/almicube/ranking/data_ranking.rb, line 67
def ranged(name)
  SubRanking.new(self).ranged(name)
end