Class: AddressFormatValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
app/validators/address_format_validator.rb

Overview

Validates that attribute is a valid address.

Instance Method Summary collapse

Instance Method Details

#validate_each(object, attribute, value) ⇒ void

This method returns an undefined value.

Validates that attribute's value on object is a valid address.

Parameters:

  • record (#errors, ApplicationRecord)

    ActiveModel or ActiveRecord

  • attribute (Symbol)

    name of address attribute.

  • value (String, nil)

    address.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/validators/address_format_validator.rb', line 11

def validate_each(object, attribute, value)
  error_message_block = lambda{ object.errors.add attribute, "must be a valid (IP or hostname) address" }
  begin
    # Checks for valid IP addresses
    if value.is_a? IPAddr
      potential_ip = value.dup
    else
      potential_ip = IPAddr.new(value)
    end
    error_message_block.call unless potential_ip.ipv4? || potential_ip.ipv6?
  rescue IPAddr::InvalidAddressError, IPAddr::AddressFamilyError, ArgumentError
    # IP address resolution failed, checks for valid hostname
    error_message_block.call unless (value && value.match?(/\A#{URI::PATTERN::HOSTNAME}\z/))
  end
end