module ElegantLeaderboard::ModelAdditions

Public Class Methods

extended(base) click to toggle source

Hookup event for ModelAdditions Module

# File lib/elegant_leaderboard/model_additions.rb, line 5
def self.extended(base)
  base.class_eval do
    model_name = self.name.underscore

    define_singleton_method :standing_methods do
      {
        current_rank: "current_#{model_name}_rank".to_sym,
        rank_around: "#{model_name.pluralize}_around".to_sym,
        top_rankers: "top_#{model_name.pluralize}".to_sym
      }
    end
  end
end

Public Instance Methods

leaderboard(name, args = {}) click to toggle source
# File lib/elegant_leaderboard/model_additions.rb, line 19
def leaderboard(name, args = {})
  define_method name.to_sym do |user_limit = 3|
    rank_evaluator = RankEvaluator.new(
      model_object: self,
      config: Argument.new(args.merge(model_klass: self.class))
    )

    Leaderboard.new(
      model_klass: self.class,
      rank_evaluator: rank_evaluator
    )
  end
end