Module: Pangea::Resources::Validators::NetworkValidators
- Defined in:
- lib/pangea/resources/validators/network_validators.rb
Constant Summary collapse
- CIDR_PATTERN =
Pre-compiled regex constants — compiled once, reused on every call.
%r{\A\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/\d{1,2}\z}.freeze
- DOMAIN_PATTERN =
/\A(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\z/i.freeze
- WILDCARD_DOMAIN_PATTERN =
/\A(\*\.)?(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\z/i.freeze
- EMAIL_PATTERN =
/\A[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\z/.freeze
Instance Method Summary collapse
- #valid_cidr!(value) ⇒ Object
- #valid_domain!(value, allow_wildcard: false) ⇒ Object
- #valid_email!(value) ⇒ Object
- #valid_port!(value) ⇒ Object
- #valid_port_range!(from_port, to_port) ⇒ Object
Instance Method Details
#valid_cidr!(value) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/pangea/resources/validators/network_validators.rb', line 27 def valid_cidr!(value) unless value.match?(CIDR_PATTERN) raise ValidationError, "Invalid CIDR format: #{value}" end ip, prefix = value.split('/') octets = ip.split('.').map(&:to_i) prefix_int = prefix.to_i unless octets.all? { |o| (0..255).include?(o) } raise ValidationError, "Invalid IP address in CIDR: #{value}" end unless (0..32).include?(prefix_int) raise ValidationError, "Invalid prefix length (0-32): #{value}" end value end |
#valid_domain!(value, allow_wildcard: false) ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/pangea/resources/validators/network_validators.rb', line 63 def valid_domain!(value, allow_wildcard: false) pattern = allow_wildcard ? WILDCARD_DOMAIN_PATTERN : DOMAIN_PATTERN unless value.match?(pattern) raise ValidationError, "Invalid domain name: #{value}" end value end |
#valid_email!(value) ⇒ Object
72 73 74 75 76 77 |
# File 'lib/pangea/resources/validators/network_validators.rb', line 72 def valid_email!(value) unless value.match?(EMAIL_PATTERN) raise ValidationError, "Invalid email format: #{value}" end value end |
#valid_port!(value) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/pangea/resources/validators/network_validators.rb', line 47 def valid_port!(value) unless value.is_a?(Integer) && (0..65535).include?(value) raise ValidationError, "Port must be 0-65535, got: #{value}" end value end |
#valid_port_range!(from_port, to_port) ⇒ Object
54 55 56 57 58 59 60 61 |
# File 'lib/pangea/resources/validators/network_validators.rb', line 54 def valid_port_range!(from_port, to_port) valid_port!(from_port) valid_port!(to_port) if from_port > to_port raise ValidationError, "from_port (#{from_port}) cannot exceed to_port (#{to_port})" end true end |