class OpenapiValidator::RequestValidator

Attributes

api_doc[R]
errors[R]
path_validator[R]
request[R]
validator[R]

Public Class Methods

call(**params) click to toggle source
# File lib/openapi_validator/request_validator.rb, line 13
def self.call(**params)
  new(**params).call
end
new(request:, validator:) click to toggle source
# File lib/openapi_validator/request_validator.rb, line 44
def initialize(request:, validator:)
  @validator = validator
  @request = request
  @errors = []
end

Public Instance Methods

call() click to toggle source
# File lib/openapi_validator/request_validator.rb, line 17
def call
  validate_path
  self
end
valid?() click to toggle source
# File lib/openapi_validator/request_validator.rb, line 9
def valid?
  errors.empty?
end
validate_response(body:, code:, media_type: request.media_type) click to toggle source
# File lib/openapi_validator/request_validator.rb, line 22
def validate_response(body:, code:, media_type: request.media_type)
  if request.code != code.to_s
    @errors << "Path #{request.path} did not respond with expected status code. Expected #{request.code} got #{code}"
  end

  if path_validator.empty_schema?
    @errors << "Path #{request.path} should return empty response." unless body.empty?
  else
    @errors += OpenapiValidator::ResponseValidator.call(
      request: request, schema: validator.api_doc, data: body, media_type: media_type,
      fragment: path_validator.fragment(media_type: media_type), response: true
    ).errors
  end

  validator.remove_validated_path(path_validator.path) if @errors.empty?
  self
end

Private Instance Methods

validate_path() click to toggle source
# File lib/openapi_validator/request_validator.rb, line 50
def validate_path
  @path_validator = PathValidator.call(request: request, api_doc: validator.api_doc)
rescue PathValidator::Error => e
  @errors << e.message
end