Class: Skooma::Keywords::OAS31::Dialect::Required

Inherits:
JSONSkooma::Keywords::Validation::Required
  • Object
show all
Defined in:
lib/skooma/keywords/oas_3_1/dialect/required.rb

Instance Method Summary collapse

Instance Method Details

#evaluate(instance, result) ⇒ Object



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