module SimpleJSONSchema::Validators::Concerns::Format
Constants
- ASCII_REGEX
- DATE_TIME_OFFSET_REGEX
- EMAIL_REGEX
this is no good
- HOSTNAME_REGEX
- INVALID_QUERY_REGEX
- LABEL_REGEX_STRING
Public Instance Methods
valid_format(scope)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 15 def valid_format(scope) format = scope[:format] return if format.nil? return if valid_spec_format?(scope.value, format) scope.error(:format) end
Private Instance Methods
iri_escape(value)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 111 def iri_escape(value) value.gsub(ASCII_REGEX) do |match| us = match tmp = +'' us.each_byte do |uc| tmp << format('%%%02X', uc) end tmp end.force_encoding(Encoding::US_ASCII) end
parse_uri_scheme(value)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 90 def parse_uri_scheme(value) scheme, _, _, _, _, _, opaque, query, = URI::RFC3986_PARSER.split(value) # URI::RFC3986_PARSER.parse allows spaces in these and I don't think it should raise URI::InvalidURIError if INVALID_QUERY_REGEX.match?(query) || INVALID_QUERY_REGEX.match?(opaque) scheme end
valid_date_time?(value)
click to toggle source
rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
# File lib/simple_json_schema/validators/concerns/format.rb, line 66 def valid_date_time?(value) DateTime.rfc3339(value) DATE_TIME_OFFSET_REGEX.match?(value) rescue ArgumentError => e raise e unless e.message == 'invalid date' false end
valid_email?(value)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 75 def valid_email?(value) EMAIL_REGEX.match?(value) end
valid_hostname?(value)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 79 def valid_hostname?(value) HOSTNAME_REGEX.match?(value) && value.split('.').all? { |label| label.size <= 63 } end
valid_ip?(value, type)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 83 def valid_ip?(value, type) ip_address = IPAddr.new(value) type == :v4 ? ip_address.ipv4? : ip_address.ipv6? rescue IPAddr::InvalidAddressError false end
valid_spec_format?(value, format)
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
# File lib/simple_json_schema/validators/concerns/format.rb, line 26 def valid_spec_format?(value, format) case format when 'date-time' valid_date_time?(value) when 'date' valid_date_time?("#{value}T04:05:06.123456789+07:00") when 'time' valid_date_time?("2001-02-03T#{value}") when 'email' value.ascii_only? && valid_email?(value) when 'idn-email' valid_email?(value) when 'hostname' value.ascii_only? && valid_hostname?(value) when 'idn-hostname' valid_hostname?(value) when 'ipv4' valid_ip?(value, :v4) when 'ipv6' valid_ip?(value, :v6) when 'uri' valid_uri?(value) when 'uri-reference' valid_uri_reference?(value) when 'iri' valid_uri?(iri_escape(value)) when 'iri-reference' valid_uri_reference?(iri_escape(value)) # when 'uri-template' # valid_uri_template?(value) when 'json-pointer' Checker.json_pointer?(value) when 'relative-json-pointer' Checker.relative_json_pointer?(value) when 'regex' EcmaReValidator.valid?(value) end end
valid_uri?(value)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 98 def valid_uri?(value) !parse_uri_scheme(value).nil? rescue URI::InvalidURIError false end
valid_uri_reference?(value)
click to toggle source
# File lib/simple_json_schema/validators/concerns/format.rb, line 104 def valid_uri_reference?(value) parse_uri_scheme(value) true rescue URI::InvalidURIError false end