class ActiveModel::Validations::IpAddressValidator

Constants

PROTOCOL_OPTIONS

Public Instance Methods

check_validity!() click to toggle source
# File lib/validators/validates_ip_address.rb, line 35
def check_validity!
  return unless options.key?(:only)
  return if PROTOCOL_OPTIONS.include?(options[:only])

  raise ArgumentError, ":only accepts a symbol that can be either :v6 or :v4"
end
validate_each(record, attribute, value) click to toggle source
# File lib/validators/validates_ip_address.rb, line 8
def validate_each(record, attribute, value)
  return if value.blank? && options[:allow_blank]
  return if value.nil? && options[:allow_nil]

  valid = false

  case options[:only]
  when :v4
    valid = Validators::Ip.v4?(value.to_s)
    scope = :invalid_ipv4_address
  when :v6
    valid = Validators::Ip.v6?(value.to_s)
    scope = :invalid_ipv6_address
  else
    valid = Validators::Ip.valid?(value.to_s)
    scope = :invalid_ip_address
  end

  return if valid

  record.errors.add(
    attribute, scope,
    message: options[:message],
    value: value
  )
end