module RankedModel::ClassMethods

Public Instance Methods

ranker(name) click to toggle source
# File lib/ranked-model.rb, line 39
def ranker name
  rankers.find do |ranker|
    ranker.name == name
  end
end

Private Instance Methods

column_default(ranker) click to toggle source
# File lib/ranked-model.rb, line 71
def column_default ranker
  column_defaults[ranker.name.to_s] if ActiveRecord::Base.connected? && table_exists?
end
ranks(*args) click to toggle source
# File lib/ranked-model.rb, line 47
def ranks *args
  self.rankers ||= []
  ranker = RankedModel::Ranker.new(*args)

  if column_default(ranker)
    raise NonNilColumnDefault, %Q{Your ranked model column "#{ranker.name}" must not have a default value in the database.}
  end

  self.rankers << ranker
  attr_reader "#{ranker.name}_position"
  define_method "#{ranker.name}_position=" do |position|
    if position.present?
      send "#{ranker.column}_will_change!"
      instance_variable_set "@#{ranker.name}_position", position
    end
  end

  define_method "#{ranker.name}_rank" do
    ranker.with(self).relative_rank
  end

  public "#{ranker.name}_position", "#{ranker.name}_position="
end