ndlib/sipity

View on GitHub
app/forms/sipity/forms/work_submissions/etd/submission_date_form.rb

Summary

Maintainability
A
20 mins
Test Coverage
A
100%
require 'sipity/forms/processing_form'
require 'active_model/validations'

module Sipity
  module Forms
    module WorkSubmissions
      module Etd
        # Exposes a means updating the submission date. The submission date is
        # something assigned by the system, but is something that sometimes
        # requires editing by the grad school
        #
        # @see Sipity::ProcessingHooks::Etd::Works::SubmitForReviewProcessingHook
        class SubmissionDateForm
          ProcessingForm.configure(
            form_class: self, base_class: Models::Work, processing_subject_name: :work, attribute_names: [:submission_date]
          )

          include Conversions::ExtractInputDateFromInput
          def initialize(work:, requested_by:, attributes: {}, **keywords)
            self.work = work
            self.requested_by = requested_by
            self.processing_action_form = processing_action_form_builder.new(form: self, **keywords)
            self.submission_date = extract_input_date_from_input(:submission_date, attributes) { submission_date_from_work }
          end

          include ActiveModel::Validations
          validates :submission_date, presence: true

          def submit
            processing_action_form.submit do
              repository.update_work_attribute_values!(
                work: work,
                key: Models::AdditionalAttribute::ETD_SUBMISSION_DATE,
                values: submission_date
              )
            end
          end

          include Conversions::ConvertToDate
          def submission_date=(value)
            @submission_date = convert_to_date(value) { nil }
          end

          private

          def submission_date_from_work
            repository.work_attribute_values_for(
              work: work,
              key: Models::AdditionalAttribute::ETD_SUBMISSION_DATE,
              cardinality: 1
            )
          end
        end
      end
    end
  end
end