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..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
|