Sha256: 257f45d9975f1dfdc6c687ba29f9b2e87468ff1226fee8a861167d9e01e92e36

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module Rating
  class Rate < ActiveRecord::Base
    self.table_name = 'rating_rates'

    after_save :update_rating

    belongs_to :author   , polymorphic: true
    belongs_to :resource , polymorphic: true
    belongs_to :scopeable, polymorphic: true

    validates :author, :resource, :value, presence: true
    validates :value, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 100 }

    validates :author_id, uniqueness: {
      case_sensitive: false,
      scope:          %i[author_type resource_id resource_type scopeable_id scopeable_type]
    }

    def self.create(author:, resource:, scopeable: nil, value:)
      record = find_or_initialize_by(author: author, resource: resource, scopeable: scopeable)

      return record if record.persisted? && value == record.value

      record.value = value
      record.save

      record
    end

    def self.rate_for(author:, resource:, scopeable: nil)
      find_by author: author, resource: resource, scopeable: scopeable
    end

    private

    def update_rating
      ::Rating::Rating.update_rating resource, scopeable
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rating-0.2.0 lib/rating/models/rating/rate.rb