jsi 0.6.0 → 0.8.0
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 +6 -1
- data/CHANGELOG.md +33 -0
- data/LICENSE.md +1 -1
- data/README.md +29 -23
- data/jsi.gemspec +29 -0
- data/lib/jsi/base/mutability.rb +44 -0
- data/lib/jsi/base/node.rb +348 -0
- data/lib/jsi/base.rb +497 -339
- data/lib/jsi/jsi_coder.rb +19 -17
- data/lib/jsi/metaschema_node/bootstrap_schema.rb +61 -26
- data/lib/jsi/metaschema_node.rb +161 -133
- data/lib/jsi/ptr.rb +80 -47
- data/lib/jsi/schema/application/child_application/contains.rb +11 -2
- data/lib/jsi/schema/application/child_application/draft04.rb +0 -1
- data/lib/jsi/schema/application/child_application/draft06.rb +0 -1
- data/lib/jsi/schema/application/child_application/draft07.rb +0 -1
- data/lib/jsi/schema/application/child_application/items.rb +3 -3
- data/lib/jsi/schema/application/child_application/properties.rb +3 -3
- data/lib/jsi/schema/application/child_application.rb +0 -27
- data/lib/jsi/schema/application/inplace_application/dependencies.rb +1 -1
- data/lib/jsi/schema/application/inplace_application/draft04.rb +0 -1
- data/lib/jsi/schema/application/inplace_application/draft06.rb +0 -1
- data/lib/jsi/schema/application/inplace_application/draft07.rb +0 -1
- data/lib/jsi/schema/application/inplace_application/ifthenelse.rb +3 -3
- data/lib/jsi/schema/application/inplace_application/ref.rb +2 -2
- data/lib/jsi/schema/application/inplace_application/someof.rb +26 -11
- data/lib/jsi/schema/application/inplace_application.rb +0 -32
- data/lib/jsi/schema/draft04.rb +0 -1
- data/lib/jsi/schema/draft06.rb +0 -1
- data/lib/jsi/schema/draft07.rb +0 -1
- data/lib/jsi/schema/ref.rb +46 -19
- data/lib/jsi/schema/schema_ancestor_node.rb +69 -66
- data/lib/jsi/schema/validation/array.rb +3 -3
- data/lib/jsi/schema/validation/const.rb +1 -1
- data/lib/jsi/schema/validation/contains.rb +2 -2
- data/lib/jsi/schema/validation/dependencies.rb +1 -1
- data/lib/jsi/schema/validation/draft04/minmax.rb +8 -6
- data/lib/jsi/schema/validation/draft04.rb +0 -2
- data/lib/jsi/schema/validation/draft06.rb +0 -2
- data/lib/jsi/schema/validation/draft07.rb +0 -2
- data/lib/jsi/schema/validation/enum.rb +1 -1
- data/lib/jsi/schema/validation/ifthenelse.rb +5 -5
- data/lib/jsi/schema/validation/items.rb +7 -7
- data/lib/jsi/schema/validation/not.rb +1 -1
- data/lib/jsi/schema/validation/numeric.rb +5 -5
- data/lib/jsi/schema/validation/object.rb +2 -2
- data/lib/jsi/schema/validation/pattern.rb +2 -2
- data/lib/jsi/schema/validation/properties.rb +7 -7
- data/lib/jsi/schema/validation/property_names.rb +1 -1
- data/lib/jsi/schema/validation/ref.rb +2 -2
- data/lib/jsi/schema/validation/required.rb +1 -1
- data/lib/jsi/schema/validation/someof.rb +3 -3
- data/lib/jsi/schema/validation/string.rb +2 -2
- data/lib/jsi/schema/validation/type.rb +1 -1
- data/lib/jsi/schema/validation.rb +1 -3
- data/lib/jsi/schema.rb +443 -226
- data/lib/jsi/schema_classes.rb +241 -147
- data/lib/jsi/schema_registry.rb +78 -19
- data/lib/jsi/schema_set.rb +114 -28
- data/lib/jsi/simple_wrap.rb +18 -4
- data/lib/jsi/util/private/attr_struct.rb +141 -0
- data/lib/jsi/util/private/memo_map.rb +75 -0
- data/lib/jsi/util/private.rb +185 -0
- data/lib/jsi/{typelike_modules.rb → util/typelike.rb} +79 -105
- data/lib/jsi/util.rb +157 -153
- data/lib/jsi/validation/error.rb +4 -0
- data/lib/jsi/validation/result.rb +18 -32
- data/lib/jsi/version.rb +1 -1
- data/lib/jsi.rb +65 -39
- data/lib/schemas/json-schema.org/draft-04/schema.rb +160 -3
- data/lib/schemas/json-schema.org/draft-06/schema.rb +162 -3
- data/lib/schemas/json-schema.org/draft-07/schema.rb +189 -3
- metadata +27 -11
- data/lib/jsi/metaschema.rb +0 -7
- data/lib/jsi/pathed_node.rb +0 -116
- data/lib/jsi/schema/validation/core.rb +0 -39
- data/lib/jsi/util/attr_struct.rb +0 -106
@@ -6,7 +6,7 @@ module JSI
|
|
6
6
|
def internal_validate_properties(result_builder)
|
7
7
|
evaluated_property_names = Set[]
|
8
8
|
|
9
|
-
if
|
9
|
+
if keyword?('properties')
|
10
10
|
value = schema_content['properties']
|
11
11
|
# The value of "properties" MUST be an object. Each value of this object MUST be a valid JSON Schema.
|
12
12
|
if value.respond_to?(:to_hash)
|
@@ -19,8 +19,8 @@ module JSI
|
|
19
19
|
if value.key?(property_name)
|
20
20
|
evaluated_property_names << property_name
|
21
21
|
results[property_name] = result_builder.child_subschema_validate(
|
22
|
+
property_name,
|
22
23
|
['properties', property_name],
|
23
|
-
[property_name],
|
24
24
|
)
|
25
25
|
end
|
26
26
|
end
|
@@ -36,7 +36,7 @@ module JSI
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
if
|
39
|
+
if keyword?('patternProperties')
|
40
40
|
value = schema_content['patternProperties']
|
41
41
|
# The value of "patternProperties" MUST be an object. Each property name of this object SHOULD be a
|
42
42
|
# valid regular expression, according to the ECMA 262 regular expression dialect. Each property value
|
@@ -54,8 +54,8 @@ module JSI
|
|
54
54
|
if value_property_pattern.respond_to?(:to_str) && Regexp.new(value_property_pattern).match(property_name.to_s)
|
55
55
|
evaluated_property_names << property_name
|
56
56
|
results[property_name] = result_builder.child_subschema_validate(
|
57
|
+
property_name,
|
57
58
|
['patternProperties', value_property_pattern],
|
58
|
-
[property_name],
|
59
59
|
)
|
60
60
|
end
|
61
61
|
rescue ::RegexpError
|
@@ -75,7 +75,7 @@ module JSI
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
if
|
78
|
+
if keyword?('additionalProperties')
|
79
79
|
value = schema_content['additionalProperties']
|
80
80
|
# The value of "additionalProperties" MUST be a valid JSON Schema.
|
81
81
|
if result_builder.instance.respond_to?(:to_hash)
|
@@ -83,11 +83,11 @@ module JSI
|
|
83
83
|
result_builder.instance.keys.each do |property_name|
|
84
84
|
if !evaluated_property_names.include?(property_name)
|
85
85
|
results[property_name] = result_builder.child_subschema_validate(
|
86
|
+
property_name,
|
86
87
|
['additionalProperties'],
|
87
|
-
[property_name],
|
88
88
|
)
|
89
89
|
end
|
90
|
-
end
|
90
|
+
end
|
91
91
|
result_builder.validate(
|
92
92
|
results.values.all?(&:valid?),
|
93
93
|
'instance object additional properties are not all valid against `additionalProperties` schema value',
|
@@ -4,7 +4,7 @@ module JSI
|
|
4
4
|
module Schema::Validation::PropertyNames
|
5
5
|
# @private
|
6
6
|
def internal_validate_propertyNames(result_builder)
|
7
|
-
if
|
7
|
+
if keyword?('propertyNames')
|
8
8
|
# The value of "propertyNames" MUST be a valid JSON Schema.
|
9
9
|
#
|
10
10
|
# If the instance is an object, this keyword validates if every property name in the instance
|
@@ -6,11 +6,11 @@ module JSI
|
|
6
6
|
# @param throw_result [Boolean] if a $ref is present, whether to throw the result being built after
|
7
7
|
# validating the $ref, bypassing subsequent keyword validation
|
8
8
|
def internal_validate_ref(result_builder, throw_result: false)
|
9
|
-
if
|
9
|
+
if keyword?('$ref')
|
10
10
|
value = schema_content['$ref']
|
11
11
|
|
12
12
|
if value.respond_to?(:to_str)
|
13
|
-
schema_ref =
|
13
|
+
schema_ref = self.schema_ref('$ref')
|
14
14
|
|
15
15
|
if result_builder.visited_refs.include?(schema_ref)
|
16
16
|
result_builder.schema_error('self-referential schema structure', '$ref')
|
@@ -4,7 +4,7 @@ module JSI
|
|
4
4
|
module Schema::Validation::Required
|
5
5
|
# @private
|
6
6
|
def internal_validate_required(result_builder)
|
7
|
-
if
|
7
|
+
if keyword?('required')
|
8
8
|
value = schema_content['required']
|
9
9
|
# The value of this keyword MUST be an array. Elements of this array, if any, MUST be strings, and MUST be unique.
|
10
10
|
if value.respond_to?(:to_ary)
|
@@ -4,7 +4,7 @@ module JSI
|
|
4
4
|
module Schema::Validation::AllOf
|
5
5
|
# @private
|
6
6
|
def internal_validate_allOf(result_builder)
|
7
|
-
if
|
7
|
+
if keyword?('allOf')
|
8
8
|
value = schema_content['allOf']
|
9
9
|
# This keyword's value MUST be a non-empty array. Each item of the array MUST be a valid JSON Schema.
|
10
10
|
if value.respond_to?(:to_ary)
|
@@ -29,7 +29,7 @@ module JSI
|
|
29
29
|
module Schema::Validation::AnyOf
|
30
30
|
# @private
|
31
31
|
def internal_validate_anyOf(result_builder)
|
32
|
-
if
|
32
|
+
if keyword?('anyOf')
|
33
33
|
value = schema_content['anyOf']
|
34
34
|
# This keyword's value MUST be a non-empty array. Each item of the array MUST be a valid JSON Schema.
|
35
35
|
if value.respond_to?(:to_ary)
|
@@ -56,7 +56,7 @@ module JSI
|
|
56
56
|
module Schema::Validation::OneOf
|
57
57
|
# @private
|
58
58
|
def internal_validate_oneOf(result_builder)
|
59
|
-
if
|
59
|
+
if keyword?('oneOf')
|
60
60
|
value = schema_content['oneOf']
|
61
61
|
# This keyword's value MUST be a non-empty array. Each item of the array MUST be a valid JSON Schema.
|
62
62
|
if value.respond_to?(:to_ary)
|
@@ -4,7 +4,7 @@ module JSI
|
|
4
4
|
module Schema::Validation::StringLength
|
5
5
|
# @private
|
6
6
|
def internal_validate_maxLength(result_builder)
|
7
|
-
if
|
7
|
+
if keyword?('maxLength')
|
8
8
|
value = schema_content['maxLength']
|
9
9
|
# The value of this keyword MUST be a non-negative integer.
|
10
10
|
if internal_integer?(value) && value >= 0
|
@@ -25,7 +25,7 @@ module JSI
|
|
25
25
|
|
26
26
|
# @private
|
27
27
|
def internal_validate_minLength(result_builder)
|
28
|
-
if
|
28
|
+
if keyword?('minLength')
|
29
29
|
value = schema_content['minLength']
|
30
30
|
# The value of this keyword MUST be a non-negative integer.
|
31
31
|
if internal_integer?(value) && value >= 0
|
@@ -4,7 +4,7 @@ module JSI
|
|
4
4
|
module Schema::Validation::Type
|
5
5
|
# @private
|
6
6
|
def internal_validate_type(result_builder)
|
7
|
-
if
|
7
|
+
if keyword?('type')
|
8
8
|
value = schema_content['type']
|
9
9
|
instance = result_builder.instance
|
10
10
|
# The value of this keyword MUST be either a string or an array. If it is an array, elements of
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
module JSI
|
4
4
|
module Schema::Validation
|
5
|
-
autoload :Core, 'jsi/schema/validation/core'
|
6
|
-
|
7
5
|
autoload :Draft04, 'jsi/schema/validation/draft04'
|
8
6
|
autoload :Draft06, 'jsi/schema/validation/draft06'
|
9
7
|
autoload :Draft07, 'jsi/schema/validation/draft07'
|
@@ -15,7 +13,6 @@ module JSI
|
|
15
13
|
autoload :AllOf, 'jsi/schema/validation/someof'
|
16
14
|
autoload :AnyOf, 'jsi/schema/validation/someof'
|
17
15
|
autoload :OneOf, 'jsi/schema/validation/someof'
|
18
|
-
autoload :Not, 'jsi/schema/validation/not'
|
19
16
|
autoload :IfThenElse, 'jsi/schema/validation/ifthenelse'
|
20
17
|
|
21
18
|
# child subschema application
|
@@ -30,6 +27,7 @@ module JSI
|
|
30
27
|
autoload :Type, 'jsi/schema/validation/type'
|
31
28
|
autoload :Enum, 'jsi/schema/validation/enum'
|
32
29
|
autoload :Const, 'jsi/schema/validation/const'
|
30
|
+
autoload :Not, 'jsi/schema/validation/not'
|
33
31
|
|
34
32
|
# object validation
|
35
33
|
autoload :Required, 'jsi/schema/validation/required'
|