committee 2.1.1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cf658ad230d67fb6c13503bf5837e25b26d0b4c
|
4
|
+
data.tar.gz: b14e13fbb725f67962327c6c6bdcd181371092d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfb150d3c57ab70d774fa19ca3e0185d504337dbcfc00e228542b42a57ce4bcb5245782072eea85260534eb0f1daf0c54eb16ff9f3e70c125d3602d939c28b78
|
7
|
+
data.tar.gz: 25361aec8a3976712649e857bd25616af8ebb1e87844e79aa69db12030d235527a035356a74fbfa584566a7f98f8081b904dc96bf62dd1e2256cda52f9371d6a
|
@@ -25,7 +25,7 @@ module Committee
|
|
25
25
|
|
26
26
|
params = if params
|
27
27
|
params
|
28
|
-
elsif @allow_form_params &&
|
28
|
+
elsif @allow_form_params && %w[application/x-www-form-urlencoded multipart/form-data].include?(@request.media_type)
|
29
29
|
# Actually, POST means anything in the request body, could be from
|
30
30
|
# PUT or PATCH too. Silly Rack.
|
31
31
|
p = @request.POST
|
data/test/bin_test.rb
CHANGED
@@ -16,6 +16,8 @@ describe "executables in bin/" do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it "has roughly valid Ruby structure for committee-stub" do
|
19
|
-
|
19
|
+
assert_output(%r{Usage: rackup \[options\] \[JSON Schema file\]}) do
|
20
|
+
load File.join(@bin_dir, "committee-stub")
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
@@ -249,7 +249,7 @@ describe Committee::Middleware::RequestValidation do
|
|
249
249
|
header "Content-Type", "application/json"
|
250
250
|
post "/apps", JSON.generate(params)
|
251
251
|
assert_equal 400, last_response.status
|
252
|
-
assert_match
|
252
|
+
assert_match(/invalid request/i, last_response.body)
|
253
253
|
end
|
254
254
|
|
255
255
|
it "passes with coerce_date_times enabled and without a schema for a link" do
|
@@ -267,7 +267,7 @@ describe Committee::Middleware::RequestValidation do
|
|
267
267
|
}
|
268
268
|
post "/apps", JSON.generate(params)
|
269
269
|
assert_equal 400, last_response.status
|
270
|
-
assert_match
|
270
|
+
assert_match(/invalid request/i, last_response.body)
|
271
271
|
end
|
272
272
|
|
273
273
|
it "rescues JSON errors" do
|
@@ -275,7 +275,7 @@ describe Committee::Middleware::RequestValidation do
|
|
275
275
|
header "Content-Type", "application/json"
|
276
276
|
post "/apps", "{x:y}"
|
277
277
|
assert_equal 400, last_response.status
|
278
|
-
assert_match
|
278
|
+
assert_match(/valid json/i, last_response.body)
|
279
279
|
end
|
280
280
|
|
281
281
|
it "takes a prefix" do
|
@@ -337,7 +337,7 @@ describe Committee::Middleware::RequestValidation do
|
|
337
337
|
header "Content-Type", "application/json"
|
338
338
|
get "/search/apps", {"per_page" => "foo", "query" => "cloudnasium"}
|
339
339
|
assert_equal 400, last_response.status
|
340
|
-
assert_match
|
340
|
+
assert_match(/invalid request/i, last_response.body)
|
341
341
|
end
|
342
342
|
|
343
343
|
it "passes through a valid request for OpenAPI" do
|
@@ -355,7 +355,7 @@ describe Committee::Middleware::RequestValidation do
|
|
355
355
|
@app = new_rack_app(schema: open_api_2_schema)
|
356
356
|
get "/api/pets?limit=foo", nil, { "HTTP_AUTH_TOKEN" => "xxx" }
|
357
357
|
assert_equal 400, last_response.status
|
358
|
-
assert_match
|
358
|
+
assert_match(/invalid request/i, last_response.body)
|
359
359
|
end
|
360
360
|
|
361
361
|
it "passes through a valid request for OpenAPI including path parameters" do
|
@@ -370,7 +370,7 @@ describe Committee::Middleware::RequestValidation do
|
|
370
370
|
# not that ID is expect to be an integer
|
371
371
|
get "/api/pets/not-integer"
|
372
372
|
assert_equal 400, last_response.status
|
373
|
-
assert_match
|
373
|
+
assert_match(/invalid request/i, last_response.body)
|
374
374
|
end
|
375
375
|
|
376
376
|
private
|
@@ -17,14 +17,14 @@ describe Committee::Middleware::ResponseValidation do
|
|
17
17
|
@app = new_rack_app("{}", {}, schema: hyper_schema)
|
18
18
|
get "/apps"
|
19
19
|
assert_equal 500, last_response.status
|
20
|
-
assert_match
|
20
|
+
assert_match(/{} is not an array/i, last_response.body)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "detects a response invalid due to not being JSON" do
|
24
24
|
@app = new_rack_app("", {}, schema: hyper_schema)
|
25
25
|
get "/apps"
|
26
26
|
assert_equal 500, last_response.status
|
27
|
-
assert_match
|
27
|
+
assert_match(/valid JSON/i, last_response.body)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "ignores a non-2xx invalid response" do
|
@@ -39,7 +39,7 @@ describe Committee::Middleware::ResponseValidation do
|
|
39
39
|
|
40
40
|
get "/apps"
|
41
41
|
assert_equal 500, last_response.status
|
42
|
-
assert_match
|
42
|
+
assert_match(/valid JSON/i, last_response.body)
|
43
43
|
end
|
44
44
|
|
45
45
|
it "passes through a 204 (no content) response" do
|
@@ -52,7 +52,7 @@ describe Committee::Middleware::ResponseValidation do
|
|
52
52
|
@app = new_rack_app("[{x:y}]", {}, schema: hyper_schema)
|
53
53
|
get "/apps"
|
54
54
|
assert_equal 500, last_response.status
|
55
|
-
assert_match
|
55
|
+
assert_match(/valid json/i, last_response.body)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "takes a prefix" do
|
@@ -80,7 +80,7 @@ describe Committee::Middleware::ResponseValidation do
|
|
80
80
|
@app = new_rack_app("", {}, schema: open_api_2_schema)
|
81
81
|
get "/api/pets"
|
82
82
|
assert_equal 500, last_response.status
|
83
|
-
assert_match
|
83
|
+
assert_match(/valid JSON/i, last_response.body)
|
84
84
|
end
|
85
85
|
|
86
86
|
private
|
@@ -23,33 +23,39 @@ describe Committee::RequestUnpacker do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
it "doesn't unpack JSON under other Content-Types" do
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
27
|
+
env = {
|
28
|
+
"CONTENT_TYPE" => content_type,
|
29
|
+
"rack.input" => StringIO.new('{"x":"y"}'),
|
30
|
+
}
|
31
|
+
request = Rack::Request.new(env)
|
32
|
+
params, _ = Committee::RequestUnpacker.new(request).call
|
33
|
+
assert_equal({}, params)
|
34
|
+
end
|
33
35
|
end
|
34
36
|
|
35
37
|
it "unpacks JSON under other Content-Types with optimistic_json" do
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
39
|
+
env = {
|
40
|
+
"CONTENT_TYPE" => content_type,
|
41
|
+
"rack.input" => StringIO.new('{"x":"y"}'),
|
42
|
+
}
|
43
|
+
request = Rack::Request.new(env)
|
44
|
+
params, _ = Committee::RequestUnpacker.new(request, optimistic_json: true).call
|
45
|
+
assert_equal({ "x" => "y" }, params)
|
46
|
+
end
|
43
47
|
end
|
44
48
|
|
45
49
|
it "returns {} when unpacking non-JSON with optimistic_json" do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
51
|
+
env = {
|
52
|
+
"CONTENT_TYPE" => content_type,
|
53
|
+
"rack.input" => StringIO.new('x=y&foo=42'),
|
54
|
+
}
|
55
|
+
request = Rack::Request.new(env)
|
56
|
+
params, _ = Committee::RequestUnpacker.new(request, optimistic_json: true).call
|
57
|
+
assert_equal({}, params)
|
58
|
+
end
|
53
59
|
end
|
54
60
|
|
55
61
|
it "unpacks an empty hash on an empty request body" do
|
@@ -63,53 +69,61 @@ describe Committee::RequestUnpacker do
|
|
63
69
|
end
|
64
70
|
|
65
71
|
it "doesn't unpack form params" do
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
72
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
73
|
+
env = {
|
74
|
+
"CONTENT_TYPE" => content_type,
|
75
|
+
"rack.input" => StringIO.new("x=y"),
|
76
|
+
}
|
77
|
+
request = Rack::Request.new(env)
|
78
|
+
params, _ = Committee::RequestUnpacker.new(request).call
|
79
|
+
assert_equal({}, params)
|
80
|
+
end
|
73
81
|
end
|
74
82
|
|
75
83
|
it "unpacks form params with allow_form_params" do
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
84
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
85
|
+
env = {
|
86
|
+
"CONTENT_TYPE" => content_type,
|
87
|
+
"rack.input" => StringIO.new("x=y"),
|
88
|
+
}
|
89
|
+
request = Rack::Request.new(env)
|
90
|
+
params, _ = Committee::RequestUnpacker.new(request, allow_form_params: true).call
|
91
|
+
assert_equal({ "x" => "y" }, params)
|
92
|
+
end
|
83
93
|
end
|
84
94
|
|
85
95
|
it "coerces form params with coerce_form_params and a schema" do
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
96
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
97
|
+
schema = JsonSchema::Schema.new
|
98
|
+
schema.properties = { "x" => JsonSchema::Schema.new }
|
99
|
+
schema.properties["x"].type = ["integer"]
|
100
|
+
|
101
|
+
env = {
|
102
|
+
"CONTENT_TYPE" => content_type,
|
103
|
+
"rack.input" => StringIO.new("x=1"),
|
104
|
+
}
|
105
|
+
request = Rack::Request.new(env)
|
106
|
+
params, _ = Committee::RequestUnpacker.new(
|
107
|
+
request,
|
108
|
+
allow_form_params: true,
|
109
|
+
coerce_form_params: true,
|
110
|
+
schema: schema
|
111
|
+
).call
|
112
|
+
assert_equal({ "x" => 1 }, params)
|
113
|
+
end
|
102
114
|
end
|
103
115
|
|
104
116
|
it "unpacks form & query params with allow_form_params and allow_query_params" do
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
117
|
+
%w[application/x-www-form-urlencoded multipart/form-data].each do |content_type|
|
118
|
+
env = {
|
119
|
+
"CONTENT_TYPE" => content_type,
|
120
|
+
"rack.input" => StringIO.new("x=y"),
|
121
|
+
"QUERY_STRING" => "a=b"
|
122
|
+
}
|
123
|
+
request = Rack::Request.new(env)
|
124
|
+
params, _ = Committee::RequestUnpacker.new(request, allow_form_params: true, allow_query_params: true).call
|
125
|
+
assert_equal({ "x" => "y", "a" => "b" }, params)
|
126
|
+
end
|
113
127
|
end
|
114
128
|
|
115
129
|
it "unpacks query params with allow_query_params" do
|
data/test/test/methods_test.rb
CHANGED
@@ -40,7 +40,7 @@ describe Committee::Test::Methods do
|
|
40
40
|
e = assert_raises(Committee::InvalidResponse) do
|
41
41
|
assert_schema_conform
|
42
42
|
end
|
43
|
-
assert_match
|
43
|
+
assert_match(/response header must be set to/i, e.message)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "accepts schema string (legacy behavior)" 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: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandur
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json_schema
|
@@ -79,14 +79,14 @@ dependencies:
|
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '12.3'
|
83
83
|
type: :development
|
84
84
|
prerelease: false
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '12.3'
|
90
90
|
- !ruby/object:Gem::Dependency
|
91
91
|
name: rr
|
92
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
204
|
requirements:
|
205
205
|
- - ">="
|
206
206
|
- !ruby/object:Gem::Version
|
207
|
-
version:
|
207
|
+
version: 2.0.0
|
208
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
210
|
- - ">="
|