class ActiveModel::Validations::ConfirmationValidator
:nodoc:
def confirmation_value_equal?(record, attribute, value, confirmed)
def confirmation_value_equal?(record, attribute, value, confirmed) if !options[:case_sensitive] && value.is_a?(String) value.casecmp(confirmed) == 0 else value == confirmed end end
def initialize(options)
def initialize(options) super({ case_sensitive: true }.merge!(options)) setup!(options[:class]) end
def setup!(klass)
def setup!(klass) klass.attr_reader(*attributes.filter_map do |attribute| :"#{attribute}_confirmation" unless klass.method_defined?(:"#{attribute}_confirmation") end) klass.attr_writer(*attributes.filter_map do |attribute| :"#{attribute}_confirmation" unless klass.method_defined?(:"#{attribute}_confirmation=") end) end
def validate_each(record, attribute, value)
def validate_each(record, attribute, value) unless (confirmed = record.public_send("#{attribute}_confirmation")).nil? unless confirmation_value_equal?(record, attribute, value, confirmed) human_attribute_name = record.class.human_attribute_name(attribute) record.errors.add(:"#{attribute}_confirmation", :confirmation, **options.except(:case_sensitive).merge!(attribute: human_attribute_name)) end end end