Sha256: 04fb8391f2f0462352900928262cb711ce06f67e4c1e315589995fb0a4c4ab26

Contents?: true

Size: 1011 Bytes

Versions: 2

Compression:

Stored size: 1011 Bytes

Contents

module Ratable
  module Models
    module Rater
      extend ActiveSupport::Concern

      attr_reader :has_one

      module ActiveRecordExtension
        def acts_as_rater(options={has_one: false})
          @has_one = options[:has_one]
          include Rater
        end
      end

      included do
        if @has_one
          has_one :rating, class_name: 'Ratable::Rating', dependent: :destroy, as: :rater
        else
          has_many :ratings, class_name: 'Ratable::Rating', dependent: :destroy, as: :rater
        end
        has_one :rating_summary, class_name: 'Ratable::RatingSummary', as: :rater
      end

      def ratees
        if @has_one
          rating.ratee
        else
          ratings.includes(:ratee).collect { |rating| rating.ratee }
        end
      end

      def rate(options={})
        options.reject! { |k| k == :rater }
        if @has_one
          self.rating.create(options)
        else
          self.ratings.create(options)
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ratable-0.0.2 lib/ratable/models/rater.rb
ratable-0.0.1 lib/ratable/models/rater.rb