module Mongoid::Rateable::ClassMethods

Public Instance Methods

default_rater(rater=nil, &block) click to toggle source
# File lib/mongoid_rateable/rateable.rb, line 86
def default_rater rater=nil, &block
  case rater
  when Symbol, String
    define_method :default_rater do
      self.send(rater) # fx to use owner or user relation
    end
  when nil
    return unless block_given?
    define_method :default_rater do
      self.instance_eval(&block)
    end
  else
    raise ArgumentError, "Must take symbol or block argument"
  end
end
in_rating_range?(value) click to toggle source
# File lib/mongoid_rateable/rateable.rb, line 46
def in_rating_range?(value)
  range = rating_range if respond_to?(:rating_range)
  range ? range.include?(value.to_i) : true
end
rate_config(options = {}) click to toggle source
# File lib/mongoid_rateable/rateable.rb, line 80
def rate_config options = {}, &block
  set_rating_range options[:range]
  rateable_by options[:raters]
  default_rater options[:default_rater], &block
end
rateable_by(*clazzes) click to toggle source
# File lib/mongoid_rateable/rateable.rb, line 71
def rateable_by *clazzes
  @rater_classes = []
  return if clazzes.compact.empty?
  clazzes.each do |clazz|
    raise ArgumentError, "A rateable must be a class, was: #{clazz}" unless clazz.respond_to?(:new)
    @rater_classes << clazz
  end
end
rater_classes() click to toggle source
# File lib/mongoid_rateable/rateable.rb, line 37
def rater_classes
  @rater_classes ||= []
end
set_rating_range(range = nil) click to toggle source

macro to create dynamic :rating_range class method! can now even take an Array and find the range of values!

# File lib/mongoid_rateable/rateable.rb, line 53
def set_rating_range range = nil
  raterange = case range
  when Array
    arr = range.sort
    Range.new arr.first, arr.last
  when Range
    range
  when nil
    (1..5)
  else
    raise ArgumentError, "Must be a range, was: #{range}"
  end

  (class << self; self; end).send(:define_method, :rating_range) do
    raterange
  end
end
valid_rater_class?(clazz) click to toggle source
# File lib/mongoid_rateable/rateable.rb, line 41
def valid_rater_class? clazz
  return true if !rater_classes || rater_classes.empty?
  rater_classes.include? clazz
end