jsi-dev 0.0.8 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +3 -4
- data/CHANGELOG.md +19 -0
- data/LICENSE.md +2 -3
- data/README.md +87 -43
- data/docs/{glossary.md → Glossary.md} +84 -52
- data/jsi.gemspec +1 -1
- data/lib/jsi/base/mutability.rb +48 -0
- data/lib/jsi/base/node.rb +66 -52
- data/lib/jsi/base.rb +592 -176
- data/lib/jsi/jsi_coder.rb +4 -2
- data/lib/jsi/metaschema_node/bootstrap_schema.rb +118 -59
- data/lib/jsi/metaschema_node.rb +244 -154
- data/lib/jsi/ptr.rb +45 -17
- data/lib/jsi/ref.rb +197 -0
- data/lib/jsi/registry.rb +311 -0
- data/lib/jsi/schema/cxt/child_application.rb +35 -0
- data/lib/jsi/schema/cxt/inplace_application.rb +37 -0
- data/lib/jsi/schema/cxt.rb +80 -0
- data/lib/jsi/schema/dialect.rb +137 -0
- data/lib/jsi/schema/draft04.rb +113 -5
- data/lib/jsi/schema/draft06.rb +123 -5
- data/lib/jsi/schema/draft07.rb +157 -5
- data/lib/jsi/schema/draft202012.rb +303 -0
- data/lib/jsi/schema/dynamic_anchor_map.rb +63 -0
- data/lib/jsi/schema/element.rb +69 -0
- data/lib/jsi/schema/elements/anchor.rb +13 -0
- data/lib/jsi/schema/elements/array_validation.rb +82 -0
- data/lib/jsi/schema/elements/comment.rb +10 -0
- data/lib/jsi/schema/{validation → elements}/const.rb +11 -7
- data/lib/jsi/schema/elements/contains.rb +59 -0
- data/lib/jsi/schema/elements/contains_minmax.rb +91 -0
- data/lib/jsi/schema/elements/content_encoding.rb +10 -0
- data/lib/jsi/schema/elements/content_media_type.rb +10 -0
- data/lib/jsi/schema/elements/content_schema.rb +16 -0
- data/lib/jsi/schema/elements/default.rb +11 -0
- data/lib/jsi/schema/elements/definitions.rb +19 -0
- data/lib/jsi/schema/elements/dependencies.rb +99 -0
- data/lib/jsi/schema/elements/dependent_required.rb +49 -0
- data/lib/jsi/schema/elements/dependent_schemas.rb +69 -0
- data/lib/jsi/schema/elements/dynamic_ref.rb +69 -0
- data/lib/jsi/schema/elements/enum.rb +26 -0
- data/lib/jsi/schema/elements/examples.rb +10 -0
- data/lib/jsi/schema/elements/format.rb +10 -0
- data/lib/jsi/schema/elements/id.rb +30 -0
- data/lib/jsi/schema/elements/if_then_else.rb +82 -0
- data/lib/jsi/schema/elements/info_bool.rb +10 -0
- data/lib/jsi/schema/elements/info_string.rb +10 -0
- data/lib/jsi/schema/elements/items.rb +93 -0
- data/lib/jsi/schema/elements/items_prefixed.rb +96 -0
- data/lib/jsi/schema/elements/not.rb +31 -0
- data/lib/jsi/schema/elements/numeric.rb +137 -0
- data/lib/jsi/schema/elements/numeric_draft04.rb +77 -0
- data/lib/jsi/schema/elements/object_validation.rb +55 -0
- data/lib/jsi/schema/elements/pattern.rb +35 -0
- data/lib/jsi/schema/elements/properties.rb +145 -0
- data/lib/jsi/schema/elements/property_names.rb +48 -0
- data/lib/jsi/schema/elements/ref.rb +62 -0
- data/lib/jsi/schema/elements/required.rb +34 -0
- data/lib/jsi/schema/elements/self.rb +24 -0
- data/lib/jsi/schema/elements/some_of.rb +180 -0
- data/lib/jsi/schema/elements/string_validation.rb +57 -0
- data/lib/jsi/schema/elements/type.rb +43 -0
- data/lib/jsi/schema/elements/unevaluated_items.rb +54 -0
- data/lib/jsi/schema/elements/unevaluated_properties.rb +54 -0
- data/lib/jsi/schema/elements/xschema.rb +10 -0
- data/lib/jsi/schema/elements/xvocabulary.rb +10 -0
- data/lib/jsi/schema/elements.rb +101 -0
- data/lib/jsi/schema/issue.rb +3 -4
- data/lib/jsi/schema/schema_ancestor_node.rb +105 -52
- data/lib/jsi/schema/vocabulary.rb +36 -0
- data/lib/jsi/schema.rb +598 -383
- data/lib/jsi/schema_classes.rb +195 -141
- data/lib/jsi/schema_set.rb +85 -128
- data/lib/jsi/set.rb +23 -0
- data/lib/jsi/simple_wrap.rb +14 -17
- data/lib/jsi/struct.rb +57 -0
- data/lib/jsi/uri.rb +40 -0
- data/lib/jsi/util/private/memo_map.rb +9 -13
- data/lib/jsi/util/private.rb +59 -31
- data/lib/jsi/util/typelike.rb +19 -60
- data/lib/jsi/util.rb +53 -34
- data/lib/jsi/validation/error.rb +45 -2
- data/lib/jsi/validation/result.rb +121 -90
- data/lib/jsi/validation.rb +1 -6
- data/lib/jsi/version.rb +1 -1
- data/lib/jsi.rb +170 -36
- data/lib/schemas/json-schema.org/draft/2020-12/schema.rb +62 -0
- data/lib/schemas/json-schema.org/draft-04/schema.rb +60 -109
- data/lib/schemas/json-schema.org/draft-06/schema.rb +53 -108
- data/lib/schemas/json-schema.org/draft-07/schema.rb +63 -127
- data/readme.rb +4 -4
- data/{resources}/schemas/2020-12_strict.json +19 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/applicator.json +48 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/content.json +17 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/core.json +51 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-annotation.json +14 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-assertion.json +14 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/meta-data.json +37 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/unevaluated.json +15 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/meta/validation.json +98 -0
- data/{resources}/schemas/json-schema.org/draft/2020-12/schema.json +58 -0
- metadata +73 -52
- data/lib/jsi/metaschema.rb +0 -6
- data/lib/jsi/schema/application/child_application/contains.rb +0 -25
- data/lib/jsi/schema/application/child_application/draft04.rb +0 -21
- data/lib/jsi/schema/application/child_application/draft06.rb +0 -28
- data/lib/jsi/schema/application/child_application/draft07.rb +0 -28
- data/lib/jsi/schema/application/child_application/items.rb +0 -18
- data/lib/jsi/schema/application/child_application/properties.rb +0 -25
- data/lib/jsi/schema/application/child_application.rb +0 -13
- data/lib/jsi/schema/application/draft04.rb +0 -8
- data/lib/jsi/schema/application/draft06.rb +0 -8
- data/lib/jsi/schema/application/draft07.rb +0 -8
- data/lib/jsi/schema/application/inplace_application/dependencies.rb +0 -28
- data/lib/jsi/schema/application/inplace_application/draft04.rb +0 -25
- data/lib/jsi/schema/application/inplace_application/draft06.rb +0 -26
- data/lib/jsi/schema/application/inplace_application/draft07.rb +0 -32
- data/lib/jsi/schema/application/inplace_application/ifthenelse.rb +0 -20
- data/lib/jsi/schema/application/inplace_application/ref.rb +0 -18
- data/lib/jsi/schema/application/inplace_application/someof.rb +0 -44
- data/lib/jsi/schema/application/inplace_application.rb +0 -14
- data/lib/jsi/schema/application.rb +0 -12
- data/lib/jsi/schema/ref.rb +0 -183
- data/lib/jsi/schema/validation/array.rb +0 -69
- data/lib/jsi/schema/validation/contains.rb +0 -25
- data/lib/jsi/schema/validation/dependencies.rb +0 -49
- data/lib/jsi/schema/validation/draft04/minmax.rb +0 -91
- data/lib/jsi/schema/validation/draft04.rb +0 -110
- data/lib/jsi/schema/validation/draft06.rb +0 -120
- data/lib/jsi/schema/validation/draft07.rb +0 -157
- data/lib/jsi/schema/validation/enum.rb +0 -25
- data/lib/jsi/schema/validation/ifthenelse.rb +0 -46
- data/lib/jsi/schema/validation/items.rb +0 -54
- data/lib/jsi/schema/validation/not.rb +0 -20
- data/lib/jsi/schema/validation/numeric.rb +0 -121
- data/lib/jsi/schema/validation/object.rb +0 -45
- data/lib/jsi/schema/validation/pattern.rb +0 -34
- data/lib/jsi/schema/validation/properties.rb +0 -101
- data/lib/jsi/schema/validation/property_names.rb +0 -32
- data/lib/jsi/schema/validation/ref.rb +0 -40
- data/lib/jsi/schema/validation/required.rb +0 -27
- data/lib/jsi/schema/validation/someof.rb +0 -90
- data/lib/jsi/schema/validation/string.rb +0 -47
- data/lib/jsi/schema/validation/type.rb +0 -49
- data/lib/jsi/schema/validation.rb +0 -49
- data/lib/jsi/schema_registry.rb +0 -190
- data/lib/jsi/util/private/attr_struct.rb +0 -130
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JSI
|
|
4
|
+
module Schema
|
|
5
|
+
class Dialect
|
|
6
|
+
class << self
|
|
7
|
+
# @param xvocabulary [#to_hash] `$vocabulary` keyword value
|
|
8
|
+
# @param id [#to_str, nil]
|
|
9
|
+
# @param registry [Registry]
|
|
10
|
+
# @param register [Boolean]
|
|
11
|
+
# @return [Schema::Dialect]
|
|
12
|
+
def from_xvocabulary(
|
|
13
|
+
xvocabulary,
|
|
14
|
+
id: nil,
|
|
15
|
+
registry: JSI.registry,
|
|
16
|
+
register: !!id,
|
|
17
|
+
**conf
|
|
18
|
+
)
|
|
19
|
+
vocabularies = []
|
|
20
|
+
xvocabulary.each do |vocabulary_uri, required|
|
|
21
|
+
if required || registry.vocabulary_registered?(vocabulary_uri)
|
|
22
|
+
vocabularies << registry.find_vocabulary(vocabulary_uri)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
dialect = Schema::Dialect.new(id: id, vocabularies: vocabularies, **conf)
|
|
26
|
+
registry.register_dialect(dialect) if register
|
|
27
|
+
dialect
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
include(Util::Pretty)
|
|
32
|
+
|
|
33
|
+
# @param id [#to_str, nil]
|
|
34
|
+
# @param vocabularies [Enumerable<Schema::Vocabulary>]
|
|
35
|
+
def initialize(id: nil, vocabularies: , **conf)
|
|
36
|
+
@id = Util.uri(id, nnil: false, yabs: true, ynorm: true)
|
|
37
|
+
@vocabularies = Set.new(vocabularies).freeze
|
|
38
|
+
@conf = conf.freeze
|
|
39
|
+
|
|
40
|
+
elements = vocabularies.map(&:elements).inject(Set.new, &:merge)
|
|
41
|
+
|
|
42
|
+
# key element depends on each element of its value
|
|
43
|
+
dependencies = Hash.new { |h, k| h[k] = Set[] }
|
|
44
|
+
elements.each do |element|
|
|
45
|
+
element.select_elements_self_is_required_before(elements).each do |required_before_element|
|
|
46
|
+
# element will be invoked before required_before_element
|
|
47
|
+
dependencies[required_before_element] << element
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
element.select_elements_self_depends_on(elements).each do |depends_on_element|
|
|
51
|
+
# element will be invoked after depends_on_element
|
|
52
|
+
dependencies[element] << depends_on_element
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
@elements = []
|
|
57
|
+
|
|
58
|
+
until elements.empty?
|
|
59
|
+
sort_element = elements.detect do |element|
|
|
60
|
+
dependencies[element].all? { |req_el| @elements.include?(req_el) }
|
|
61
|
+
end || fail(Bug)
|
|
62
|
+
@elements.push(sort_element)
|
|
63
|
+
elements.delete(sort_element)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
@elements.freeze
|
|
67
|
+
|
|
68
|
+
@actions = Hash.new(Util::EMPTY_ARY)
|
|
69
|
+
action_names = @elements.map { |e| e.actions.each_key }.inject(Set.new, &:merge).freeze
|
|
70
|
+
action_names.each do |action_name|
|
|
71
|
+
@actions[action_name] = @elements.map { |e| e.actions[action_name] }.inject([], &:concat).freeze
|
|
72
|
+
end
|
|
73
|
+
@actions.freeze
|
|
74
|
+
|
|
75
|
+
# Bootstrap schemas are memoized in nested hashes.
|
|
76
|
+
# The outer hash is keyed by document, compared by identity, because hashing the document
|
|
77
|
+
# is expensive and there aren't typically multiple instances of the same document
|
|
78
|
+
# (and if there are, it is no problem for them to map to different bootstrap schemas).
|
|
79
|
+
# The inner hash is keyed by other keyword params to MetaSchemaNode::BootstrapSchema#initialize,
|
|
80
|
+
# not by identity, as those use different instances but are cheaper to hash.
|
|
81
|
+
@bootstrap_schema_map = Hash.new do |dochash, document|
|
|
82
|
+
dochash[document] = Hash.new do |paramhash, kw|
|
|
83
|
+
#chkbug fail if kw[:dialect]
|
|
84
|
+
paramhash[kw] = MetaSchemaNode::BootstrapSchema.new(dialect: self, jsi_document: document, **kw)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
@bootstrap_schema_map.compare_by_identity
|
|
88
|
+
|
|
89
|
+
freeze
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# @return [URI, nil]
|
|
93
|
+
attr_reader(:id)
|
|
94
|
+
|
|
95
|
+
# @return [Set<Schema::Vocabulary>]
|
|
96
|
+
attr_reader(:vocabularies)
|
|
97
|
+
|
|
98
|
+
# @return [Hash]
|
|
99
|
+
attr_reader(:conf)
|
|
100
|
+
|
|
101
|
+
# @return [Array<Schema::Element>]
|
|
102
|
+
attr_reader(:elements)
|
|
103
|
+
|
|
104
|
+
# @api private
|
|
105
|
+
# @return [MetaSchemaNode::BootstrapSchema]
|
|
106
|
+
def bootstrap_schema(jsi_document: , **kw)
|
|
107
|
+
@bootstrap_schema_map[jsi_document][kw]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Invoke the indicated action of each Element on the given context
|
|
111
|
+
# @param action_name [Symbol]
|
|
112
|
+
# @param cxt [Schema::Cxt] the `self` of the action
|
|
113
|
+
# @return given `cxt`
|
|
114
|
+
def invoke(action_name, cxt)
|
|
115
|
+
@actions[action_name].each do |action|
|
|
116
|
+
cxt.instance_exec(&action)
|
|
117
|
+
return(cxt) if cxt.abort
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
cxt
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# @param q
|
|
124
|
+
def pretty_print(q)
|
|
125
|
+
if id
|
|
126
|
+
jsi_pp_object_group(q, [self.class.name, -"id: <#{id}>"])
|
|
127
|
+
else
|
|
128
|
+
jsi_pp_object_group(q) do
|
|
129
|
+
q.seplist(vocabularies) do |v|
|
|
130
|
+
q.pp(v)
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
data/lib/jsi/schema/draft04.rb
CHANGED
|
@@ -3,11 +3,119 @@
|
|
|
3
3
|
module JSI
|
|
4
4
|
module Schema
|
|
5
5
|
module Draft04
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
VOCABULARY = Vocabulary.new(
|
|
7
|
+
elements: [
|
|
8
|
+
# the schema itself
|
|
9
|
+
Schema::Elements::SELF[],
|
|
10
|
+
|
|
11
|
+
# draft-zyp-json-schema-04 6. The "$schema" keyword
|
|
12
|
+
Schema::Elements::XSCHEMA[],
|
|
13
|
+
|
|
14
|
+
# draft-pbryan-zyp-json-ref-03
|
|
15
|
+
Schema::Elements::REF[exclusive: true],
|
|
16
|
+
|
|
17
|
+
# draft-zyp-json-schema-04 7. URI resolution scopes and dereferencing
|
|
18
|
+
|
|
19
|
+
# draft-zyp-json-schema-04 7.2. URI resolution scope alteration with the "id" keyword
|
|
20
|
+
Schema::Elements::ID[keyword: 'id', fragment_is_anchor: true],
|
|
21
|
+
|
|
22
|
+
# draft-fge-json-schema-validation-00 5. Validation keywords sorted by instance types
|
|
23
|
+
|
|
24
|
+
# draft-fge-json-schema-validation-00 5.1. Validation keywords for numeric instances (number and integer)
|
|
25
|
+
|
|
26
|
+
# draft-fge-json-schema-validation-00 5.1.1. multipleOf
|
|
27
|
+
Schema::Elements::MULTIPLE_OF[],
|
|
28
|
+
|
|
29
|
+
# draft-fge-json-schema-validation-00 5.1.2. maximum and exclusiveMaximum
|
|
30
|
+
Schema::Elements::MAXIMUM_BOOLEAN_EXCLUSIVE[],
|
|
31
|
+
|
|
32
|
+
# draft-fge-json-schema-validation-00 5.1.3. minimum and exclusiveMinimum
|
|
33
|
+
Schema::Elements::MINIMUM_BOOLEAN_EXCLUSIVE[],
|
|
34
|
+
|
|
35
|
+
# draft-fge-json-schema-validation-00 5.2. Validation keywords for strings
|
|
36
|
+
|
|
37
|
+
# draft-fge-json-schema-validation-00 5.2.1. maxLength
|
|
38
|
+
Schema::Elements::MAX_LENGTH[],
|
|
39
|
+
|
|
40
|
+
# draft-fge-json-schema-validation-00 5.2.2. minLength
|
|
41
|
+
Schema::Elements::MIN_LENGTH[],
|
|
42
|
+
|
|
43
|
+
# draft-fge-json-schema-validation-00 5.2.3. pattern
|
|
44
|
+
Schema::Elements::PATTERN[],
|
|
45
|
+
|
|
46
|
+
# draft-fge-json-schema-validation-00 5.3. Validation keywords for arrays
|
|
47
|
+
|
|
48
|
+
# draft-fge-json-schema-validation-00 5.3.1. additionalItems and items
|
|
49
|
+
Schema::Elements::ITEMS[],
|
|
50
|
+
|
|
51
|
+
# draft-fge-json-schema-validation-00 5.3.2. maxItems
|
|
52
|
+
Schema::Elements::MAX_ITEMS[],
|
|
53
|
+
|
|
54
|
+
# draft-fge-json-schema-validation-00 5.3.3. minItems
|
|
55
|
+
Schema::Elements::MIN_ITEMS[],
|
|
56
|
+
|
|
57
|
+
# draft-fge-json-schema-validation-00 5.3.4. uniqueItems
|
|
58
|
+
Schema::Elements::UNIQUE_ITEMS[],
|
|
59
|
+
|
|
60
|
+
# draft-fge-json-schema-validation-00 5.4. Validation keywords for objects
|
|
61
|
+
|
|
62
|
+
# draft-fge-json-schema-validation-00 5.4.1. maxProperties
|
|
63
|
+
Schema::Elements::MAX_PROPERTIES[],
|
|
64
|
+
|
|
65
|
+
# draft-fge-json-schema-validation-00 5.4.2. minProperties
|
|
66
|
+
Schema::Elements::MIN_PROPERTIES[],
|
|
67
|
+
|
|
68
|
+
# draft-fge-json-schema-validation-00 5.4.3. required
|
|
69
|
+
Schema::Elements::REQUIRED[],
|
|
70
|
+
|
|
71
|
+
# draft-fge-json-schema-validation-00 5.4.4. additionalProperties, properties and patternProperties
|
|
72
|
+
Schema::Elements::PROPERTIES[],
|
|
73
|
+
|
|
74
|
+
# draft-fge-json-schema-validation-00 5.4.5. dependencies
|
|
75
|
+
Schema::Elements::DEPENDENCIES[],
|
|
76
|
+
|
|
77
|
+
# draft-fge-json-schema-validation-00 5.5. Validation keywords for any instance type
|
|
78
|
+
|
|
79
|
+
# draft-fge-json-schema-validation-00 5.5.1. enum
|
|
80
|
+
Schema::Elements::ENUM[],
|
|
81
|
+
|
|
82
|
+
# draft-fge-json-schema-validation-00 5.5.2. type
|
|
83
|
+
Schema::Elements::TYPE[],
|
|
84
|
+
|
|
85
|
+
# draft-fge-json-schema-validation-00 5.5.3. allOf
|
|
86
|
+
Schema::Elements::ALL_OF[],
|
|
87
|
+
|
|
88
|
+
# draft-fge-json-schema-validation-00 5.5.4. anyOf
|
|
89
|
+
Schema::Elements::ANY_OF[],
|
|
90
|
+
|
|
91
|
+
# draft-fge-json-schema-validation-00 5.5.5. oneOf
|
|
92
|
+
Schema::Elements::ONE_OF[],
|
|
93
|
+
|
|
94
|
+
# draft-fge-json-schema-validation-00 5.5.6. not
|
|
95
|
+
Schema::Elements::NOT[],
|
|
96
|
+
|
|
97
|
+
# draft-fge-json-schema-validation-00 5.5.7. definitions
|
|
98
|
+
Schema::Elements::DEFINITIONS[keyword: 'definitions'],
|
|
99
|
+
|
|
100
|
+
# draft-fge-json-schema-validation-00 6. Metadata keywords
|
|
101
|
+
|
|
102
|
+
# draft-fge-json-schema-validation-00 6.1. "title" and "description"
|
|
103
|
+
Schema::Elements::INFO_STRING[keyword: 'title'],
|
|
104
|
+
Schema::Elements::INFO_STRING[keyword: 'description'],
|
|
105
|
+
|
|
106
|
+
# draft-fge-json-schema-validation-00 6.2. "default"
|
|
107
|
+
Schema::Elements::DEFAULT[],
|
|
108
|
+
|
|
109
|
+
# draft-fge-json-schema-validation-00 7. Semantic validation with "format"
|
|
110
|
+
Schema::Elements::FORMAT[],
|
|
111
|
+
],
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
DIALECT = Dialect.new(
|
|
115
|
+
id: "http://json-schema.org/draft-04/schema",
|
|
116
|
+
vocabularies: [VOCABULARY],
|
|
117
|
+
integer_disallows_0_fraction: true,
|
|
118
|
+
)
|
|
11
119
|
end
|
|
12
120
|
end
|
|
13
121
|
end
|
data/lib/jsi/schema/draft06.rb
CHANGED
|
@@ -3,11 +3,129 @@
|
|
|
3
3
|
module JSI
|
|
4
4
|
module Schema
|
|
5
5
|
module Draft06
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
VOCABULARY = Vocabulary.new(
|
|
7
|
+
elements: [
|
|
8
|
+
# the schema itself
|
|
9
|
+
Schema::Elements::SELF[],
|
|
10
|
+
|
|
11
|
+
# draft-wright-json-schema-01 7. The "$schema" keyword
|
|
12
|
+
Schema::Elements::XSCHEMA[],
|
|
13
|
+
|
|
14
|
+
# draft-wright-json-schema-01 8. Schema references with $ref
|
|
15
|
+
Schema::Elements::REF[exclusive: true],
|
|
16
|
+
|
|
17
|
+
# draft-wright-json-schema-01 9. Base URI and dereferencing
|
|
18
|
+
|
|
19
|
+
# draft-wright-json-schema-01 9.2. The "$id" keyword
|
|
20
|
+
Schema::Elements::ID[keyword: '$id', fragment_is_anchor: true],
|
|
21
|
+
|
|
22
|
+
# draft-wright-json-schema-validation-01 6. Validation keywords
|
|
23
|
+
|
|
24
|
+
# draft-wright-json-schema-validation-01 6.1. multipleOf
|
|
25
|
+
Schema::Elements::MULTIPLE_OF[],
|
|
26
|
+
|
|
27
|
+
# draft-wright-json-schema-validation-01 6.2. maximum
|
|
28
|
+
Schema::Elements::MAXIMUM[],
|
|
29
|
+
|
|
30
|
+
# draft-wright-json-schema-validation-01 6.3. exclusiveMaximum
|
|
31
|
+
Schema::Elements::EXCLUSIVE_MAXIMUM[],
|
|
32
|
+
|
|
33
|
+
# draft-wright-json-schema-validation-01 6.4. minimum
|
|
34
|
+
Schema::Elements::MINIMUM[],
|
|
35
|
+
|
|
36
|
+
# draft-wright-json-schema-validation-01 6.5. exclusiveMinimum
|
|
37
|
+
Schema::Elements::EXCLUSIVE_MINIMUM[],
|
|
38
|
+
|
|
39
|
+
# draft-wright-json-schema-validation-01 6.6. maxLength
|
|
40
|
+
Schema::Elements::MAX_LENGTH[],
|
|
41
|
+
|
|
42
|
+
# draft-wright-json-schema-validation-01 6.7. minLength
|
|
43
|
+
Schema::Elements::MIN_LENGTH[],
|
|
44
|
+
|
|
45
|
+
# draft-wright-json-schema-validation-01 6.8. pattern
|
|
46
|
+
Schema::Elements::PATTERN[],
|
|
47
|
+
|
|
48
|
+
# draft-wright-json-schema-validation-01 6.9. items
|
|
49
|
+
# draft-wright-json-schema-validation-01 6.10. additionalItems
|
|
50
|
+
Schema::Elements::ITEMS[],
|
|
51
|
+
|
|
52
|
+
# draft-wright-json-schema-validation-01 6.11. maxItems
|
|
53
|
+
Schema::Elements::MAX_ITEMS[],
|
|
54
|
+
|
|
55
|
+
# draft-wright-json-schema-validation-01 6.12. minItems
|
|
56
|
+
Schema::Elements::MIN_ITEMS[],
|
|
57
|
+
|
|
58
|
+
# draft-wright-json-schema-validation-01 6.13. uniqueItems
|
|
59
|
+
Schema::Elements::UNIQUE_ITEMS[],
|
|
60
|
+
|
|
61
|
+
# draft-wright-json-schema-validation-01 6.14. contains
|
|
62
|
+
Schema::Elements::CONTAINS[],
|
|
63
|
+
|
|
64
|
+
# draft-wright-json-schema-validation-01 6.15. maxProperties
|
|
65
|
+
Schema::Elements::MAX_PROPERTIES[],
|
|
66
|
+
|
|
67
|
+
# draft-wright-json-schema-validation-01 6.16. minProperties
|
|
68
|
+
Schema::Elements::MIN_PROPERTIES[],
|
|
69
|
+
|
|
70
|
+
# draft-wright-json-schema-validation-01 6.17. required
|
|
71
|
+
Schema::Elements::REQUIRED[],
|
|
72
|
+
|
|
73
|
+
# draft-wright-json-schema-validation-01 6.18. properties
|
|
74
|
+
# draft-wright-json-schema-validation-01 6.19. patternProperties
|
|
75
|
+
# draft-wright-json-schema-validation-01 6.20. additionalProperties
|
|
76
|
+
Schema::Elements::PROPERTIES[],
|
|
77
|
+
|
|
78
|
+
# draft-wright-json-schema-validation-01 6.21. dependencies
|
|
79
|
+
Schema::Elements::DEPENDENCIES[],
|
|
80
|
+
|
|
81
|
+
# draft-wright-json-schema-validation-01 6.22. propertyNames
|
|
82
|
+
Schema::Elements::PROPERTY_NAMES[],
|
|
83
|
+
|
|
84
|
+
# draft-wright-json-schema-validation-01 6.23. enum
|
|
85
|
+
Schema::Elements::ENUM[],
|
|
86
|
+
|
|
87
|
+
# draft-wright-json-schema-validation-01 6.24. const
|
|
88
|
+
Schema::Elements::CONST[],
|
|
89
|
+
|
|
90
|
+
# draft-wright-json-schema-validation-01 6.25. type
|
|
91
|
+
Schema::Elements::TYPE[],
|
|
92
|
+
|
|
93
|
+
# draft-wright-json-schema-validation-01 6.26. allOf
|
|
94
|
+
Schema::Elements::ALL_OF[],
|
|
95
|
+
|
|
96
|
+
# draft-wright-json-schema-validation-01 6.27. anyOf
|
|
97
|
+
Schema::Elements::ANY_OF[],
|
|
98
|
+
|
|
99
|
+
# draft-wright-json-schema-validation-01 6.28. oneOf
|
|
100
|
+
Schema::Elements::ONE_OF[],
|
|
101
|
+
|
|
102
|
+
# draft-wright-json-schema-validation-01 6.29. not
|
|
103
|
+
Schema::Elements::NOT[],
|
|
104
|
+
|
|
105
|
+
# draft-wright-json-schema-validation-01 7. Metadata keywords
|
|
106
|
+
|
|
107
|
+
# draft-wright-json-schema-validation-01 7.1. definitions
|
|
108
|
+
Schema::Elements::DEFINITIONS[keyword: 'definitions'],
|
|
109
|
+
|
|
110
|
+
# draft-wright-json-schema-validation-01 7.2. "title" and "description"
|
|
111
|
+
Schema::Elements::INFO_STRING[keyword: 'title'],
|
|
112
|
+
Schema::Elements::INFO_STRING[keyword: 'description'],
|
|
113
|
+
|
|
114
|
+
# draft-wright-json-schema-validation-01 7.3. "default"
|
|
115
|
+
Schema::Elements::DEFAULT[],
|
|
116
|
+
|
|
117
|
+
# draft-wright-json-schema-validation-01 7.4. "examples"
|
|
118
|
+
Schema::Elements::EXAMPLES[],
|
|
119
|
+
|
|
120
|
+
# draft-wright-json-schema-validation-01 8. Semantic validation with "format"
|
|
121
|
+
Schema::Elements::FORMAT[],
|
|
122
|
+
],
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
DIALECT = Dialect.new(
|
|
126
|
+
id: "http://json-schema.org/draft-06/schema",
|
|
127
|
+
vocabularies: [VOCABULARY],
|
|
128
|
+
)
|
|
11
129
|
end
|
|
12
130
|
end
|
|
13
131
|
end
|
data/lib/jsi/schema/draft07.rb
CHANGED
|
@@ -3,11 +3,163 @@
|
|
|
3
3
|
module JSI
|
|
4
4
|
module Schema
|
|
5
5
|
module Draft07
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
VOCABULARY = Vocabulary.new(
|
|
7
|
+
elements: [
|
|
8
|
+
# the schema itself
|
|
9
|
+
Schema::Elements::SELF[],
|
|
10
|
+
|
|
11
|
+
# draft-handrews-json-schema-01 7. The "$schema" Keyword
|
|
12
|
+
Schema::Elements::XSCHEMA[],
|
|
13
|
+
|
|
14
|
+
# draft-handrews-json-schema-01 8. Base URI and Dereferencing
|
|
15
|
+
|
|
16
|
+
# draft-handrews-json-schema-01 8.2. The "$id" Keyword
|
|
17
|
+
Schema::Elements::ID[keyword: '$id', fragment_is_anchor: true],
|
|
18
|
+
|
|
19
|
+
# draft-handrews-json-schema-01 8.3. Schema References With "$ref"
|
|
20
|
+
Schema::Elements::REF[exclusive: true],
|
|
21
|
+
|
|
22
|
+
# draft-handrews-json-schema-01 9. Comments With "$comment"
|
|
23
|
+
Schema::Elements::COMMENT[],
|
|
24
|
+
|
|
25
|
+
# draft-handrews-json-schema-validation-01 6. Validation Keywords
|
|
26
|
+
|
|
27
|
+
# draft-handrews-json-schema-validation-01 6.1. Validation Keywords for Any Instance Type
|
|
28
|
+
|
|
29
|
+
# draft-handrews-json-schema-validation-01 6.1.1. type
|
|
30
|
+
Schema::Elements::TYPE[],
|
|
31
|
+
|
|
32
|
+
# draft-handrews-json-schema-validation-01 6.1.2. enum
|
|
33
|
+
Schema::Elements::ENUM[],
|
|
34
|
+
|
|
35
|
+
# draft-handrews-json-schema-validation-01 6.1.3. const
|
|
36
|
+
Schema::Elements::CONST[],
|
|
37
|
+
|
|
38
|
+
# draft-handrews-json-schema-validation-01 6.2. Validation Keywords for Numeric Instances (number and integer)
|
|
39
|
+
|
|
40
|
+
# draft-handrews-json-schema-validation-01 6.2.1. multipleOf
|
|
41
|
+
Schema::Elements::MULTIPLE_OF[],
|
|
42
|
+
|
|
43
|
+
# draft-handrews-json-schema-validation-01 6.2.2. maximum
|
|
44
|
+
Schema::Elements::MAXIMUM[],
|
|
45
|
+
|
|
46
|
+
# draft-handrews-json-schema-validation-01 6.2.3. exclusiveMaximum
|
|
47
|
+
Schema::Elements::EXCLUSIVE_MAXIMUM[],
|
|
48
|
+
|
|
49
|
+
# draft-handrews-json-schema-validation-01 6.2.4. minimum
|
|
50
|
+
Schema::Elements::MINIMUM[],
|
|
51
|
+
|
|
52
|
+
# draft-handrews-json-schema-validation-01 6.2.5. exclusiveMinimum
|
|
53
|
+
Schema::Elements::EXCLUSIVE_MINIMUM[],
|
|
54
|
+
|
|
55
|
+
# draft-handrews-json-schema-validation-01 6.3. Validation Keywords for Strings
|
|
56
|
+
|
|
57
|
+
# draft-handrews-json-schema-validation-01 6.3.1. maxLength
|
|
58
|
+
Schema::Elements::MAX_LENGTH[],
|
|
59
|
+
|
|
60
|
+
# draft-handrews-json-schema-validation-01 6.3.2. minLength
|
|
61
|
+
Schema::Elements::MIN_LENGTH[],
|
|
62
|
+
|
|
63
|
+
# draft-handrews-json-schema-validation-01 6.3.3. pattern
|
|
64
|
+
Schema::Elements::PATTERN[],
|
|
65
|
+
|
|
66
|
+
# draft-handrews-json-schema-validation-01 6.4. Validation Keywords for Arrays
|
|
67
|
+
|
|
68
|
+
# draft-handrews-json-schema-validation-01 6.4.1. items
|
|
69
|
+
# draft-handrews-json-schema-validation-01 6.4.2. additionalItems
|
|
70
|
+
Schema::Elements::ITEMS[],
|
|
71
|
+
|
|
72
|
+
# draft-handrews-json-schema-validation-01 6.4.3. maxItems
|
|
73
|
+
Schema::Elements::MAX_ITEMS[],
|
|
74
|
+
|
|
75
|
+
# draft-handrews-json-schema-validation-01 6.4.4. minItems
|
|
76
|
+
Schema::Elements::MIN_ITEMS[],
|
|
77
|
+
|
|
78
|
+
# draft-handrews-json-schema-validation-01 6.4.5. uniqueItems
|
|
79
|
+
Schema::Elements::UNIQUE_ITEMS[],
|
|
80
|
+
|
|
81
|
+
# draft-handrews-json-schema-validation-01 6.4.6. contains
|
|
82
|
+
Schema::Elements::CONTAINS[],
|
|
83
|
+
|
|
84
|
+
# draft-handrews-json-schema-validation-01 6.5. Validation Keywords for Objects
|
|
85
|
+
|
|
86
|
+
# draft-handrews-json-schema-validation-01 6.5.1. maxProperties
|
|
87
|
+
Schema::Elements::MAX_PROPERTIES[],
|
|
88
|
+
|
|
89
|
+
# draft-handrews-json-schema-validation-01 6.5.2. minProperties
|
|
90
|
+
Schema::Elements::MIN_PROPERTIES[],
|
|
91
|
+
|
|
92
|
+
# draft-handrews-json-schema-validation-01 6.5.3. required
|
|
93
|
+
Schema::Elements::REQUIRED[],
|
|
94
|
+
|
|
95
|
+
# draft-handrews-json-schema-validation-01 6.5.4. properties
|
|
96
|
+
# draft-handrews-json-schema-validation-01 6.5.5. patternProperties
|
|
97
|
+
# draft-handrews-json-schema-validation-01 6.5.6. additionalProperties
|
|
98
|
+
Schema::Elements::PROPERTIES[],
|
|
99
|
+
|
|
100
|
+
# draft-handrews-json-schema-validation-01 6.5.7. dependencies
|
|
101
|
+
Schema::Elements::DEPENDENCIES[],
|
|
102
|
+
|
|
103
|
+
# draft-handrews-json-schema-validation-01 6.5.8. propertyNames
|
|
104
|
+
Schema::Elements::PROPERTY_NAMES[],
|
|
105
|
+
|
|
106
|
+
# draft-handrews-json-schema-validation-01 6.6. Keywords for Applying Subschemas Conditionally
|
|
107
|
+
|
|
108
|
+
# draft-handrews-json-schema-validation-01 6.6.1. if
|
|
109
|
+
# draft-handrews-json-schema-validation-01 6.6.2. then
|
|
110
|
+
# draft-handrews-json-schema-validation-01 6.6.3. else
|
|
111
|
+
Schema::Elements::IF_THEN_ELSE[],
|
|
112
|
+
|
|
113
|
+
# draft-handrews-json-schema-validation-01 6.7. Keywords for Applying Subschemas With Boolean Logic
|
|
114
|
+
|
|
115
|
+
# draft-handrews-json-schema-validation-01 6.7.1. allOf
|
|
116
|
+
Schema::Elements::ALL_OF[],
|
|
117
|
+
|
|
118
|
+
# draft-handrews-json-schema-validation-01 6.7.2. anyOf
|
|
119
|
+
Schema::Elements::ANY_OF[],
|
|
120
|
+
|
|
121
|
+
# draft-handrews-json-schema-validation-01 6.7.3. oneOf
|
|
122
|
+
Schema::Elements::ONE_OF[],
|
|
123
|
+
|
|
124
|
+
# draft-handrews-json-schema-validation-01 6.7.4. not
|
|
125
|
+
Schema::Elements::NOT[],
|
|
126
|
+
|
|
127
|
+
# draft-handrews-json-schema-validation-01 7. Semantic Validation With "format"
|
|
128
|
+
Schema::Elements::FORMAT[],
|
|
129
|
+
|
|
130
|
+
# draft-handrews-json-schema-validation-01 8. String-Encoding Non-JSON Data
|
|
131
|
+
|
|
132
|
+
# draft-handrews-json-schema-validation-01 8.3. contentEncoding
|
|
133
|
+
Schema::Elements::CONTENT_ENCODING[],
|
|
134
|
+
|
|
135
|
+
# draft-handrews-json-schema-validation-01 8.4. contentMediaType
|
|
136
|
+
Schema::Elements::CONTENT_MEDIA_TYPE[],
|
|
137
|
+
|
|
138
|
+
# draft-handrews-json-schema-validation-01 9. Schema Re-Use With "definitions"
|
|
139
|
+
Schema::Elements::DEFINITIONS[keyword: 'definitions'],
|
|
140
|
+
|
|
141
|
+
# draft-handrews-json-schema-validation-01 10. Schema Annotations
|
|
142
|
+
|
|
143
|
+
# draft-handrews-json-schema-validation-01 10.1. "title" and "description"
|
|
144
|
+
Schema::Elements::INFO_STRING[keyword: 'title'],
|
|
145
|
+
Schema::Elements::INFO_STRING[keyword: 'description'],
|
|
146
|
+
|
|
147
|
+
# draft-handrews-json-schema-validation-01 10.2. "default"
|
|
148
|
+
Schema::Elements::DEFAULT[],
|
|
149
|
+
|
|
150
|
+
# draft-handrews-json-schema-validation-01 10.3. "readOnly" and "writeOnly"
|
|
151
|
+
Schema::Elements::INFO_BOOL[keyword: 'readOnly'],
|
|
152
|
+
Schema::Elements::INFO_BOOL[keyword: 'writeOnly'],
|
|
153
|
+
|
|
154
|
+
# draft-handrews-json-schema-validation-01 10.4. "examples"
|
|
155
|
+
Schema::Elements::EXAMPLES[],
|
|
156
|
+
],
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
DIALECT = Dialect.new(
|
|
160
|
+
id: "http://json-schema.org/draft-07/schema",
|
|
161
|
+
vocabularies: [VOCABULARY],
|
|
162
|
+
)
|
|
11
163
|
end
|
|
12
164
|
end
|
|
13
165
|
end
|