Class: Skooma::Keywords::OAS31::Dialect::Discriminator

Inherits:
JSONSkooma::Keywords::Base
  • Object
show all
Defined in:
lib/skooma/keywords/oas_3_1/dialect/discriminator.rb

Overview

Discriminator keyword is an annotation keyword, it does not affect validation of allOf/anyOf/oneOf schemas. See github.com/OAI/OpenAPI-Specification/pull/2618

Instance Method Summary collapse

Instance Method Details

#evaluate(instance, result) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/skooma/keywords/oas_3_1/dialect/discriminator.rb', line 13

def evaluate(instance, result)
  value = instance[json["propertyName"]]
  uri = mapped_uri(value)
  return result.failure("Could not resolve discriminator for value `#{value.inspect}`") if uri.nil?

  parent_schema.registry.schema(
    uri,
    metaschema_uri: parent_schema.metaschema_uri,
    cache_id: parent_schema.cache_id
  )
  result.annotate(uri)
rescue JSONSkooma::RegistryError => e
  result.failure("Could not resolve discriminator mapping: #{e.message}")
end