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