Class: Almicube::Ranking::DataRanking

Inherits:
Base
  • Object
show all
Defined in:
lib/almicube/ranking/data_ranking.rb

Constant Summary collapse

KEY_PATTERN =

Example) %sample_key

/%{([a-z_]+)}/

Instance Attribute Summary

Attributes inherited from Base

#aggregator, #bundler, #class_name, #per_page, #selector

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#aggregate, #aggregate!, #bundled_keys, #cogs, #connection, #incr, #page, #rank, #records, #score

Constructor Details

#initialize(options = {}) ⇒ DataRanking

Returns a new instance of DataRanking.

Raises:

  • (TypeError)


22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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

Class Method Details

.default_optionsObject



8
9
10
11
12
13
14
15
16
17
18
19
# 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

Instance Method Details

#attribute_nameObject



47
48
49
# File 'lib/almicube/ranking/data_ranking.rb', line 47

def attribute_name
  @options.fetch(:attribute_name, :score).to_s.to_sym
end

#data?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/almicube/ranking/data_ranking.rb', line 75

def data?
  selector.data_provider?
end

#data_keyObject



43
44
45
# File 'lib/almicube/ranking/data_ranking.rb', line 43

def data_key
  Almicube::Key.new self, @options.merge( type: :data )
end

#dateObject



51
52
53
# File 'lib/almicube/ranking/data_ranking.rb', line 51

def date
  @options.fetch(:date, Date.today)
end

#default_scoreObject



83
84
85
# File 'lib/almicube/ranking/data_ranking.rb', line 83

def default_score
  @options.fetch(:default_score, 0)
end

#exists?Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/almicube/ranking/data_ranking.rb', line 79

def exists?
  connection.exists key
end

#in(target) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
# 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 = {}) ⇒ Object



39
40
41
# File 'lib/almicube/ranking/data_ranking.rb', line 39

def key(options={})
  Almicube::Key.new self, options.merge( type: :data )
end

#optionsObject



71
72
73
# File 'lib/almicube/ranking/data_ranking.rb', line 71

def options
  @options.select{ |k| k != :type }.merge({ selector: selector, aggregator: aggregator })
end

#ranged(name) ⇒ Object



67
68
69
# File 'lib/almicube/ranking/data_ranking.rb', line 67

def ranged(name)
  SubRanking.new(self).ranged(name)
end