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
@@ -1,25 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JSI
4
- metaschema_document = ::JSON.parse(SCHEMAS_PATH.join('json-schema.org/draft-04/schema.json').read)
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
- # in draft 4, boolean schemas are not described in the root, but on anyOf schemas on
10
- # properties/additionalProperties and properties/additionalItems.
11
- # these still describe schemas, despite not being described by the metaschema.
12
- also_describe_schemas =
13
- JSONSchemaDraft04.schema["properties"]["additionalProperties"]["anyOf"] +
14
- JSONSchemaDraft04.schema["properties"]["additionalItems"]["anyOf"]
15
- also_describe_schemas.each do |schema|
16
- schema.describes_schema!([JSI::Schema::Draft04])
17
- end
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::DescribesSchemaModule
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 Xschema
68
- end
69
- module Title
70
- end
71
- module Description
72
- end
73
- module Default
74
- end
75
- module MultipleOf
76
- end
77
- module Maximum
78
- end
79
- module ExclusiveMaximum
80
- end
81
- module Minimum
82
- end
83
- module ExclusiveMinimum
84
- end
85
- module MaxLength
86
- end
87
- module MinLength
88
- end
89
- module Pattern
90
- end
91
- module AdditionalItems
92
- end
93
- module Items
94
- end
95
- module MaxItems
96
- end
97
- module MinItems
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 PositiveInteger
135
- end
136
- module PositiveIntegerDefault0
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 AdditionalProperties::Boolean
153
- end
154
- module Dependencies::Dependency
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 = ::JSON.parse(SCHEMAS_PATH.join('json-schema.org/draft-06/schema.json').read)
5
- JSONSchemaDraft06 = JSI.new_metaschema_module(metaschema_document,
6
- schema_implementation_modules: [JSI::Schema::Draft06],
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::DescribesSchemaModule
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 Xschema
63
- end
64
- module Ref
65
- end
66
- module Title
67
- end
68
- module Description
69
- end
70
- module Default
71
- end
72
- module Examples
73
- end
74
- module MultipleOf
75
- end
76
- module Maximum
77
- end
78
- module ExclusiveMaximum
79
- end
80
- module Minimum
81
- end
82
- module ExclusiveMinimum
83
- end
84
- module MaxLength
85
- end
86
- module MinLength
87
- end
88
- module Pattern
89
- end
90
- module AdditionalItems
91
- end
92
- module Items
93
- end
94
- module MaxItems
95
- end
96
- module MinItems
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 NonNegativeInteger
140
- end
141
- module NonNegativeIntegerDefault0
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 Dependencies::Dependency
157
- end
158
- module Type::Array
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 = ::JSON.parse(SCHEMAS_PATH.join('json-schema.org/draft-07/schema.json').read)
5
- JSONSchemaDraft07 = JSI.new_metaschema_module(metaschema_document,
6
- schema_implementation_modules: [JSI::Schema::Draft07],
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::DescribesSchemaModule
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 Xschema
70
- end
71
- module Ref
72
- end
73
- module Comment
74
- end
75
- module Title
76
- end
77
- module Description
78
- end
79
- module Default
80
- end
81
- module ReadOnly
82
- end
83
- module Examples
84
- end
85
- module MultipleOf
86
- end
87
- module Maximum
88
- end
89
- module ExclusiveMaximum
90
- end
91
- module Minimum
92
- end
93
- module ExclusiveMinimum
94
- end
95
- module MaxLength
96
- end
97
- module MinLength
98
- end
99
- module Pattern
100
- end
101
- module AdditionalItems
102
- end
103
- module Items
104
- end
105
- module MaxItems
106
- end
107
- module MinItems
108
- end
109
- module UniqueItems
110
- end
111
- module Contains
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 NonNegativeInteger
161
- end
162
- module NonNegativeIntegerDefault0
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
- PatternPropertyPattern = PatternProperties.propertyNames
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 PatternPropertyPattern
180
- end
181
- module Dependencies::Dependency
182
- end
183
- module Enum::Item
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
+ }