12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/skooma/keywords/oas_3_1/dialect/required.rb', line 12
def evaluate(instance, result)
missing = required_keys.reject { |key| instance.key?(key) }
return if missing.none?
if json.root.enforce_access_modes?
properties_schema = result.sibling(instance, "properties")&.schema_node || {}
only_key = result.path.include?("responses") ? "writeOnly" : "readOnly"
ignore = []
missing.each do |name|
next unless properties_schema.key?(name)
result.call(nil, name) do |subresult|
properties_schema[name].evaluate(nil, subresult)
ignore << name if annotation_exists?(subresult, key: only_key)
subresult.discard
end
end
return if (missing - ignore).none?
end
result.failure(missing_keys_message(missing))
end
|