class ElegantLeaderboard::RankEvaluator
Attributes
model_object[R]
Public Class Methods
new(attributes = {})
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 10 def initialize(attributes = {}) @model_object = attributes[:model_object] @config = attributes[:config] end
Public Instance Methods
current_rank()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 15 def current_rank return high_rankers unless equal_rankers? high_rankers + position_amongst_equal_rankers end
rank_around()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 20 def rank_around offset = current_rank - (around_limit + 1) limit_setting = around_limit * 2 + 1 if offset < 0 limit_setting += offset offset = 0 end top_rankers(limit_setting).offset(offset) end
top_rankers(user_limit)
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 32 def top_rankers(user_limit) model_klass.order("#{column_name} DESC, #{sort_order}") .limit(user_limit) end
Private Instance Methods
column_value()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 41 def column_value @column_value ||= model_object.public_send(column_name) end
equal_rankers()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 56 def equal_rankers @equal_rankers ||= model_klass.where("#{column_name} = ?", column_value) .order(sort_order) .select(:id) end
equal_rankers?()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 52 def equal_rankers? equal_rankers && equal_rankers.count > 1 end
high_rankers()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 45 def high_rankers rankers_count = model_klass.where("#{column_name} > ?", column_value) .order("#{column_name} DESC").count @high_rankers ||= rankers_count + 1 end
position_amongst_equal_rankers()
click to toggle source
# File lib/elegant_leaderboard/rank_evaluator.rb, line 62 def position_amongst_equal_rankers equal_rankers.index(model_object).to_i end