Class: RspecContracts::RequestValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec_contracts/request_validator.rb

Class Method Summary collapse

Class Method Details

.optsObject



24
25
26
# File 'lib/rspec_contracts/request_validator.rb', line 24

def opts
  OpenAPIParser::SchemaValidator::Options.new(coerce_value: true, datetime_coerce_class: DateTime)
end

.validate_request(op, request) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rspec_contracts/request_validator.rb', line 6

def validate_request(op, request)
  body = request.body.read
  parsed_body = RspecContracts.valid_json?(body) ? JSON.parse(request.body.read) : nil
  op.validate_request_body(request.content_type, parsed_body, opts)
rescue OpenAPIParser::OpenAPIError => e
  if RspecContracts.config.request_validation_mode == :raise
    raise RspecContracts::Error::RequestValidation.new(e.message)
  end

  formatted_for_logging = {
    body:    parsed_body,
    headers: request.headers.to_h.select {|k, _| k.starts_with?("HTTP_") }
                    .transform_keys {|k| k.remove("HTTP_").downcase }
  }
  RspecContracts.config.logger.error "Contract validation warning: #{e.message}"
  RspecContracts.config.logger.error "Request was: #{formatted_for_logging}"
end