Skip to content

Commit 8ac15d8

Browse files
Merge pull request #133 from davishmcclurg/json-pointer-ref
Resolve JSON pointer refs locally
2 parents 63224cf + dacec83 commit 8ac15d8

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/json_schemer/schema/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ def validate_ref(instance, ref, &block)
324324
ref_uri.fragment = nil
325325
end
326326

327-
ref_object = if ids.key?(ref_uri) || ref_uri.to_s == @base_uri.to_s
327+
ref_object = if ids.key?(ref_uri) || ref_uri.to_s.empty? || ref_uri.to_s == @base_uri.to_s
328328
self
329329
else
330330
child(resolve_ref(ref_uri), base_uri: ref_uri)

test/ref_test.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,4 +301,27 @@ def test_it_handles_base_uri_change_folder_in_subschema
301301
assert(schema.valid?({ 'list' => [1] }))
302302
refute(schema.valid?({ 'list' => ['a'] }))
303303
end
304+
305+
def test_it_handles_relative_base_uri_json_pointer_ref
306+
refs = {
307+
'relative' => {
308+
'definitions' => {
309+
'foo' => {
310+
'type' => 'integer'
311+
}
312+
},
313+
'properties' => {
314+
'bar' => {
315+
'$ref' => '#/definitions/foo'
316+
}
317+
}
318+
}
319+
}
320+
schema = JSONSchemer.schema(
321+
{ '$ref' => 'relative' },
322+
:ref_resolver => proc { |uri| refs[uri.to_s] }
323+
)
324+
assert(schema.valid?({ 'bar' => 1 }))
325+
refute(schema.valid?({ 'bar' => '1' }))
326+
end
304327
end

0 commit comments

Comments
 (0)