module Almicube::Model

Public Class Methods

included(base) click to toggle source
# File lib/almicube/model.rb, line 5
    def self.included(base)
      base.class_eval do
        class << self

          def ranking_with(ranker, options={})
            ranker = ranker.to_s
            options = options.symbolize_keys!.merge(class_name: self, attribute_name: ranker.to_sym)

            @ranking_builders ||= {}
            @ranking_builders[ranker.to_sym] = Almicube::Builder.new options

            class_eval <<-EVAL
              def self.#{ranker}_ranking(date = Date.today)
                @rankings ||= {}
                @rankings[:"#{ranker}:\#{date.to_s}"] ||= @ranking_builders[:#{ranker}].data(date)
              end

              def #{ranker}_ranking(date = Date.today)
                Almicube::AssociationProxy.new(self.class.#{ranker}_ranking(date), self)
              end

              attr_accessor :current_ranking

              def #{ranker}_rank
                @current_ranking.rank(self)
              end

              def #{ranker}_score
                @current_ranking.score(self)
              end

              def #{ranker}_incr
                @current_ranking.incr(score)
              end
            EVAL
          end

        end

      end
    end
ranking_with(ranker, options={}) click to toggle source
# File lib/almicube/model.rb, line 9
          def ranking_with(ranker, options={})
            ranker = ranker.to_s
            options = options.symbolize_keys!.merge(class_name: self, attribute_name: ranker.to_sym)

            @ranking_builders ||= {}
            @ranking_builders[ranker.to_sym] = Almicube::Builder.new options

            class_eval <<-EVAL
              def self.#{ranker}_ranking(date = Date.today)
                @rankings ||= {}
                @rankings[:"#{ranker}:\#{date.to_s}"] ||= @ranking_builders[:#{ranker}].data(date)
              end

              def #{ranker}_ranking(date = Date.today)
                Almicube::AssociationProxy.new(self.class.#{ranker}_ranking(date), self)
              end

              attr_accessor :current_ranking

              def #{ranker}_rank
                @current_ranking.rank(self)
              end

              def #{ranker}_score
                @current_ranking.score(self)
              end

              def #{ranker}_incr
                @current_ranking.incr(score)
              end
            EVAL
          end