Class: IpCidrValidator
- Inherits:
- 
      ActiveModel::EachValidator
      
        - Object
- ActiveModel::EachValidator
- IpCidrValidator
 
- Defined in:
- app/validators/ip_cidr_validator.rb
Overview
IpCidrValidator
Validates that an IP is a valid IPv4 or IPv6 CIDR address.
Example:
class Group < ActiveRecord::Base
  validates :ip, presence: true, ip_cidr: true
end
Instance Method Summary collapse
- 
  
    
      #validate_each(record, attribute, value)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    rubocop:disable Gitlab/NamespacedClass – This is a globally shareable validator, but it’s unclear what namespace it should belong in. 
Instance Method Details
#validate_each(record, attribute, value) ⇒ Object
rubocop:disable Gitlab/NamespacedClass – This is a globally shareable validator, but it’s unclear what namespace it should belong in
| 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # File 'app/validators/ip_cidr_validator.rb', line 14 def validate_each(record, attribute, value) # NOTE: We want this to be usable for nullable fields, so we don't validate presence. # Use a separate `presence` validation for the field if needed. return true if value.blank? # rubocop:disable Layout/LineLength -- The error message is bigger than the line limit unless valid_cidr_format?(value) record.errors.add( attribute, format(_( "IP '%{value}' is not a valid CIDR: IP should be followed by a slash followed by an integer subnet mask (for example: '192.168.1.0/24')"), value: value ) ) return end # rubocop:enable Layout/LineLength IPAddress.parse(value) rescue ArgumentError => e record.errors.add( attribute, format(_("IP '%{value}' is not a valid CIDR: %{message}"), value: value, message: e.) ) end |