Class: Almicube::Ranking::Base
- Inherits:
-
Object
- Object
- Almicube::Ranking::Base
- Defined in:
- lib/almicube/ranking/base.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#aggregator ⇒ Object
Returns the value of attribute aggregator.
-
#bundler ⇒ Object
Returns the value of attribute bundler.
-
#class_name ⇒ Object
readonly
Returns the value of attribute class_name.
-
#date ⇒ Object
readonly
Returns the value of attribute date.
-
#per_page ⇒ Object
Returns the value of attribute per_page.
-
#selector ⇒ Object
Returns the value of attribute selector.
Instance Method Summary collapse
- #aggregate(options = {}) ⇒ Object
- #aggregate!(options = {}) ⇒ Object
- #bundled_keys ⇒ Object
- #cogs ⇒ Object
- #connection ⇒ Object
- #data? ⇒ Boolean
- #incr(item, score = 1) ⇒ Object
-
#initialize(options = {}) ⇒ Base
constructor
A new instance of Base.
- #page(page = 1) ⇒ Object
- #rank(item) ⇒ Object
- #records ⇒ Object
- #score(item) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Base
Returns a new instance of Base.
7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/almicube/ranking/base.rb', line 7 def initialize(={}) self.selector = [:selector] self.aggregator = [:aggregator] || Aggregator::SumAggregator.new self.bundler = [:bundler] @prefix = [:prefix] @suffix = [:suffix] @date = [:date] || Date.today @class_name = [:class_name] @class_name = @class_name.constantize if @class_name.is_a? String @per_page = [:per_page] || 10 end |
Instance Attribute Details
#aggregator ⇒ Object
Returns the value of attribute aggregator.
4 5 6 |
# File 'lib/almicube/ranking/base.rb', line 4 def aggregator @aggregator end |
#bundler ⇒ Object
Returns the value of attribute bundler.
4 5 6 |
# File 'lib/almicube/ranking/base.rb', line 4 def bundler @bundler end |
#class_name ⇒ Object (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 |
#date ⇒ Object (readonly)
Returns the value of attribute date.
4 5 6 |
# File 'lib/almicube/ranking/base.rb', line 4 def date @date end |
#per_page ⇒ Object
Returns the value of attribute per_page.
5 6 7 |
# File 'lib/almicube/ranking/base.rb', line 5 def per_page @per_page end |
#selector ⇒ Object
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
68 69 70 71 72 73 |
# File 'lib/almicube/ranking/base.rb', line 68 def aggregate( = {}) aggregate! true rescue Exception => e false end |
#aggregate!(options = {}) ⇒ Object
62 63 64 65 66 |
# File 'lib/almicube/ranking/base.rb', line 62 def aggregate!( = {}) cogs.each { |cog| cog.before_aggregate } @aggregator.aggregate self cogs.each { |cog| cog.after_aggregate } end |
#bundled_keys ⇒ Object
23 24 25 |
# File 'lib/almicube/ranking/base.rb', line 23 def bundled_keys bundler.keys || [] end |
#cogs ⇒ Object
54 55 56 57 58 59 60 |
# 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 ⇒ Object
27 28 29 |
# File 'lib/almicube/ranking/base.rb', line 27 def connection Almicube::Config.config.connection end |
#data? ⇒ Boolean
75 76 77 |
# File 'lib/almicube/ranking/base.rb', line 75 def data? false end |
#incr(item, score = 1) ⇒ Object
87 88 89 |
# File 'lib/almicube/ranking/base.rb', line 87 def incr(item, score = 1) connection.zincrby key, score, item.to_param end |
#page(page = 1) ⇒ Object
31 32 33 34 35 36 37 |
# 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) ⇒ Object
83 84 85 |
# File 'lib/almicube/ranking/base.rb', line 83 def rank(item) connection.zrevrank(key, item.to_param) + 1 end |
#records ⇒ Object
19 20 21 |
# File 'lib/almicube/ranking/base.rb', line 19 def records selector.records end |
#score(item) ⇒ Object
79 80 81 |
# File 'lib/almicube/ranking/base.rb', line 79 def score(item) ( connection.zscore key, item.to_param ) || @options.fetch(:default_score, 0) end |