Class: Almicube::Ranking::Base

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

Direct Known Subclasses

DataRanking, SubRanking

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Base

Returns a new instance of Base.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/almicube/ranking/base.rb', line 7

def initialize(options={})
  @selector = options[:selector]
  @aggregator = options[:aggregator] || Aggregator::SumAggregator.new
  @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

  @selector.ranking = self unless @selector.nil?
  @aggregator.ranking = self unless @aggregator.nil?
  @bundler.ranking = self unless @bundler.nil?
end

Instance Attribute Details

#aggregatorObject (readonly)

Returns the value of attribute aggregator.



4
5
6
# File 'lib/almicube/ranking/base.rb', line 4

def aggregator
  @aggregator
end

#bundlerObject (readonly)

Returns the value of attribute bundler.



4
5
6
# File 'lib/almicube/ranking/base.rb', line 4

def bundler
  @bundler
end

#class_nameObject (readonly)

Returns the value of attribute class_name.



4
5
6
# File 'lib/almicube/ranking/base.rb', line 4

def class_name
  @class_name
end

#dateObject (readonly)

Returns the value of attribute date.



4
5
6
# File 'lib/almicube/ranking/base.rb', line 4

def date
  @date
end

#per_pageObject

Returns the value of attribute per_page.



5
6
7
# File 'lib/almicube/ranking/base.rb', line 5

def per_page
  @per_page
end

#selectorObject (readonly)

Returns the value of attribute selector.



4
5
6
# File 'lib/almicube/ranking/base.rb', line 4

def selector
  @selector
end

Instance Method Details

#aggregate(options = {}) ⇒ Object



47
48
49
50
51
52
# File 'lib/almicube/ranking/base.rb', line 47

def aggregate(options = {})
  aggregate! options
  true
rescue Exception => e
  false
end

#aggregate!(options = {}) ⇒ Object



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

def aggregate!(options = {})
  @aggregator.aggregate self
end

#bundled_keysObject



27
28
29
# File 'lib/almicube/ranking/base.rb', line 27

def bundled_keys
  bundler.keys || []
end

#connectionObject



31
32
33
# File 'lib/almicube/ranking/base.rb', line 31

def connection
  Almicube::Config.config.connection
end

#data?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/almicube/ranking/base.rb', line 54

def data?
  false
end

#page(page = 1) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/almicube/ranking/base.rb', line 35

def page(page=1)
  aggregate!
  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).all
  revrange.inject([]) { |l, v| l << records.detect { |r| r.to_param == v } }
end

#recordsObject



23
24
25
# File 'lib/almicube/ranking/base.rb', line 23

def records
  selector.records
end