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.210.ed204b0 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.110.6570b45 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.72.d18d096 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.23.da7f96b lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.16.def5e85 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.15.a24f5ff lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.891.647580e lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.889.d503e42 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.883.f5f063b lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.884.4bd86e6 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.869.9609b39 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.856.8c0fec5 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.809.bdfa8c3 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.785.05d4af9 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.744.99f67fc lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.720.44fbabd lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.713.e5c3150 lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.681.7c84f4a lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.663.ceecdee lib/rails_connector/rateable.rb
infopark_rails_connector-6.8.0.beta.200.650.7c93155 lib/rails_connector/rateable.rb