Skip to content

Commit

Permalink
Small fixes to make STI working correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
zewelor committed Nov 12, 2014
1 parent 4467889 commit 7739476
Showing 1 changed file with 9 additions and 17 deletions.
26 changes: 9 additions & 17 deletions lib/ratyrate/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,7 @@ def update_rate_average_dirichlet(stars, dimension=nil)
davg = posterior.map{ |i, v| i * v }.inject { |a, b| a + b }.to_f / sum

if average(dimension).nil?
RatingCache.create! do |avg|
avg.cacheable_id = self.id
avg.cacheable_type = self.class.name
avg.qty = 1
avg.avg = davg
avg.dimension = dimension
end
send("create_#{average_assoc_name(dimension)}!", { avg: davg, qty: 1, dimension: dimension })
else
a = average(dimension)
a.qty = rates(dimension).count
Expand All @@ -46,13 +40,7 @@ def update_rate_average_dirichlet(stars, dimension=nil)

def update_rate_average(stars, dimension=nil)
if average(dimension).nil?
RatingCache.create! do |avg|
avg.cacheable_id = self.id
avg.cacheable_type = self.class.name
avg.avg = stars
avg.qty = 1
avg.dimension = dimension
end
send("create_#{average_assoc_name(dimension)}!", { avg: stars, qty: 1, dimension: dimension })
else
a = average(dimension)
a.qty = rates(dimension).count
Expand All @@ -62,7 +50,7 @@ def update_rate_average(stars, dimension=nil)
end

def update_current_rate(stars, user, dimension)
current_rate = user.ratings_given.where(rater_id: user.id, rateable_id: self.id, dimension: dimension).take
current_rate = rates.where(rater_id: user.id, dimension: dimension).take
current_rate.stars = stars
current_rate.save!(validate: false)

Expand Down Expand Up @@ -103,11 +91,15 @@ def calculate_overall_average
end

def average(dimension=nil)
dimension ? self.send("#{dimension}_average") : rate_average_without_dimension
send(average_assoc_name(dimension))
end

def average_assoc_name(dimension = nil)
dimension ? "#{dimension}_average" : 'rate_average_without_dimension'
end

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

def rates(dimension=nil)
Expand Down

0 comments on commit 7739476

Please sign in to comment.