Sha256: 4388e84f4d2041fa9a8d06aed92bbfd6b67463c49689d997d6ae57bea675fad3

Contents?: true

Size: 1.98 KB

Versions: 1

Compression:

Stored size: 1.98 KB

Contents

# frozen_string_literal: true

module Thredded
  class PostModerationRecord < ActiveRecord::Base
    include Thredded::ModerationState
    # Rails 4 doesn't support enum _prefix
    if Rails::VERSION::MAJOR >= 5
      enum previous_moderation_state: moderation_states, _prefix: :previous
    end
    validates :previous_moderation_state, presence: true

    scope :order_newest_first, -> { order(created_at: :desc, id: :desc) }

    belongs_to :messageboard, inverse_of: :post_moderation_records
    validates :messageboard_id, presence: true
    belongs_to :post, inverse_of: :moderation_records
    belongs_to :post_user, class_name: Thredded.user_class_name, inverse_of: :thredded_post_moderation_records
    belongs_to :moderator, class_name: Thredded.user_class_name, inverse_of: :thredded_post_moderation_records

    validates_each :moderation_state do |record, attr, value|
      if record.previous_moderation_state == value
        record.errors.add attr, "Post moderation_state is already #{value}"
      end
    end

    # @param [Thredded.user_class] moderator
    # @param [Thredded::Post] post
    # @param [Symbol, String] previous_moderation_state
    # @param [Symbol, String] moderation_state
    # @return [Thredded::PostModerationRecord] the newly created persisted record
    def self.record!(moderator:, post:, previous_moderation_state:, moderation_state:)
      # Rails 4 doesn't support enum _prefix
      if Rails::VERSION::MAJOR < 5
        previous_moderation_state = moderation_states[previous_moderation_state.to_s]
      end
      create!(
        previous_moderation_state: previous_moderation_state,
        moderation_state:          moderation_state,
        moderator:                 moderator,
        post:                      post,
        post_content:              post.content,
        post_user:                 post.user,
        post_user_name:            post.user.try(:thredded_display_name),
        messageboard_id:           post.messageboard_id,
      )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thredded-0.12.2 app/models/thredded/post_moderation_record.rb