openapi_contracts 0.7.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +43 -19
- data/lib/openapi_contracts/doc/operation.rb +27 -0
- data/lib/openapi_contracts/doc/parameter.rb +49 -0
- data/lib/openapi_contracts/doc/path.rb +32 -12
- data/lib/openapi_contracts/doc/pointer.rb +81 -0
- data/lib/openapi_contracts/doc/request.rb +17 -0
- data/lib/openapi_contracts/doc/response.rb +5 -5
- data/lib/openapi_contracts/doc/schema.rb +44 -10
- data/lib/openapi_contracts/doc/with_parameters.rb +9 -0
- data/lib/openapi_contracts/doc.rb +17 -14
- data/lib/openapi_contracts/match.rb +34 -10
- data/lib/openapi_contracts/operation_router.rb +33 -0
- data/lib/openapi_contracts/parser/transformers/base.rb +15 -0
- data/lib/openapi_contracts/parser/transformers/nullable.rb +10 -0
- data/lib/openapi_contracts/parser/transformers/pointer.rb +34 -0
- data/lib/openapi_contracts/parser/transformers.rb +5 -0
- data/lib/openapi_contracts/parser.rb +61 -0
- data/lib/openapi_contracts/payload_parser.rb +39 -0
- data/lib/openapi_contracts/rspec.rb +2 -2
- data/lib/openapi_contracts/validators/base.rb +5 -1
- data/lib/openapi_contracts/validators/documented.rb +12 -5
- data/lib/openapi_contracts/validators/headers.rb +4 -0
- data/lib/openapi_contracts/validators/http_status.rb +2 -6
- data/lib/openapi_contracts/validators/request_body.rb +26 -0
- data/lib/openapi_contracts/validators/response_body.rb +28 -0
- data/lib/openapi_contracts/validators/schema_validation.rb +40 -0
- data/lib/openapi_contracts/validators.rb +9 -6
- data/lib/openapi_contracts.rb +11 -5
- metadata +31 -20
- data/lib/openapi_contracts/doc/file_parser.rb +0 -85
- data/lib/openapi_contracts/doc/method.rb +0 -18
- data/lib/openapi_contracts/doc/parser.rb +0 -44
- data/lib/openapi_contracts/validators/body.rb +0 -38
@@ -1,38 +0,0 @@
|
|
1
|
-
module OpenapiContracts::Validators
|
2
|
-
class Body < Base
|
3
|
-
private
|
4
|
-
|
5
|
-
def validate
|
6
|
-
if spec.no_content?
|
7
|
-
@errors << 'Expected empty response body' if response.body.present?
|
8
|
-
elsif !spec.supports_content_type?(response_content_type)
|
9
|
-
@errors << "Undocumented response with content-type #{response_content_type.inspect}"
|
10
|
-
else
|
11
|
-
validate_schema
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def validate_schema
|
16
|
-
schema = spec.schema_for(response_content_type)
|
17
|
-
# Trick JSONSchemer into validating only against the response schema
|
18
|
-
schemer = JSONSchemer.schema(schema.raw.merge('$ref' => schema.fragment))
|
19
|
-
schemer.validate(JSON(response.body)).each do |err|
|
20
|
-
@errors << error_to_message(err)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def error_to_message(error)
|
25
|
-
if error.key?('details')
|
26
|
-
error['details'].to_a.map do |(key, val)|
|
27
|
-
"#{key.humanize}: #{val} at #{error['data_pointer']}"
|
28
|
-
end.to_sentence
|
29
|
-
else
|
30
|
-
"#{error['data'].inspect} at #{error['data_pointer']} does not match the schema"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def response_content_type
|
35
|
-
response.headers['Content-Type'].split(';').first
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|