committee 4.2.0 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/committee/errors.rb +12 -0
- data/lib/committee/middleware/request_validation.rb +1 -5
- data/lib/committee/middleware/response_validation.rb +1 -5
- data/lib/committee/request_unpacker.rb +1 -1
- data/lib/committee/schema_validator/open_api_3/operation_wrapper.rb +4 -4
- data/lib/committee/test/methods.rb +1 -6
- data/test/request_unpacker_test.rb +20 -0
- data/test/schema_validator/open_api_3/operation_wrapper_test.rb +6 -0
- data/test/schema_validator/open_api_3/response_validator_test.rb +4 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 238def2dc052574b0bb8022a3765df9a6f5c3b359ee34d9bcdbdccef7240748a
|
4
|
+
data.tar.gz: 615f73429b3c9e4336cdfef38db5d4f9ec778298fdc96139f10d83f8d12cf296
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 113e66a74a6e2214f53aaf572c8563f1d99b273e70ac0f96e1f77c3aaf44c0af4964468bd11bfaf906449db8fb9a7f32b7e6943aa11e5895b11c92e09481c62f
|
7
|
+
data.tar.gz: 8c7fd8cddfea01a569a85ee1f49ff41e1854474b922c0cdeec0b96cfff57349fa9905d84cf8727b48fdfa3fd026d69b4f4493964e6d7b7917086777c1cdf89ad
|
data/lib/committee/errors.rb
CHANGED
@@ -8,9 +8,21 @@ module Committee
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class InvalidRequest < Error
|
11
|
+
attr_reader :original_error
|
12
|
+
|
13
|
+
def initialize(error_message=nil, original_error: nil)
|
14
|
+
@original_error = original_error
|
15
|
+
super(error_message)
|
16
|
+
end
|
11
17
|
end
|
12
18
|
|
13
19
|
class InvalidResponse < Error
|
20
|
+
attr_reader :original_error
|
21
|
+
|
22
|
+
def initialize(error_message=nil, original_error: nil)
|
23
|
+
@original_error = original_error
|
24
|
+
super(error_message)
|
25
|
+
end
|
14
26
|
end
|
15
27
|
|
16
28
|
class NotFound < Error
|
@@ -42,11 +42,7 @@ module Committee
|
|
42
42
|
if @error_handler.arity > 1
|
43
43
|
@error_handler.call(e, env)
|
44
44
|
else
|
45
|
-
warn
|
46
|
-
[DEPRECATION] Using `error_handler.call(exception)` is deprecated and will be change to
|
47
|
-
`error_handler.call(exception, request.env)` in next major version.
|
48
|
-
MESSAGE
|
49
|
-
|
45
|
+
warn '[DEPRECATION] Using `error_handler.call(exception)` is deprecated and will be change to `error_handler.call(exception, request.env)` in next major version.'
|
50
46
|
@error_handler.call(e)
|
51
47
|
end
|
52
48
|
end
|
@@ -46,11 +46,7 @@ module Committee
|
|
46
46
|
if @error_handler.arity > 1
|
47
47
|
@error_handler.call(e, env)
|
48
48
|
else
|
49
|
-
warn
|
50
|
-
[DEPRECATION] Using `error_handler.call(exception)` is deprecated and will be change to
|
51
|
-
`error_handler.call(exception, request.env)` in next major version.
|
52
|
-
MESSAGE
|
53
|
-
|
49
|
+
warn '[DEPRECATION] Using `error_handler.call(exception)` is deprecated and will be change to `error_handler.call(exception, request.env)` in next major version.'
|
54
50
|
@error_handler.call(e)
|
55
51
|
end
|
56
52
|
end
|
@@ -16,7 +16,7 @@ module Committee
|
|
16
16
|
def call
|
17
17
|
# if Content-Type is empty or JSON, and there was a request body, try to
|
18
18
|
# interpret it as JSON
|
19
|
-
params = if !@request.media_type || @request.media_type =~ %r{application
|
19
|
+
params = if !@request.media_type || @request.media_type =~ %r{application/(?:.*\+)?json}
|
20
20
|
parse_json
|
21
21
|
elsif @optimistic_json
|
22
22
|
begin
|
@@ -23,7 +23,7 @@ module Committee
|
|
23
23
|
|
24
24
|
request_operation.validate_path_params(options)
|
25
25
|
rescue OpenAPIParser::OpenAPIError => e
|
26
|
-
raise Committee::InvalidRequest.new(e.message)
|
26
|
+
raise Committee::InvalidRequest.new(e.message, original_error: e)
|
27
27
|
end
|
28
28
|
|
29
29
|
# @param [Boolean] strict when not content_type or status code definition, raise error
|
@@ -32,7 +32,7 @@ module Committee
|
|
32
32
|
|
33
33
|
return request_operation.validate_response_body(response_body, response_validate_options(strict, check_header))
|
34
34
|
rescue OpenAPIParser::OpenAPIError => e
|
35
|
-
raise Committee::InvalidResponse.new(e.message)
|
35
|
+
raise Committee::InvalidResponse.new(e.message, original_error: e)
|
36
36
|
end
|
37
37
|
|
38
38
|
def validate_request_params(params, headers, validator_option)
|
@@ -109,7 +109,7 @@ module Committee
|
|
109
109
|
# bad performance because when we coerce value, same check
|
110
110
|
request_operation.validate_request_parameter(params, headers, build_openapi_parser_get_option(validator_option))
|
111
111
|
rescue OpenAPIParser::OpenAPIError => e
|
112
|
-
raise Committee::InvalidRequest.new(e.message)
|
112
|
+
raise Committee::InvalidRequest.new(e.message, original_error: e)
|
113
113
|
end
|
114
114
|
|
115
115
|
def validate_post_request_params(params, headers, validator_option)
|
@@ -120,7 +120,7 @@ module Committee
|
|
120
120
|
request_operation.validate_request_parameter(params, headers, schema_validator_options)
|
121
121
|
request_operation.validate_request_body(content_type, params, schema_validator_options)
|
122
122
|
rescue => e
|
123
|
-
raise Committee::InvalidRequest.new(e.message)
|
123
|
+
raise Committee::InvalidRequest.new(e.message, original_error: e)
|
124
124
|
end
|
125
125
|
|
126
126
|
def response_validate_options(strict, check_header)
|
@@ -58,12 +58,7 @@ module Committee
|
|
58
58
|
def old_behavior
|
59
59
|
old_assert_behavior = committee_options.fetch(:old_assert_behavior, nil)
|
60
60
|
if old_assert_behavior.nil?
|
61
|
-
warn
|
62
|
-
[DEPRECATION] now assert_schema_conform check response schema only.
|
63
|
-
but we will change check request and response in future major version.
|
64
|
-
so if you want to conform response only, please use assert_response_schema_confirm,
|
65
|
-
or you can suppress this message and keep old behavior by setting old_assert_behavior=true.
|
66
|
-
MSG
|
61
|
+
warn '[DEPRECATION] now assert_schema_conform check response schema only. but we will change check request and response in future major version. so if you want to conform response only, please use assert_response_schema_confirm, or you can suppress this message and keep old behavior by setting old_assert_behavior=true.'
|
67
62
|
old_assert_behavior = true
|
68
63
|
end
|
69
64
|
old_assert_behavior
|
@@ -13,6 +13,16 @@ describe Committee::RequestUnpacker do
|
|
13
13
|
assert_equal({ "x" => "y" }, params)
|
14
14
|
end
|
15
15
|
|
16
|
+
it "unpacks JSON on Content-Type: application/vnd.api+json" do
|
17
|
+
env = {
|
18
|
+
"CONTENT_TYPE" => "application/vnd.api+json",
|
19
|
+
"rack.input" => StringIO.new('{"x":"y"}'),
|
20
|
+
}
|
21
|
+
request = Rack::Request.new(env)
|
22
|
+
params, _ = Committee::RequestUnpacker.new(request).call
|
23
|
+
assert_equal({ "x" => "y" }, params)
|
24
|
+
end
|
25
|
+
|
16
26
|
it "unpacks JSON on no Content-Type" do
|
17
27
|
env = {
|
18
28
|
"rack.input" => StringIO.new('{"x":"y"}'),
|
@@ -22,6 +32,16 @@ describe Committee::RequestUnpacker do
|
|
22
32
|
assert_equal({ "x" => "y" }, params)
|
23
33
|
end
|
24
34
|
|
35
|
+
it "doesn't unpack JSON on application/x-ndjson" do
|
36
|
+
env = {
|
37
|
+
"CONTENT_TYPE" => "application/x-ndjson",
|
38
|
+
"rack.input" => StringIO.new('{"x":"y"}\n{"a":"b"}'),
|
39
|
+
}
|
40
|
+
request = Rack::Request.new(env)
|
41
|
+
params, _ = Committee::RequestUnpacker.new(request).call
|
42
|
+
assert_equal({}, params)
|
43
|
+
end
|
44
|
+
|
25
45
|
it "doesn't unpack JSON under other Content-Types" do
|
26
46
|
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
27
47
|
env = {
|
@@ -58,6 +58,7 @@ describe Committee::SchemaValidator::OpenAPI3::OperationWrapper do
|
|
58
58
|
}
|
59
59
|
|
60
60
|
assert_match(/expected string, but received Integer: 1/i, e.message)
|
61
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
61
62
|
end
|
62
63
|
|
63
64
|
it 'support put method' do
|
@@ -69,6 +70,7 @@ describe Committee::SchemaValidator::OpenAPI3::OperationWrapper do
|
|
69
70
|
}
|
70
71
|
|
71
72
|
assert_match(/expected string, but received Integer: 1/i, e.message)
|
73
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
72
74
|
end
|
73
75
|
|
74
76
|
it 'support patch method' do
|
@@ -80,6 +82,7 @@ describe Committee::SchemaValidator::OpenAPI3::OperationWrapper do
|
|
80
82
|
}
|
81
83
|
|
82
84
|
assert_match(/expected integer, but received String: str/i, e.message)
|
85
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
83
86
|
end
|
84
87
|
|
85
88
|
it 'unknown param' do
|
@@ -113,6 +116,7 @@ describe Committee::SchemaValidator::OpenAPI3::OperationWrapper do
|
|
113
116
|
}
|
114
117
|
|
115
118
|
assert_match(/missing required parameters: query_string/i, e.message)
|
119
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
116
120
|
end
|
117
121
|
|
118
122
|
it 'invalid type' do
|
@@ -125,6 +129,7 @@ describe Committee::SchemaValidator::OpenAPI3::OperationWrapper do
|
|
125
129
|
}
|
126
130
|
|
127
131
|
assert_match(/expected string, but received Integer: 1/i, e.message)
|
132
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
128
133
|
end
|
129
134
|
end
|
130
135
|
|
@@ -146,6 +151,7 @@ describe Committee::SchemaValidator::OpenAPI3::OperationWrapper do
|
|
146
151
|
}
|
147
152
|
|
148
153
|
assert_match(/expected integer, but received String: a/i, e.message)
|
154
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
149
155
|
end
|
150
156
|
end
|
151
157
|
|
@@ -36,9 +36,10 @@ describe Committee::SchemaValidator::OpenAPI3::ResponseValidator do
|
|
36
36
|
|
37
37
|
it "raises InvalidResponse when a valid response with no registered body with strict option" do
|
38
38
|
@headers = { "Content-Type" => "application/xml" }
|
39
|
-
assert_raises(Committee::InvalidResponse) {
|
39
|
+
e = assert_raises(Committee::InvalidResponse) {
|
40
40
|
call_response_validator(true)
|
41
41
|
}
|
42
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
42
43
|
end
|
43
44
|
|
44
45
|
it "passes through a valid response with no Content-Type" do
|
@@ -48,9 +49,10 @@ describe Committee::SchemaValidator::OpenAPI3::ResponseValidator do
|
|
48
49
|
|
49
50
|
it "raises InvalidResponse when a valid response with no Content-Type headers with strict option" do
|
50
51
|
@headers = {}
|
51
|
-
assert_raises(Committee::InvalidResponse) {
|
52
|
+
e = assert_raises(Committee::InvalidResponse) {
|
52
53
|
call_response_validator(true)
|
53
54
|
}
|
55
|
+
assert_kind_of(OpenAPIParser::OpenAPIError, e.original_error)
|
54
56
|
end
|
55
57
|
|
56
58
|
it "passes through a valid list response" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: committee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandur
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-11-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json_schema
|