Module: Mongoid::Rateable::ClassMethods
- Defined in:
- lib/mongoid_rateable/rateable.rb
Instance Method Summary collapse
- #default_rater(rater = nil, &block) ⇒ Object
- #in_rating_range?(value) ⇒ Boolean
- #rate_config(options = {}, &block) ⇒ Object
- #rateable_by(*clazzes) ⇒ Object
- #rater_classes ⇒ Object
-
#set_rating_range(range = nil) ⇒ Object
macro to create dynamic :rating_range class method! can now even take an Array and find the range of values!.
- #valid_rater_class?(clazz) ⇒ Boolean
Instance Method Details
#default_rater(rater = nil, &block) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# 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) ⇒ Boolean
46 47 48 49 |
# File 'lib/mongoid_rateable/rateable.rb', line 46 def (value) range = if respond_to?(:rating_range) range ? range.include?(value.to_i) : true end |
#rate_config(options = {}, &block) ⇒ Object
80 81 82 83 84 |
# File 'lib/mongoid_rateable/rateable.rb', line 80 def rate_config = {}, &block [:range] rateable_by [:raters] default_rater [:default_rater], &block end |
#rateable_by(*clazzes) ⇒ Object
71 72 73 74 75 76 77 78 |
# 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 ⇒ Object
37 38 39 |
# File 'lib/mongoid_rateable/rateable.rb', line 37 def rater_classes @rater_classes ||= [] end |
#set_rating_range(range = nil) ⇒ Object
macro to create dynamic :rating_range class method! can now even take an Array and find the range of values!
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mongoid_rateable/rateable.rb', line 53 def 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) ⇒ Boolean
41 42 43 44 |
# 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 |