Sha256: a5f12ecb7af7b1c8d92f01c6df8c20946ba0b293de1879ec006bb4680743936f
Contents?: true
Size: 1.71 KB
Versions: 21
Compression:
Stored size: 1.71 KB
Contents
module RailsConnector # # This module provides a mixin for the CMS object model. It provides a +ratings+ association and well as several helper methods. module Rateable # returns all Ratings for this Obj. def ratings Rating.where(:obj_id => id) end # Creates/updates the rating for a CMS object. def rate(score) rating = ratings.find_by_score(score) || ratings.build(:score => score) rating.count += 1 rating.save end # Returns a count for the particular score for a CMS object. def count_for_score(score) rating = ratings.find_by_score(score) rating ? rating.count : 0 end # Determines if a CMS object has already been rated. def rated? !ratings.empty? end # Calculates the average rating for a CMS object. def average_rating raise TypeError unless rated? sum, count = ratings.inject([0, 0]) do |(sum, count), rating| [sum + rating.score * rating.count, count + rating.count] end sum.to_f / count.to_f end # Calculates the average rating for a CMS object in per cent. def average_rating_in_percent if rated? (100 * average_rating / Rating::MAXIMUM).to_i else 0 end end # Resets the ratings for a CMS object. def reset_rating ratings.destroy_all end # Redefine this method in your application's <tt>obj_extensions.rb</tt> in order to define conditions for allowing a CMS object to be rated. def allow_rating?; true; end # Redefine this method in your application's <tt>obj_extensions.rb</tt> in order to define conditions for allowing a CMS object to be rated anonymously. def allow_anonymous_rating?; true; end end end
Version data entries
21 entries across 21 versions & 1 rubygems
Version | Path |
---|---|
infopark_rails_connector-6.8.0.beta.200.621.4c8e1b0 | lib/rails_connector/rateable.rb |