jsi 0.6.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|