class Openapi3Parser::Validators::UnexpectedFields

Public Class Methods

call(*args, **kwargs) click to toggle source
# File lib/openapi3_parser/validators/unexpected_fields.rb, line 11
def self.call(*args, **kwargs)
  new.call(*args, **kwargs)
end

Public Instance Methods

call(validatable, allowed_fields:, allow_extensions: true, raise_on_invalid: true) click to toggle source
# File lib/openapi3_parser/validators/unexpected_fields.rb, line 15
def call(validatable,
         allowed_fields:,
         allow_extensions: true,
         raise_on_invalid: true)
  fields = unexpected_fields(validatable.input,
                             allowed_fields,
                             allow_extensions)
  return if fields.empty?

  if raise_on_invalid
    location_summary = validatable.context.location_summary
    raise Openapi3Parser::Error::UnexpectedFields,
          "Unexpected fields for #{location_summary}: "\
          "#{fields.sentence_join}"
  else
    validatable.add_error(
      "Unexpected fields: #{fields.sentence_join}"
    )
  end
end

Private Instance Methods

unexpected_fields(input, allowed_fields, allow_extensions) click to toggle source
# File lib/openapi3_parser/validators/unexpected_fields.rb, line 38
def unexpected_fields(input, allowed_fields, allow_extensions)
  extra_keys = input.keys - allowed_fields
  return extra_keys unless allow_extensions

  extra_keys.reject { |key| key =~ NodeFactory::EXTENSION_REGEX }
end