Class: Almicube::Ranking::DataRanking
- Inherits:
-
Base
- Object
- Base
- Almicube::Ranking::DataRanking
show all
- Defined in:
- lib/almicube/ranking/data_ranking.rb
Constant Summary
collapse
- KEY_PATTERN =
/%{([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.
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_options ⇒ Object
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_name ⇒ Object
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
75
76
77
|
# File 'lib/almicube/ranking/data_ranking.rb', line 75
def data?
selector.data_provider?
end
|
#data_key ⇒ Object
43
44
45
|
# File 'lib/almicube/ranking/data_ranking.rb', line 43
def data_key
Almicube::Key.new self, @options.merge( type: :data )
end
|
#date ⇒ Object
51
52
53
|
# File 'lib/almicube/ranking/data_ranking.rb', line 51
def date
@options.fetch(:date, Date.today)
end
|
#default_score ⇒ Object
83
84
85
|
# File 'lib/almicube/ranking/data_ranking.rb', line 83
def default_score
@options.fetch(:default_score, 0)
end
|
#exists? ⇒ 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
|
#options ⇒ Object
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
|