Sha256: 1477c6b5f1ea6ccd2991fa7ca066bc216766eaad1eadd5601ec8f7b3ebfc4279

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

module Approval
  module RespondForm
    class Base
      include ::ActiveModel::Model

      attr_accessor :user, :reason, :request

      def initialize(user:, reason:, request:)
        @user    = user
        @reason  = reason
        @request = request
      end

      with_options presence: true do
        validates :user
        validates :reason, length: { maximum: Approval.config.comment_maximum }
        validates :request
      end

      def save
        return false unless valid?
        prepare(&:save)
      end

      def save!
        raise ::ActiveRecord::RecordInvalid unless valid?
        prepare(&:save!)
      end

      private

        def prepare
          raise NotImplementedError, "you must implement #{self.class}##{__method__}"
        end

        def ensure_user_cannot_respond_to_my_request
          return if Approval.config.permit_to_respond_to_own_request?
          errors.add(:user, :cannot_respond_to_own_request) if user.try(:id) == request.request_user_id
        end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
approval-0.3.5 lib/approval/models/approval/respond_form/base.rb
approval-0.3.4 lib/approval/models/approval/respond_form/base.rb