Class: SchemaTools::RefResolver
- Inherits:
-
Object
- Object
- SchemaTools::RefResolver
- Defined in:
- lib/schema_tools/ref_resolver.rb
Class Method Summary collapse
- ._retrieve_pointer_from_object(pointer, object) ⇒ Object
-
.load_json_pointer(json_pointer, relative_to = nil) ⇒ Object
super basic resolving of JSON Pointer stuff in order to be able to load $ref parameter.
Class Method Details
._retrieve_pointer_from_object(pointer, object) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/schema_tools/ref_resolver.rb', line 45 def self._retrieve_pointer_from_object pointer, object # assume path to be the JSONPointer expression: # json/pointer/expression # and obj to be the ruby hash representation of the json path = pointer.is_a?(Array) ? pointer : pointer.split("/") while object != nil && component = path.shift prev = object component = component.to_i if object.is_a?(Array) && component =~ /^\d+$/ object = object[component] end return object end |
.load_json_pointer(json_pointer, relative_to = nil) ⇒ Object
super basic resolving of JSON Pointer stuff in order to be able to load $ref parameter.
$refs in JSON Schema are defined in JSON Pointer syntax: tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07
the hash to evaluate it against. If the pointer contains a uri to a referenced schema, an attempt is made to load
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/schema_tools/ref_resolver.rb', line 19 def self.load_json_pointer json_pointer, relative_to = nil # JSON Pointer is a big, abandoned WIP and we're going to # start by only implementing the part's we need ... if nil == (json_pointer =~ /^(.*)#(.*)/ ) raise "invalid json pointer: #{json_pointer}" end uri = $1.strip pointer = $2 schema = {} if ! uri.empty? uri = URI.parse(uri) raise "must currently be a relative uri: #{json_pointer}" if uri.absolute? # TODO use locale tools instance or base path from global SchemaTools.schema_path if relative_to path = relative_to.absolute_dir + "/" + uri.path else path = SchemaTools.schema_path + "/" + uri.path end open (path) {|f| schema = JSON.parse(f.read) } end return self._retrieve_pointer_from_object pointer, schema end |