Sha256: 01f51849d5fd7f73e81920c7d708ea5020d45bb627dfdb1514d3d889179a4af5

Contents?: true

Size: 1.51 KB

Versions: 6

Compression:

Stored size: 1.51 KB

Contents

# validate AllOf schema
class OpenAPIParser::SchemaValidator
  class AllOfValidator < Base
    # coerce and validate value
    # @param [Object] value
    # @param [OpenAPIParser::Schemas::Schema] schema
    def coerce_and_validate(value, schema, **keyword_args)
      # if any schema return error, it's not valida all of value
      remaining_keys               = value.kind_of?(Hash) ? value.keys : []
      nested_additional_properties = false
      schema.all_of.each do |s|
        # We need to store the reference to all of, so we can perform strict check on allowed properties
        _coerced, err = validatable.validate_schema(
          value,
          s,
          :parent_all_of => true,
          parent_discriminator_schemas: keyword_args[:parent_discriminator_schemas]
        )

        if s.type == "object"
          remaining_keys               -= (s.properties || {}).keys
          nested_additional_properties = true if s.additional_properties
        else
          # If this is not allOf having array of objects inside, but e.g. having another anyOf/oneOf nested
          remaining_keys.clear
        end

        return [nil, err] if err
      end

      # If there are nested additionalProperites, we allow not defined extra properties and lean on the specific
      # additionalProperties validation
      if !nested_additional_properties && !remaining_keys.empty?
        return [nil, OpenAPIParser::NotExistPropertyDefinition.new(remaining_keys, schema.object_reference)]
      end

      [value, nil]
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
openapi_parser_firetail-1.0.0 lib/openapi_parser/schema_validator/all_of_validator.rb
openapi_parser-1.0.0 lib/openapi_parser/schema_validators/all_of_validator.rb
openapi_parser-1.0.0.beta1 lib/openapi_parser/schema_validators/all_of_validator.rb
openapi_parser-0.15.0 lib/openapi_parser/schema_validators/all_of_validator.rb
openapi_parser-0.14.1 lib/openapi_parser/schema_validators/all_of_validator.rb
openapi_parser-0.14.0 lib/openapi_parser/schema_validators/all_of_validator.rb