Module: SchemaGraphy::DataQuery::JSONPointer
- Defined in:
- lib/schemagraphy/data_query/json_pointer.rb
Overview
Resolves JSON Pointer queries against a Hash or Array.
Class Method Summary
collapse
Class Method Details
.resolve(data, pointer) ⇒ Object
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/schemagraphy/data_query/json_pointer.rb', line 9
def resolve data, pointer
return data if pointer.nil? || pointer == ''
raise ArgumentError, "Invalid JSON Pointer: #{pointer}" unless pointer.start_with?('/')
tokens = pointer.split('/')[1..]
tokens.reduce(data) do |current, token|
key = unescape(token)
resolve_token(current, key, pointer)
end
end
|
.resolve_token(current, key, pointer) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/schemagraphy/data_query/json_pointer.rb', line 20
def resolve_token current, key, pointer
case current
when Array
index = Integer(key, 10)
current.fetch(index)
when Hash
return current.fetch(key) if current.key?(key)
return current.fetch(key.to_sym) if current.key?(key.to_sym)
raise KeyError, "JSON Pointer not found: #{pointer}"
else
raise KeyError, "JSON Pointer not found: #{pointer}"
end
rescue ArgumentError, IndexError, KeyError
raise KeyError, "JSON Pointer not found: #{pointer}"
end
|
.unescape(token) ⇒ Object
37
38
39
|
# File 'lib/schemagraphy/data_query/json_pointer.rb', line 37
def unescape token
token.gsub('~1', '/').gsub('~0', '~')
end
|