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