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
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module JSI
|
|
4
|
-
metaschema_document =
|
|
5
|
-
JSONSchemaDraft04 = JSI.new_metaschema_module(metaschema_document,
|
|
6
|
-
schema_implementation_modules: [JSI::Schema::Draft04],
|
|
7
|
-
)
|
|
4
|
+
metaschema_document = Util.json_parse_freeze(SCHEMAS_PATH.join('json-schema.org/draft-04/schema.json').read)
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
describe_schema_ptrs = Set[
|
|
7
|
+
Ptr[],
|
|
8
|
+
# in draft 4, boolean schemas are not described by the main meta-schema (which specifies type: object),
|
|
9
|
+
# but by anyOf schemas in /properties/additionalProperties and /properties/additionalItems.
|
|
10
|
+
Ptr['properties', 'additionalProperties', 'anyOf', 0],
|
|
11
|
+
Ptr['properties', 'additionalItems', 'anyOf', 0]
|
|
12
|
+
].freeze
|
|
13
|
+
|
|
14
|
+
JSONSchemaDraft04 = JSI.new_metaschema_node(metaschema_document,
|
|
15
|
+
dialect: JSI::Schema::Draft04::DIALECT,
|
|
16
|
+
is_metaschema: proc do |node|
|
|
17
|
+
describe_schema_ptrs.include?(node.jsi_ptr)
|
|
18
|
+
end,
|
|
19
|
+
).jsi_schema_module
|
|
18
20
|
|
|
19
21
|
# the JSI schema module for `http://json-schema.org/draft-04/schema`
|
|
20
22
|
module JSONSchemaDraft04
|
|
21
|
-
# @!parse extend JSI::SchemaModule::
|
|
22
|
-
# @!parse include JSI::Schema::Draft04
|
|
23
|
+
# @!parse extend JSI::SchemaModule::MetaSchemaModule
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
Id = properties['id']
|
|
@@ -62,83 +63,45 @@ module JSI
|
|
|
62
63
|
SimpleType = definitions['simpleTypes']
|
|
63
64
|
StringArray = definitions['stringArray']
|
|
64
65
|
|
|
65
|
-
module Id
|
|
66
|
-
end
|
|
67
|
-
module
|
|
68
|
-
end
|
|
69
|
-
module
|
|
70
|
-
end
|
|
71
|
-
module
|
|
72
|
-
end
|
|
73
|
-
module
|
|
74
|
-
end
|
|
75
|
-
module
|
|
76
|
-
end
|
|
77
|
-
module
|
|
78
|
-
end
|
|
79
|
-
module
|
|
80
|
-
end
|
|
81
|
-
module
|
|
82
|
-
end
|
|
83
|
-
module
|
|
84
|
-
end
|
|
85
|
-
module
|
|
86
|
-
end
|
|
87
|
-
module
|
|
88
|
-
end
|
|
89
|
-
module
|
|
90
|
-
end
|
|
91
|
-
module
|
|
92
|
-
end
|
|
93
|
-
module
|
|
94
|
-
end
|
|
95
|
-
module
|
|
96
|
-
end
|
|
97
|
-
module
|
|
98
|
-
end
|
|
99
|
-
module UniqueItems
|
|
100
|
-
end
|
|
101
|
-
module MaxProperties
|
|
102
|
-
end
|
|
103
|
-
module MinProperties
|
|
104
|
-
end
|
|
105
|
-
module Required
|
|
106
|
-
end
|
|
107
|
-
module AdditionalProperties
|
|
108
|
-
end
|
|
109
|
-
module Definitions
|
|
110
|
-
end
|
|
111
|
-
module Properties
|
|
112
|
-
end
|
|
113
|
-
module PatternProperties
|
|
114
|
-
end
|
|
115
|
-
module Dependencies
|
|
116
|
-
end
|
|
117
|
-
module Enum
|
|
118
|
-
end
|
|
119
|
-
module Type
|
|
120
|
-
end
|
|
121
|
-
module Format
|
|
122
|
-
end
|
|
123
|
-
module AllOf
|
|
124
|
-
end
|
|
125
|
-
module AnyOf
|
|
126
|
-
end
|
|
127
|
-
module OneOf
|
|
128
|
-
end
|
|
129
|
-
module Not
|
|
130
|
-
end
|
|
66
|
+
module Id end
|
|
67
|
+
module Xschema end
|
|
68
|
+
module Title end
|
|
69
|
+
module Description end
|
|
70
|
+
module Default end
|
|
71
|
+
module MultipleOf end
|
|
72
|
+
module Maximum end
|
|
73
|
+
module ExclusiveMaximum end
|
|
74
|
+
module Minimum end
|
|
75
|
+
module ExclusiveMinimum end
|
|
76
|
+
module MaxLength end
|
|
77
|
+
module MinLength end
|
|
78
|
+
module Pattern end
|
|
79
|
+
module AdditionalItems end
|
|
80
|
+
module Items end
|
|
81
|
+
module MaxItems end
|
|
82
|
+
module MinItems end
|
|
83
|
+
module UniqueItems end
|
|
84
|
+
module MaxProperties end
|
|
85
|
+
module MinProperties end
|
|
86
|
+
module Required end
|
|
87
|
+
module AdditionalProperties end
|
|
88
|
+
module Definitions end
|
|
89
|
+
module Properties end
|
|
90
|
+
module PatternProperties end
|
|
91
|
+
module Dependencies end
|
|
92
|
+
module Enum end
|
|
93
|
+
module Type end
|
|
94
|
+
module Format end
|
|
95
|
+
module AllOf end
|
|
96
|
+
module AnyOf end
|
|
97
|
+
module OneOf end
|
|
98
|
+
module Not end
|
|
131
99
|
|
|
132
|
-
module SchemaArray
|
|
133
|
-
end
|
|
134
|
-
module
|
|
135
|
-
end
|
|
136
|
-
module
|
|
137
|
-
end
|
|
138
|
-
module SimpleType
|
|
139
|
-
end
|
|
140
|
-
module StringArray
|
|
141
|
-
end
|
|
100
|
+
module SchemaArray end
|
|
101
|
+
module PositiveInteger end
|
|
102
|
+
module PositiveIntegerDefault0 end
|
|
103
|
+
module SimpleType end
|
|
104
|
+
module StringArray end
|
|
142
105
|
|
|
143
106
|
AdditionalItems::Boolean = AdditionalItems.anyOf[0]
|
|
144
107
|
AdditionalProperties::Boolean = AdditionalProperties.anyOf[0]
|
|
@@ -147,23 +110,11 @@ module JSI
|
|
|
147
110
|
PositiveIntegerDefault0::Default0 = PositiveIntegerDefault0.allOf[1]
|
|
148
111
|
StringItem = StringArray.items
|
|
149
112
|
|
|
150
|
-
module AdditionalItems::Boolean
|
|
151
|
-
end
|
|
152
|
-
module
|
|
153
|
-
end
|
|
154
|
-
module
|
|
155
|
-
end
|
|
156
|
-
module Type::Array
|
|
157
|
-
end
|
|
158
|
-
module PositiveIntegerDefault0::Default0
|
|
159
|
-
end
|
|
160
|
-
module StringItem
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
JSONSchemaOrgDraft04 = JSONSchemaDraft04
|
|
165
|
-
|
|
166
|
-
# @deprecated after v0.7.0, alias of {JSONSchemaDraft04}
|
|
167
|
-
module JSONSchemaOrgDraft04
|
|
113
|
+
module AdditionalItems::Boolean end
|
|
114
|
+
module AdditionalProperties::Boolean end
|
|
115
|
+
module Dependencies::Dependency end
|
|
116
|
+
module Type::Array end
|
|
117
|
+
module PositiveIntegerDefault0::Default0 end
|
|
118
|
+
module StringItem end
|
|
168
119
|
end
|
|
169
120
|
end
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module JSI
|
|
4
|
-
metaschema_document =
|
|
5
|
-
JSONSchemaDraft06 = JSI.
|
|
6
|
-
|
|
7
|
-
)
|
|
4
|
+
metaschema_document = Util.json_parse_freeze(SCHEMAS_PATH.join('json-schema.org/draft-06/schema.json').read)
|
|
5
|
+
JSONSchemaDraft06 = JSI.new_metaschema_node(metaschema_document,
|
|
6
|
+
dialect: JSI::Schema::Draft06::DIALECT,
|
|
7
|
+
).jsi_schema_module
|
|
8
8
|
|
|
9
9
|
# the JSI schema module for `http://json-schema.org/draft-06/schema`
|
|
10
10
|
module JSONSchemaDraft06
|
|
11
|
-
# @!parse extend JSI::SchemaModule::
|
|
12
|
-
# @!parse include JSI::Schema::Draft06
|
|
11
|
+
# @!parse extend JSI::SchemaModule::MetaSchemaModule
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
Id = properties['$id']
|
|
@@ -57,93 +56,50 @@ module JSI
|
|
|
57
56
|
SimpleType = definitions['simpleTypes']
|
|
58
57
|
StringArray = definitions['stringArray']
|
|
59
58
|
|
|
60
|
-
module Id
|
|
61
|
-
end
|
|
62
|
-
module
|
|
63
|
-
end
|
|
64
|
-
module
|
|
65
|
-
end
|
|
66
|
-
module
|
|
67
|
-
end
|
|
68
|
-
module
|
|
69
|
-
end
|
|
70
|
-
module
|
|
71
|
-
end
|
|
72
|
-
module
|
|
73
|
-
end
|
|
74
|
-
module
|
|
75
|
-
end
|
|
76
|
-
module
|
|
77
|
-
end
|
|
78
|
-
module
|
|
79
|
-
end
|
|
80
|
-
module
|
|
81
|
-
end
|
|
82
|
-
module
|
|
83
|
-
end
|
|
84
|
-
module
|
|
85
|
-
end
|
|
86
|
-
module
|
|
87
|
-
end
|
|
88
|
-
module
|
|
89
|
-
end
|
|
90
|
-
module
|
|
91
|
-
end
|
|
92
|
-
module
|
|
93
|
-
end
|
|
94
|
-
module
|
|
95
|
-
end
|
|
96
|
-
module
|
|
97
|
-
end
|
|
98
|
-
module UniqueItems
|
|
99
|
-
end
|
|
100
|
-
module Contains
|
|
101
|
-
end
|
|
102
|
-
module MaxProperties
|
|
103
|
-
end
|
|
104
|
-
module MinProperties
|
|
105
|
-
end
|
|
106
|
-
module Required
|
|
107
|
-
end
|
|
108
|
-
module AdditionalProperties
|
|
109
|
-
end
|
|
110
|
-
module Definitions
|
|
111
|
-
end
|
|
112
|
-
module Properties
|
|
113
|
-
end
|
|
114
|
-
module PatternProperties
|
|
115
|
-
end
|
|
116
|
-
module Dependencies
|
|
117
|
-
end
|
|
118
|
-
module PropertyNames
|
|
119
|
-
end
|
|
120
|
-
module Const
|
|
121
|
-
end
|
|
122
|
-
module Enum
|
|
123
|
-
end
|
|
124
|
-
module Type
|
|
125
|
-
end
|
|
126
|
-
module Format
|
|
127
|
-
end
|
|
128
|
-
module AllOf
|
|
129
|
-
end
|
|
130
|
-
module AnyOf
|
|
131
|
-
end
|
|
132
|
-
module OneOf
|
|
133
|
-
end
|
|
134
|
-
module Not
|
|
135
|
-
end
|
|
59
|
+
module Id end
|
|
60
|
+
module Xschema end
|
|
61
|
+
module Ref end
|
|
62
|
+
module Title end
|
|
63
|
+
module Description end
|
|
64
|
+
module Default end
|
|
65
|
+
module Examples end
|
|
66
|
+
module MultipleOf end
|
|
67
|
+
module Maximum end
|
|
68
|
+
module ExclusiveMaximum end
|
|
69
|
+
module Minimum end
|
|
70
|
+
module ExclusiveMinimum end
|
|
71
|
+
module MaxLength end
|
|
72
|
+
module MinLength end
|
|
73
|
+
module Pattern end
|
|
74
|
+
module AdditionalItems end
|
|
75
|
+
module Items end
|
|
76
|
+
module MaxItems end
|
|
77
|
+
module MinItems end
|
|
78
|
+
module UniqueItems end
|
|
79
|
+
module Contains end
|
|
80
|
+
module MaxProperties end
|
|
81
|
+
module MinProperties end
|
|
82
|
+
module Required end
|
|
83
|
+
module AdditionalProperties end
|
|
84
|
+
module Definitions end
|
|
85
|
+
module Properties end
|
|
86
|
+
module PatternProperties end
|
|
87
|
+
module Dependencies end
|
|
88
|
+
module PropertyNames end
|
|
89
|
+
module Const end
|
|
90
|
+
module Enum end
|
|
91
|
+
module Type end
|
|
92
|
+
module Format end
|
|
93
|
+
module AllOf end
|
|
94
|
+
module AnyOf end
|
|
95
|
+
module OneOf end
|
|
96
|
+
module Not end
|
|
136
97
|
|
|
137
|
-
module SchemaArray
|
|
138
|
-
end
|
|
139
|
-
module
|
|
140
|
-
end
|
|
141
|
-
module
|
|
142
|
-
end
|
|
143
|
-
module SimpleType
|
|
144
|
-
end
|
|
145
|
-
module StringArray
|
|
146
|
-
end
|
|
98
|
+
module SchemaArray end
|
|
99
|
+
module NonNegativeInteger end
|
|
100
|
+
module NonNegativeIntegerDefault0 end
|
|
101
|
+
module SimpleType end
|
|
102
|
+
module StringArray end
|
|
147
103
|
|
|
148
104
|
Example = Examples.items
|
|
149
105
|
Dependencies::Dependency = Dependencies.additionalProperties
|
|
@@ -151,21 +107,10 @@ module JSI
|
|
|
151
107
|
NonNegativeIntegerDefault0::Default0 = NonNegativeIntegerDefault0.allOf[1]
|
|
152
108
|
StringItem = StringArray.items
|
|
153
109
|
|
|
154
|
-
module Example
|
|
155
|
-
end
|
|
156
|
-
module
|
|
157
|
-
end
|
|
158
|
-
module
|
|
159
|
-
end
|
|
160
|
-
module NonNegativeIntegerDefault0::Default0
|
|
161
|
-
end
|
|
162
|
-
module StringItem
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
JSONSchemaOrgDraft06 = JSONSchemaDraft06
|
|
167
|
-
|
|
168
|
-
# @deprecated after v0.7.0, alias of {JSONSchemaDraft06}
|
|
169
|
-
module JSONSchemaOrgDraft06
|
|
110
|
+
module Example end
|
|
111
|
+
module Dependencies::Dependency end
|
|
112
|
+
module Type::Array end
|
|
113
|
+
module NonNegativeIntegerDefault0::Default0 end
|
|
114
|
+
module StringItem end
|
|
170
115
|
end
|
|
171
116
|
end
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module JSI
|
|
4
|
-
metaschema_document =
|
|
5
|
-
JSONSchemaDraft07 = JSI.
|
|
6
|
-
|
|
7
|
-
)
|
|
4
|
+
metaschema_document = Util.json_parse_freeze(SCHEMAS_PATH.join('json-schema.org/draft-07/schema.json').read)
|
|
5
|
+
JSONSchemaDraft07 = JSI.new_metaschema_node(metaschema_document,
|
|
6
|
+
dialect: JSI::Schema::Draft07::DIALECT,
|
|
7
|
+
).jsi_schema_module
|
|
8
8
|
|
|
9
9
|
# the JSI schema module for `http://json-schema.org/draft-07/schema`
|
|
10
10
|
module JSONSchemaDraft07
|
|
11
|
-
# @!parse extend JSI::SchemaModule::
|
|
12
|
-
# @!parse include JSI::Schema::Draft07
|
|
11
|
+
# @!parse extend JSI::SchemaModule::MetaSchemaModule
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
Id = properties['$id']
|
|
@@ -64,135 +63,72 @@ module JSI
|
|
|
64
63
|
SimpleType = definitions['simpleTypes']
|
|
65
64
|
StringArray = definitions['stringArray']
|
|
66
65
|
|
|
67
|
-
module Id
|
|
68
|
-
end
|
|
69
|
-
module
|
|
70
|
-
end
|
|
71
|
-
module
|
|
72
|
-
end
|
|
73
|
-
module
|
|
74
|
-
end
|
|
75
|
-
module
|
|
76
|
-
end
|
|
77
|
-
module
|
|
78
|
-
end
|
|
79
|
-
module
|
|
80
|
-
end
|
|
81
|
-
module
|
|
82
|
-
end
|
|
83
|
-
module
|
|
84
|
-
end
|
|
85
|
-
module
|
|
86
|
-
end
|
|
87
|
-
module
|
|
88
|
-
end
|
|
89
|
-
module
|
|
90
|
-
end
|
|
91
|
-
module
|
|
92
|
-
end
|
|
93
|
-
module
|
|
94
|
-
end
|
|
95
|
-
module
|
|
96
|
-
end
|
|
97
|
-
module
|
|
98
|
-
end
|
|
99
|
-
module
|
|
100
|
-
end
|
|
101
|
-
module
|
|
102
|
-
end
|
|
103
|
-
module
|
|
104
|
-
end
|
|
105
|
-
module
|
|
106
|
-
end
|
|
107
|
-
module
|
|
108
|
-
end
|
|
109
|
-
module
|
|
110
|
-
end
|
|
111
|
-
module
|
|
112
|
-
end
|
|
113
|
-
module MaxProperties
|
|
114
|
-
end
|
|
115
|
-
module MinProperties
|
|
116
|
-
end
|
|
117
|
-
module Required
|
|
118
|
-
end
|
|
119
|
-
module AdditionalProperties
|
|
120
|
-
end
|
|
121
|
-
module Definitions
|
|
122
|
-
end
|
|
123
|
-
module Properties
|
|
124
|
-
end
|
|
125
|
-
module PatternProperties
|
|
126
|
-
end
|
|
127
|
-
module Dependencies
|
|
128
|
-
end
|
|
129
|
-
module PropertyNames
|
|
130
|
-
end
|
|
131
|
-
module Const
|
|
132
|
-
end
|
|
133
|
-
module Enum
|
|
134
|
-
end
|
|
135
|
-
module Type
|
|
136
|
-
end
|
|
137
|
-
module Format
|
|
138
|
-
end
|
|
139
|
-
module ContentMediaType
|
|
140
|
-
end
|
|
141
|
-
module ContentEncoding
|
|
142
|
-
end
|
|
143
|
-
module If
|
|
144
|
-
end
|
|
145
|
-
module Then
|
|
146
|
-
end
|
|
147
|
-
module Else
|
|
148
|
-
end
|
|
149
|
-
module AllOf
|
|
150
|
-
end
|
|
151
|
-
module AnyOf
|
|
152
|
-
end
|
|
153
|
-
module OneOf
|
|
154
|
-
end
|
|
155
|
-
module Not
|
|
156
|
-
end
|
|
66
|
+
module Id end
|
|
67
|
+
module Xschema end
|
|
68
|
+
module Ref end
|
|
69
|
+
module Comment end
|
|
70
|
+
module Title end
|
|
71
|
+
module Description end
|
|
72
|
+
module Default end
|
|
73
|
+
module ReadOnly end
|
|
74
|
+
module Examples end
|
|
75
|
+
module MultipleOf end
|
|
76
|
+
module Maximum end
|
|
77
|
+
module ExclusiveMaximum end
|
|
78
|
+
module Minimum end
|
|
79
|
+
module ExclusiveMinimum end
|
|
80
|
+
module MaxLength end
|
|
81
|
+
module MinLength end
|
|
82
|
+
module Pattern end
|
|
83
|
+
module AdditionalItems end
|
|
84
|
+
module Items end
|
|
85
|
+
module MaxItems end
|
|
86
|
+
module MinItems end
|
|
87
|
+
module UniqueItems end
|
|
88
|
+
module Contains end
|
|
89
|
+
module MaxProperties end
|
|
90
|
+
module MinProperties end
|
|
91
|
+
module Required end
|
|
92
|
+
module AdditionalProperties end
|
|
93
|
+
module Definitions end
|
|
94
|
+
module Properties end
|
|
95
|
+
module PatternProperties end
|
|
96
|
+
module Dependencies end
|
|
97
|
+
module PropertyNames end
|
|
98
|
+
module Const end
|
|
99
|
+
module Enum end
|
|
100
|
+
module Type end
|
|
101
|
+
module Format end
|
|
102
|
+
module ContentMediaType end
|
|
103
|
+
module ContentEncoding end
|
|
104
|
+
module If end
|
|
105
|
+
module Then end
|
|
106
|
+
module Else end
|
|
107
|
+
module AllOf end
|
|
108
|
+
module AnyOf end
|
|
109
|
+
module OneOf end
|
|
110
|
+
module Not end
|
|
157
111
|
|
|
158
|
-
module SchemaArray
|
|
159
|
-
end
|
|
160
|
-
module
|
|
161
|
-
end
|
|
162
|
-
module
|
|
163
|
-
end
|
|
164
|
-
module SimpleType
|
|
165
|
-
end
|
|
166
|
-
module StringArray
|
|
167
|
-
end
|
|
112
|
+
module SchemaArray end
|
|
113
|
+
module NonNegativeInteger end
|
|
114
|
+
module NonNegativeIntegerDefault0 end
|
|
115
|
+
module SimpleType end
|
|
116
|
+
module StringArray end
|
|
168
117
|
|
|
169
118
|
Example = Examples.items
|
|
170
|
-
|
|
119
|
+
PatternProperties::Pattern = PatternProperties.propertyNames
|
|
171
120
|
Dependencies::Dependency = Dependencies.additionalProperties
|
|
172
121
|
Enum::Item = Enum.items
|
|
173
122
|
Type::Array = Type.anyOf[1]
|
|
174
123
|
NonNegativeIntegerDefault0::Default0 = NonNegativeIntegerDefault0.allOf[1]
|
|
175
124
|
StringItem = StringArray.items
|
|
176
125
|
|
|
177
|
-
module Example
|
|
178
|
-
end
|
|
179
|
-
module
|
|
180
|
-
end
|
|
181
|
-
module
|
|
182
|
-
end
|
|
183
|
-
module
|
|
184
|
-
end
|
|
185
|
-
module Type::Array
|
|
186
|
-
end
|
|
187
|
-
module NonNegativeIntegerDefault0::Default0
|
|
188
|
-
end
|
|
189
|
-
module StringItem
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
JSONSchemaOrgDraft07 = JSONSchemaDraft07
|
|
194
|
-
|
|
195
|
-
# @deprecated after v0.7.0, alias of {JSONSchemaDraft07}
|
|
196
|
-
module JSONSchemaOrgDraft07
|
|
126
|
+
module Example end
|
|
127
|
+
module PatternProperties::Pattern end
|
|
128
|
+
module Dependencies::Dependency end
|
|
129
|
+
module Enum::Item end
|
|
130
|
+
module Type::Array end
|
|
131
|
+
module NonNegativeIntegerDefault0::Default0 end
|
|
132
|
+
module StringItem end
|
|
197
133
|
end
|
|
198
134
|
end
|
data/readme.rb
CHANGED
|
@@ -59,7 +59,7 @@ bill = Contact.new_jsi({
|
|
|
59
59
|
}
|
|
60
60
|
],
|
|
61
61
|
"nickname" => "big b",
|
|
62
|
-
})
|
|
62
|
+
}, mutable: true)
|
|
63
63
|
|
|
64
64
|
print 'bill: '
|
|
65
65
|
pp bill
|
|
@@ -78,11 +78,11 @@ bad = Contact.new_jsi({'phone' => [{'number' => [5, 5, 5]}]})
|
|
|
78
78
|
print 'bad: '
|
|
79
79
|
pp bad
|
|
80
80
|
|
|
81
|
-
print 'bad.phone.jsi_validate: '
|
|
82
|
-
pp bad.phone.jsi_validate
|
|
81
|
+
print 'bad.phone[0].jsi_validate: '
|
|
82
|
+
pp bad.phone[0].jsi_validate
|
|
83
83
|
|
|
84
84
|
print 'bill.transform_values(&:size): '
|
|
85
|
-
pp bill.transform_values(&:size)
|
|
85
|
+
pp bill.transform_values(&:size) if Hash.method_defined?(:transform_values)
|
|
86
86
|
|
|
87
87
|
print "bill['nickname']: "
|
|
88
88
|
pp bill['nickname']
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://json-schema.org/draft/2020-12/strict",
|
|
4
|
+
"$vocabulary": {
|
|
5
|
+
"https://json-schema.org/draft/2020-12/vocab/core": true,
|
|
6
|
+
"https://json-schema.org/draft/2020-12/vocab/applicator": true,
|
|
7
|
+
"https://json-schema.org/draft/2020-12/vocab/unevaluated": true,
|
|
8
|
+
"https://json-schema.org/draft/2020-12/vocab/validation": true,
|
|
9
|
+
"https://json-schema.org/draft/2020-12/vocab/meta-data": true,
|
|
10
|
+
"https://json-schema.org/draft/2020-12/vocab/format-annotation": true,
|
|
11
|
+
"https://json-schema.org/draft/2020-12/vocab/content": true
|
|
12
|
+
},
|
|
13
|
+
"$dynamicAnchor": "meta",
|
|
14
|
+
|
|
15
|
+
"title": "Strict version of Core and Validation specifications meta-schema, disallowing all unknown keywords",
|
|
16
|
+
"$ref": "https://json-schema.org/draft/2020-12/schema",
|
|
17
|
+
|
|
18
|
+
"unevaluatedProperties": false
|
|
19
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://json-schema.org/draft/2020-12/meta/applicator",
|
|
4
|
+
"$vocabulary": {
|
|
5
|
+
"https://json-schema.org/draft/2020-12/vocab/applicator": true
|
|
6
|
+
},
|
|
7
|
+
"$dynamicAnchor": "meta",
|
|
8
|
+
|
|
9
|
+
"title": "Applicator vocabulary meta-schema",
|
|
10
|
+
"type": ["object", "boolean"],
|
|
11
|
+
"properties": {
|
|
12
|
+
"prefixItems": { "$ref": "#/$defs/schemaArray" },
|
|
13
|
+
"items": { "$dynamicRef": "#meta" },
|
|
14
|
+
"contains": { "$dynamicRef": "#meta" },
|
|
15
|
+
"additionalProperties": { "$dynamicRef": "#meta" },
|
|
16
|
+
"properties": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": { "$dynamicRef": "#meta" },
|
|
19
|
+
"default": {}
|
|
20
|
+
},
|
|
21
|
+
"patternProperties": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"additionalProperties": { "$dynamicRef": "#meta" },
|
|
24
|
+
"propertyNames": { "format": "regex" },
|
|
25
|
+
"default": {}
|
|
26
|
+
},
|
|
27
|
+
"dependentSchemas": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"additionalProperties": { "$dynamicRef": "#meta" },
|
|
30
|
+
"default": {}
|
|
31
|
+
},
|
|
32
|
+
"propertyNames": { "$dynamicRef": "#meta" },
|
|
33
|
+
"if": { "$dynamicRef": "#meta" },
|
|
34
|
+
"then": { "$dynamicRef": "#meta" },
|
|
35
|
+
"else": { "$dynamicRef": "#meta" },
|
|
36
|
+
"allOf": { "$ref": "#/$defs/schemaArray" },
|
|
37
|
+
"anyOf": { "$ref": "#/$defs/schemaArray" },
|
|
38
|
+
"oneOf": { "$ref": "#/$defs/schemaArray" },
|
|
39
|
+
"not": { "$dynamicRef": "#meta" }
|
|
40
|
+
},
|
|
41
|
+
"$defs": {
|
|
42
|
+
"schemaArray": {
|
|
43
|
+
"type": "array",
|
|
44
|
+
"minItems": 1,
|
|
45
|
+
"items": { "$dynamicRef": "#meta" }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|