@@ -120,15 +120,42 @@ def validate_instance(instance)
120
120
yield error ( instance , 'enum' ) if enum && !enum . include? ( data )
121
121
yield error ( instance , 'const' ) if schema . key? ( 'const' ) && schema [ 'const' ] != data
122
122
123
- yield error ( instance , 'allOf' ) if all_of && !all_of . all? { |subschema | valid_instance? ( instance . merge ( schema : subschema ) ) }
124
- yield error ( instance , 'anyOf' ) if any_of && !any_of . any? { |subschema | valid_instance? ( instance . merge ( schema : subschema ) ) }
125
- yield error ( instance , 'oneOf' ) if one_of && !one_of . one? { |subschema | valid_instance? ( instance . merge ( schema : subschema ) ) }
126
- yield error ( instance , 'not' ) if !not_schema . nil? && valid_instance? ( instance . merge ( schema : not_schema ) )
123
+ if all_of
124
+ subschemas = all_of . lazy . with_index . map do |subschema , index |
125
+ validate_instance ( instance . merge ( schema : subschema , schema_pointer : "#{ instance . schema_pointer } /allOf/#{ index } " ) )
126
+ end
127
+ subschemas . each { |subschema | subschema . each ( &Proc . new ) } unless subschemas . all? ( &:none? )
128
+ end
129
+
130
+ if any_of
131
+ subschemas = any_of . lazy . with_index . map do |subschema , index |
132
+ validate_instance ( instance . merge ( schema : subschema , schema_pointer : "#{ instance . schema_pointer } /anyOf/#{ index } " ) )
133
+ end
134
+ subschemas . each { |subschema | subschema . each ( &Proc . new ) } unless subschemas . any? ( &:none? )
135
+ end
136
+
137
+ if one_of
138
+ subschemas = one_of . lazy . with_index . map do |subschema , index |
139
+ validate_instance ( instance . merge ( schema : subschema , schema_pointer : "#{ instance . schema_pointer } /oneOf/#{ index } " ) )
140
+ end
141
+ unless subschemas . one? ( &:none? )
142
+ if subschemas . all? ( &:none? )
143
+ yield error ( instance , 'oneOf' )
144
+ else
145
+ subschemas . each { |subschema | subschema . each ( &Proc . new ) }
146
+ end
147
+ end
148
+ end
149
+
150
+ unless not_schema . nil?
151
+ subinstance = instance . merge ( schema : not_schema , schema_pointer : "#{ instance . schema_pointer } /not" )
152
+ yield error ( subinstance , 'not' ) if valid_instance? ( subinstance )
153
+ end
127
154
128
155
if if_schema && valid_instance? ( instance . merge ( schema : if_schema ) )
129
- yield error ( instance , ' then' ) if ! then_schema . nil? && ! valid_instance? ( instance . merge ( schema : then_schema ) )
156
+ validate_instance ( instance . merge ( schema : then_schema , schema_pointer : " #{ instance . schema_pointer } / then" ) , & Proc . new ) unless then_schema . nil?
130
157
elsif if_schema
131
- yield error ( instance , ' else' ) if ! else_schema . nil? && ! valid_instance? ( instance . merge ( schema : else_schema ) )
158
+ validate_instance ( instance . merge ( schema : else_schema , schema_pointer : " #{ instance . schema_pointer } / else" ) , & Proc . new ) unless else_schema . nil?
132
159
end
133
160
134
161
case type
0 commit comments