Class: IpAddressValidator
- Inherits:
-
LocalizedEachValidator
- Object
- LocalizedEachValidator
- IpAddressValidator
- Defined in:
- lib/ip_address_validator.rb
Overview
Validates IPv4 and IPv6 addresses. Uses the ‘invalid_ip` error message key.
Options
| | | |:—————-|:————————————————————-| | ‘:ipv4_only` | If `true`, IPv6 addresses are considered invalid. | | `:ipv6_only` | If `true`, IPv4 addresses are considered invalid. | | `:allow_cidr` | If `true`, CIDR notation (e.g. `10.0.0.0/24`) is allowed. | | | Defaults to `false`, so values containing `/` are rejected. | | `:no_loopback` | If `true`, loopback addresses (e.g. `127.0.0.1`, `::1`) | | | are considered invalid. | | `:no_private` | If `true`, RFC 1918 / unique local addresses (e.g. | | | `10.0.0.0/8`, `fc00::/7`) are considered invalid. | | `:no_reserved` | If `true`, reserved addresses (link-local, multicast, | | | unspecified, etc.) are considered invalid. | | `:message` | A custom message to use if the IP is invalid. | | `:allow_nil` | If `true`, `nil` values are allowed. | | `:allow_blank` | If `true`, blank values are allowed. |
Constant Summary collapse
- VERSION =
IpAddressValidatorGem::VERSION
Instance Method Summary collapse
Instance Method Details
#valid?(_record, _attribute, value) ⇒ Boolean
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ip_address_validator.rb', line 41 def valid?(_record, _attribute, value) return false unless value.is_a?(String) return false if ![:allow_cidr] && value.include?("/") ip = begin IPAddr.new(value) rescue IPAddr::Error, ArgumentError return false end return false if ip.ipv4? && [:ipv6_only] return false if ip.ipv6? && [:ipv4_only] return false if [:no_loopback] && ip.loopback? return false if [:no_private] && private_ip?(ip) return false if [:no_reserved] && reserved_ip?(ip) true end |