1 2 3 4 5 6 7 8 9 10 11 12 13 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# frozen_string_literal: true
module JSONSchemer
module Output
FRAGMENT_ENCODE_REGEX = /[^\w?\/:@\-.~!$&'()*+,;=]/
attr_reader :keyword, :schema
def x_error
return @x_error if defined?(@x_error)
@x_error = schema.parsed['x-error']&.message(error_key)
end
private
def result(instance, instance_location, keyword_location, valid, nested = nil, type: nil, annotation: nil, details: nil, ignore_nested: false)
Result.new(self, instance, instance_location, keyword_location, valid, nested, type, annotation, details, ignore_nested, valid ? 'annotations' : 'errors')
end
def escaped_keyword
@escaped_keyword ||= Location.escape_json_pointer_token(keyword)
end
def join_location(location, keyword)
Location.join(location, keyword)
end
def fragment_encode(location)
Format.percent_encode(location, FRAGMENT_ENCODE_REGEX)
end
# :nocov:
if Symbol.method_defined?(:name)
def stringify(key)
key.is_a?(Symbol) ? key.name : key.to_s
end
else
def stringify(key)
key.to_s
end
end
# :nocov:
def deep_stringify_keys(obj)
case obj
when Hash
obj.each_with_object({}) do |(key, value), out|
out[stringify(key)] = deep_stringify_keys(value)
end
when Array
obj.map { |item| deep_stringify_keys(item) }
else
obj
end
end
end
end
|