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.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +3 -4
  3. data/CHANGELOG.md +19 -0
  4. data/LICENSE.md +2 -3
  5. data/README.md +87 -43
  6. data/docs/{glossary.md → Glossary.md} +84 -52
  7. data/jsi.gemspec +1 -1
  8. data/lib/jsi/base/mutability.rb +48 -0
  9. data/lib/jsi/base/node.rb +66 -52
  10. data/lib/jsi/base.rb +592 -176
  11. data/lib/jsi/jsi_coder.rb +4 -2
  12. data/lib/jsi/metaschema_node/bootstrap_schema.rb +118 -59
  13. data/lib/jsi/metaschema_node.rb +244 -154
  14. data/lib/jsi/ptr.rb +45 -17
  15. data/lib/jsi/ref.rb +197 -0
  16. data/lib/jsi/registry.rb +311 -0
  17. data/lib/jsi/schema/cxt/child_application.rb +35 -0
  18. data/lib/jsi/schema/cxt/inplace_application.rb +37 -0
  19. data/lib/jsi/schema/cxt.rb +80 -0
  20. data/lib/jsi/schema/dialect.rb +137 -0
  21. data/lib/jsi/schema/draft04.rb +113 -5
  22. data/lib/jsi/schema/draft06.rb +123 -5
  23. data/lib/jsi/schema/draft07.rb +157 -5
  24. data/lib/jsi/schema/draft202012.rb +303 -0
  25. data/lib/jsi/schema/dynamic_anchor_map.rb +63 -0
  26. data/lib/jsi/schema/element.rb +69 -0
  27. data/lib/jsi/schema/elements/anchor.rb +13 -0
  28. data/lib/jsi/schema/elements/array_validation.rb +82 -0
  29. data/lib/jsi/schema/elements/comment.rb +10 -0
  30. data/lib/jsi/schema/{validation → elements}/const.rb +11 -7
  31. data/lib/jsi/schema/elements/contains.rb +59 -0
  32. data/lib/jsi/schema/elements/contains_minmax.rb +91 -0
  33. data/lib/jsi/schema/elements/content_encoding.rb +10 -0
  34. data/lib/jsi/schema/elements/content_media_type.rb +10 -0
  35. data/lib/jsi/schema/elements/content_schema.rb +16 -0
  36. data/lib/jsi/schema/elements/default.rb +11 -0
  37. data/lib/jsi/schema/elements/definitions.rb +19 -0
  38. data/lib/jsi/schema/elements/dependencies.rb +99 -0
  39. data/lib/jsi/schema/elements/dependent_required.rb +49 -0
  40. data/lib/jsi/schema/elements/dependent_schemas.rb +69 -0
  41. data/lib/jsi/schema/elements/dynamic_ref.rb +69 -0
  42. data/lib/jsi/schema/elements/enum.rb +26 -0
  43. data/lib/jsi/schema/elements/examples.rb +10 -0
  44. data/lib/jsi/schema/elements/format.rb +10 -0
  45. data/lib/jsi/schema/elements/id.rb +30 -0
  46. data/lib/jsi/schema/elements/if_then_else.rb +82 -0
  47. data/lib/jsi/schema/elements/info_bool.rb +10 -0
  48. data/lib/jsi/schema/elements/info_string.rb +10 -0
  49. data/lib/jsi/schema/elements/items.rb +93 -0
  50. data/lib/jsi/schema/elements/items_prefixed.rb +96 -0
  51. data/lib/jsi/schema/elements/not.rb +31 -0
  52. data/lib/jsi/schema/elements/numeric.rb +137 -0
  53. data/lib/jsi/schema/elements/numeric_draft04.rb +77 -0
  54. data/lib/jsi/schema/elements/object_validation.rb +55 -0
  55. data/lib/jsi/schema/elements/pattern.rb +35 -0
  56. data/lib/jsi/schema/elements/properties.rb +145 -0
  57. data/lib/jsi/schema/elements/property_names.rb +48 -0
  58. data/lib/jsi/schema/elements/ref.rb +62 -0
  59. data/lib/jsi/schema/elements/required.rb +34 -0
  60. data/lib/jsi/schema/elements/self.rb +24 -0
  61. data/lib/jsi/schema/elements/some_of.rb +180 -0
  62. data/lib/jsi/schema/elements/string_validation.rb +57 -0
  63. data/lib/jsi/schema/elements/type.rb +43 -0
  64. data/lib/jsi/schema/elements/unevaluated_items.rb +54 -0
  65. data/lib/jsi/schema/elements/unevaluated_properties.rb +54 -0
  66. data/lib/jsi/schema/elements/xschema.rb +10 -0
  67. data/lib/jsi/schema/elements/xvocabulary.rb +10 -0
  68. data/lib/jsi/schema/elements.rb +101 -0
  69. data/lib/jsi/schema/issue.rb +3 -4
  70. data/lib/jsi/schema/schema_ancestor_node.rb +105 -52
  71. data/lib/jsi/schema/vocabulary.rb +36 -0
  72. data/lib/jsi/schema.rb +598 -383
  73. data/lib/jsi/schema_classes.rb +195 -141
  74. data/lib/jsi/schema_set.rb +85 -128
  75. data/lib/jsi/set.rb +23 -0
  76. data/lib/jsi/simple_wrap.rb +14 -17
  77. data/lib/jsi/struct.rb +57 -0
  78. data/lib/jsi/uri.rb +40 -0
  79. data/lib/jsi/util/private/memo_map.rb +9 -13
  80. data/lib/jsi/util/private.rb +59 -31
  81. data/lib/jsi/util/typelike.rb +19 -60
  82. data/lib/jsi/util.rb +53 -34
  83. data/lib/jsi/validation/error.rb +45 -2
  84. data/lib/jsi/validation/result.rb +121 -90
  85. data/lib/jsi/validation.rb +1 -6
  86. data/lib/jsi/version.rb +1 -1
  87. data/lib/jsi.rb +170 -36
  88. data/lib/schemas/json-schema.org/draft/2020-12/schema.rb +62 -0
  89. data/lib/schemas/json-schema.org/draft-04/schema.rb +60 -109
  90. data/lib/schemas/json-schema.org/draft-06/schema.rb +53 -108
  91. data/lib/schemas/json-schema.org/draft-07/schema.rb +63 -127
  92. data/readme.rb +4 -4
  93. data/{resources}/schemas/2020-12_strict.json +19 -0
  94. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/applicator.json +48 -0
  95. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/content.json +17 -0
  96. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/core.json +51 -0
  97. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-annotation.json +14 -0
  98. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/format-assertion.json +14 -0
  99. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/meta-data.json +37 -0
  100. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/unevaluated.json +15 -0
  101. data/{resources}/schemas/json-schema.org/draft/2020-12/meta/validation.json +98 -0
  102. data/{resources}/schemas/json-schema.org/draft/2020-12/schema.json +58 -0
  103. metadata +73 -52
  104. data/lib/jsi/metaschema.rb +0 -6
  105. data/lib/jsi/schema/application/child_application/contains.rb +0 -25
  106. data/lib/jsi/schema/application/child_application/draft04.rb +0 -21
  107. data/lib/jsi/schema/application/child_application/draft06.rb +0 -28
  108. data/lib/jsi/schema/application/child_application/draft07.rb +0 -28
  109. data/lib/jsi/schema/application/child_application/items.rb +0 -18
  110. data/lib/jsi/schema/application/child_application/properties.rb +0 -25
  111. data/lib/jsi/schema/application/child_application.rb +0 -13
  112. data/lib/jsi/schema/application/draft04.rb +0 -8
  113. data/lib/jsi/schema/application/draft06.rb +0 -8
  114. data/lib/jsi/schema/application/draft07.rb +0 -8
  115. data/lib/jsi/schema/application/inplace_application/dependencies.rb +0 -28
  116. data/lib/jsi/schema/application/inplace_application/draft04.rb +0 -25
  117. data/lib/jsi/schema/application/inplace_application/draft06.rb +0 -26
  118. data/lib/jsi/schema/application/inplace_application/draft07.rb +0 -32
  119. data/lib/jsi/schema/application/inplace_application/ifthenelse.rb +0 -20
  120. data/lib/jsi/schema/application/inplace_application/ref.rb +0 -18
  121. data/lib/jsi/schema/application/inplace_application/someof.rb +0 -44
  122. data/lib/jsi/schema/application/inplace_application.rb +0 -14
  123. data/lib/jsi/schema/application.rb +0 -12
  124. data/lib/jsi/schema/ref.rb +0 -183
  125. data/lib/jsi/schema/validation/array.rb +0 -69
  126. data/lib/jsi/schema/validation/contains.rb +0 -25
  127. data/lib/jsi/schema/validation/dependencies.rb +0 -49
  128. data/lib/jsi/schema/validation/draft04/minmax.rb +0 -91
  129. data/lib/jsi/schema/validation/draft04.rb +0 -110
  130. data/lib/jsi/schema/validation/draft06.rb +0 -120
  131. data/lib/jsi/schema/validation/draft07.rb +0 -157
  132. data/lib/jsi/schema/validation/enum.rb +0 -25
  133. data/lib/jsi/schema/validation/ifthenelse.rb +0 -46
  134. data/lib/jsi/schema/validation/items.rb +0 -54
  135. data/lib/jsi/schema/validation/not.rb +0 -20
  136. data/lib/jsi/schema/validation/numeric.rb +0 -121
  137. data/lib/jsi/schema/validation/object.rb +0 -45
  138. data/lib/jsi/schema/validation/pattern.rb +0 -34
  139. data/lib/jsi/schema/validation/properties.rb +0 -101
  140. data/lib/jsi/schema/validation/property_names.rb +0 -32
  141. data/lib/jsi/schema/validation/ref.rb +0 -40
  142. data/lib/jsi/schema/validation/required.rb +0 -27
  143. data/lib/jsi/schema/validation/someof.rb +0 -90
  144. data/lib/jsi/schema/validation/string.rb +0 -47
  145. data/lib/jsi/schema/validation/type.rb +0 -49
  146. data/lib/jsi/schema/validation.rb +0 -49
  147. data/lib/jsi/schema_registry.rb +0 -190
  148. 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
@@ -3,11 +3,119 @@
3
3
  module JSI
4
4
  module Schema
5
5
  module Draft04
6
- include OldId
7
- include IdWithAnchor
8
- include IntegerDisallows0Fraction
9
- include Schema::Application::Draft04
10
- include Schema::Validation::Draft04
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
@@ -3,11 +3,129 @@
3
3
  module JSI
4
4
  module Schema
5
5
  module Draft06
6
- include BigMoneyId
7
- include IdWithAnchor
8
- include IntegerAllows0Fraction
9
- include Schema::Application::Draft06
10
- include Schema::Validation::Draft06
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
@@ -3,11 +3,163 @@
3
3
  module JSI
4
4
  module Schema
5
5
  module Draft07
6
- include BigMoneyId
7
- include IdWithAnchor
8
- include IntegerAllows0Fraction
9
- include Schema::Application::Draft07
10
- include Schema::Validation::Draft07
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