Class: RateableElement

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/rating_for/rateable_element.rb

Instance Method Summary collapse

Instance Method Details

#<<(rating) ⇒ Object



18
19
20
# File 'lib/rating_for/rateable_element.rb', line 18

def <<(rating)
  self.add_rating(rating)
end

#add(value, rater = nil) ⇒ Object



30
31
32
# File 'lib/rating_for/rateable_element.rb', line 30

def add(value, rater = nil)
  self.add_rating(Rating.new(:rater => rater, :value => value))
end

#add_rating(rating) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/rating_for/rateable_element.rb', line 22

def add_rating(rating)
  return self.ratings unless rating.is_a?(Rating)
  self.ratings << rating
  self.total_rating += rating.value
  self.ratings_count += 1
  self.save
end

#average_ratingObject



10
11
12
# File 'lib/rating_for/rateable_element.rb', line 10

def average_rating
  self.avg_rating
end

#average_rating=(value) ⇒ Object



14
15
16
# File 'lib/rating_for/rateable_element.rb', line 14

def average_rating=(value)
  self.avg_rating = value
end

#clearObject



48
49
50
51
# File 'lib/rating_for/rateable_element.rb', line 48

def clear
  self.ratings = []
  self.recalculate_rating
end

#rated_by?(rater) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/rating_for/rateable_element.rb', line 57

def rated_by?(rater)
  not self.ratings.find_all_by_rater_id(rater.id, :conditions => {:rater_type => rater.class.name}).empty?
end

#recalculate_ratingObject



61
62
63
# File 'lib/rating_for/rateable_element.rb', line 61

def recalculate_rating
  self.recalculate_rating_without([])
end

#recalculate_rating_without(ratings) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rating_for/rateable_element.rb', line 65

def recalculate_rating_without(ratings)
  return unless (ratings.is_a? Rating or ratings.is_a? Array)

  self.total_rating = 0
  self.ratings_count = 0
  self.avg_rating = 0
  ratings = self.ratings - [ratings].compact.flatten
  ratings.each do |r|
    self.total_rating += r.value
    self.ratings_count += 1 
  end
  self.save
end

#remove_allObject



53
54
55
# File 'lib/rating_for/rateable_element.rb', line 53

def remove_all
  self.clear
end

#remove_by_rater(rater) ⇒ Object



42
43
44
45
46
# File 'lib/rating_for/rateable_element.rb', line 42

def remove_by_rater(rater)
  self.ratings.find_all_by_rater_id(rater.id, :conditions => {:rater_type => rater.class.name}).each do |rating|
    self.remove_rating(rating)
  end
end

#remove_rating(rating) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/rating_for/rateable_element.rb', line 34

def remove_rating(rating)
  return self.ratings unless rating.is_a?(Rating)
  self.total_rating -= rating.value
  self.ratings_count -= 1
  rating.destroy 
  self.save
end