Packages
jsv
0.15.2
0.21.2
0.21.1
0.21.0
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
retired
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
A JSON Schema Validator with complete support for the latest specifications.
Current section
Files
Jump to
Current section
Files
lib/jsv/vocabulary/v7/core.ex
defmodule JSV.Vocabulary.V7.Core do
alias JSV.Ref
alias JSV.Vocabulary.V202012.Core, as: Fallback
use JSV.Vocabulary, priority: 100
@moduledoc """
Implementation of the core vocabulary with draft 7 sepecifiticies.
"""
@impl true
defdelegate init_validators(opts), to: Fallback
@impl true
take_keyword :"$ref", raw_ref, _acc, builder, raw_schema do
ref_relative_to_ns =
case {raw_schema, builder} do
# The ref is not relative to the current $id if defined at the same
# level and there is a parent $id.
#
# Parent cannot be :root because a ref cannot target :root, it must be a
# defined $id.
{%{"$id" => _}, %{ns: _, parent_ns: parent}} when parent != :root ->
parent
# Otherwise take the $id at the same level or higher
{_, %{ns: current_ns}} ->
current_ns
end
ref = unwrap_ok(Ref.parse(raw_ref, ref_relative_to_ns))
Fallback.put_ref(ref, :"$ref", [], builder)
end
consume_keyword :definitions
# $ref overrides any other keyword in Draft7
def handle_keyword(_kw_tuple, acc, builder, raw_schema) when is_map_key(raw_schema, "$ref") do
{acc, builder}
end
defdelegate handle_keyword(kw_tuple, acc, builder, raw_schema), to: Fallback
@impl true
defdelegate finalize_validators(acc), to: Fallback
@impl true
defdelegate validate(data, vds, vctx), to: Fallback
end