18F/identity-idp

View on GitHub
app/forms/rules_of_use_form.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

class RulesOfUseForm
  include ActiveModel::Model
  include ActionView::Helpers::TranslationHelper

  validate :validate_terms_accepted

  attr_reader :terms_accepted

  def initialize(user)
    @user = user
  end

  def validate_terms_accepted
    return if @terms_accepted

    errors.add(:terms_accepted, t('forms.validation.required_checkbox'), type: :required_checkbox)
  end

  def submit(params)
    @terms_accepted = params[:terms_accepted] == '1'
    if valid?
      process_successful_submission
    else
      self.success = false
    end

    FormResponse.new(success: success, errors: errors)
  end

  private

  attr_accessor :success, :user

  def process_successful_submission
    self.success = true
    user.update!(accepted_terms_at: Time.zone.now)
  end
end