Module: Mongoid::Letsrate

Extended by:
ActiveSupport::Concern
Defined in:
lib/mongoid/letsrate/model.rb,
lib/mongoid/letsrate/version.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VERSION =
'1.0.14'

Instance Method Summary collapse

Instance Method Details

#can_rate?(user) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/mongoid/letsrate/model.rb', line 44

def can_rate?(user)
  user.ratings_given.where(rateable_id: id, rateable_type: self.class.name).size.zero?
end

#rate(stars, user) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/mongoid/letsrate/model.rb', line 8

def rate(stars, user)
  if can_rate? user
    rates.create! do |r|
      r.stars = stars
      r.rater = user
    end
    update_rate_average(stars)
  else
    raise 'User has already rated.'
  end
end

#ratingObject

The average rating



21
22
23
# File 'lib/mongoid/letsrate/model.rb', line 21

def rating
  average ? average.avg : 0
end

#update_rate_average(stars) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/mongoid/letsrate/model.rb', line 25

def update_rate_average(stars)
  if average.nil?
    RatingCache.create! do |avg|
      puts "About to create average"
      avg.cacheable_id = self.id
      avg.cacheable_type = self.class.name
      avg.avg = stars
      avg.qty = 1
    end
  else
    puts "Found average"
    a = average
    all_stars = rates.map &:stars
    a.avg = all_stars.inject { |sum, value| sum + value } / all_stars.size
    a.qty = rates.count
    a.save!(validate: false)
  end
end