committee 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|
- - ">="
|