class IpValidator

Validator for email

Public Instance Methods

forbidden() click to toggle source
# File lib/rails_ip_validator.rb, line 9
def forbidden
  unless @forbidden.is_a? Array
    if options[:forbidden].nil?
      # default
      @forbidden = []
    else
      @forbidden = options[:forbidden].is_a?(Array) ? options[:forbidden] : [options[:forbidden]]
    end
  end
  @forbidden
end
forbidden?(key) click to toggle source
# File lib/rails_ip_validator.rb, line 21
def forbidden? key
  forbidden.include? key
end
validate_each(record, attribute, value) click to toggle source

main validator for email

# File lib/rails_ip_validator.rb, line 26
def validate_each(record, attribute, value)
  unless value.blank?

    # pre var
    valid = true

    begin
      ip = IPAddress.parse(value.to_s)

      valid = false if forbidden? :netmask and value =~ /\//
      valid = false if forbidden? :a and ip.a?
      valid = false if forbidden? :b and ip.b?
      valid = false if forbidden? :c and ip.c?
      valid = false if forbidden? :private and ip.private?
      valid = false if forbidden? :ipv4 and ip.class == IPAddress::IPv4
      valid = false if forbidden? :ipv6 and (ip.class == IPAddress::IPv6 or ip.class == IPAddress::IPv6::Mapped)
      if options[:custom].is_a? Proc
        valid = false unless options[:custom].call(ip) 
      end
    rescue
      valid = false
    end

    # ip valid
    record.errors.add(attribute, :invalid) unless valid
  end
end