Sha256: 845fda51e903ecb31e0864cef33005b243c1cc301977261b68fcebf42df23e02

Contents?: true

Size: 1.46 KB

Versions: 14

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module ActiveModel
  module Validations
    class IpAddressValidator < EachValidator
      PROTOCOL_OPTIONS = %i[v4 v6].freeze

      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

      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
    end

    module ClassMethods
      # Validates whether or not the specified URL is valid.
      #
      #   validates_ip_address :ip  #=> accepts both v4 and v6
      #   validates_ip_address :ip, only: :v4
      #   validates_ip_address :ip, only: :v6
      #
      def validates_ip_address(*attr_names)
        validates_with IpAddressValidator, _merge_attributes(attr_names)
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
validators-3.4.2 lib/validators/validates_ip_address.rb
validators-3.4.1 lib/validators/validates_ip_address.rb
validators-3.4.0 lib/validators/validates_ip_address.rb
validators-3.3.0 lib/validators/validates_ip_address.rb
validators-3.2.1 lib/validators/validates_ip_address.rb
validators-3.2.0 lib/validators/validates_ip_address.rb
validators-3.1.1 lib/validators/validates_ip_address.rb
validators-3.1.0 lib/validators/validates_ip_address.rb
validators-3.0.5 lib/validators/validates_ip_address.rb
validators-3.0.4 lib/validators/validates_ip_address.rb
validators-3.0.3 lib/validators/validates_ip_address.rb
validators-3.0.2 lib/validators/validates_ip_address.rb
validators-3.0.1 lib/validators/validates_ip_address.rb
validators-3.0.0 lib/validators/validates_ip_address.rb