18F/identity-idp

View on GitHub
app/forms/idv/ssn_format_form.rb

Summary

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

module Idv
  class SsnFormatForm
    include ActiveModel::Model
    include FormSsnFormatValidator

    ATTRIBUTES = [:ssn].freeze

    attr_accessor :ssn

    def self.model_name
      ActiveModel::Name.new(self, nil, 'doc_auth')
    end

    def initialize(incoming_ssn)
      @ssn = incoming_ssn
      @updating_ssn = ssn.present?
    end

    def submit(params)
      consume_params(params)

      FormResponse.new(
        success: valid?,
        errors: errors,
        extra: { pii_like_keypaths: [[:same_address_as_id], [:errors, :ssn],
                                     [:error_details, :ssn]] },
      )
    end

    def updating_ssn?
      @updating_ssn
    end

    private

    def consume_params(params)
      params.each do |key, value|
        raise_invalid_ssn_parameter_error(key) unless ATTRIBUTES.include?(key.to_sym)
        send(:"#{key}=", value)
      end
    end

    def raise_invalid_ssn_parameter_error(key)
      raise ArgumentError, "#{key} is an invalid ssn attribute"
    end
  end
end