committee 2.0.0.pre2 → 2.0.0.pre3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/committee-stub +1 -1
- data/lib/committee/bin/committee_stub.rb +6 -5
- data/lib/committee/drivers/hyper_schema.rb +5 -0
- data/lib/committee/drivers/open_api_2.rb +5 -0
- data/lib/committee/drivers.rb +5 -0
- data/lib/committee/middleware/request_validation.rb +5 -1
- data/lib/committee/request_unpacker.rb +12 -1
- data/test/drivers/hyper_schema_test.rb +4 -0
- data/test/drivers/open_api_2_test.rb +4 -0
- data/test/drivers_test.rb +6 -5
- data/test/request_unpacker_test.rb +19 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e120c18b8e980fa98259dcb4d874b0dd095224b
|
4
|
+
data.tar.gz: de67a03b9afba89cbb0dce7b5654fedfb02a5dc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59339f5504e9945a8cdc1248eaf47187d0eafb7cfe90c802a3f1e0b391b40154266d157cc3c16b48992ca39fe783c27ef8b8b3f7eeaeff39961c24d7a6e95052
|
7
|
+
data.tar.gz: d5252e28f9e64e2e8fd2812189ed425a32d01e55e1949588cf94d98ec537ee9fad7a0aa93be8672d8affd0946fc411ad00abe1d36e0c3a4b11db9b32d94cc5ef
|
data/bin/committee-stub
CHANGED
@@ -25,7 +25,7 @@ module Committee
|
|
25
25
|
# Gets an option parser for command line arguments.
|
26
26
|
def get_options_parser
|
27
27
|
options = {
|
28
|
-
:driver =>
|
28
|
+
:driver => nil,
|
29
29
|
:help => false,
|
30
30
|
:port => 9292,
|
31
31
|
:tolerant => false,
|
@@ -37,14 +37,15 @@ module Committee
|
|
37
37
|
opts.separator ""
|
38
38
|
opts.separator "Options:"
|
39
39
|
|
40
|
-
|
41
|
-
options[:help] = true
|
42
|
-
}
|
43
|
-
|
40
|
+
# required
|
44
41
|
opts.on("-d", "--driver NAME", "name of driver [open_api_2|hyper_schema]") { |name|
|
45
42
|
options[:driver] = name.to_sym
|
46
43
|
}
|
47
44
|
|
45
|
+
opts.on_tail("-h", "-?", "--help", "Show this message") {
|
46
|
+
options[:help] = true
|
47
|
+
}
|
48
|
+
|
48
49
|
opts.on("-t", "--tolerant", "don't perform request/response validations") {
|
49
50
|
options[:tolerant] = true
|
50
51
|
}
|
@@ -1,5 +1,10 @@
|
|
1
1
|
module Committee::Drivers
|
2
2
|
class HyperSchema < Committee::Drivers::Driver
|
3
|
+
# Whether parameters that were form-encoded will be coerced by default.
|
4
|
+
def default_coerce_form_params
|
5
|
+
false
|
6
|
+
end
|
7
|
+
|
3
8
|
# Whether parameters in a request's path will be considered and coerced by
|
4
9
|
# default.
|
5
10
|
def default_path_params
|
@@ -1,5 +1,10 @@
|
|
1
1
|
module Committee::Drivers
|
2
2
|
class OpenAPI2 < Committee::Drivers::Driver
|
3
|
+
# Whether parameters that were form-encoded will be coerced by default.
|
4
|
+
def default_coerce_form_params
|
5
|
+
true
|
6
|
+
end
|
7
|
+
|
3
8
|
# Whether parameters in a request's path will be considered and coerced by
|
4
9
|
# default.
|
5
10
|
def default_path_params
|
data/lib/committee/drivers.rb
CHANGED
@@ -15,6 +15,11 @@ module Committee
|
|
15
15
|
|
16
16
|
# Driver is a base class for driver implementations.
|
17
17
|
class Driver
|
18
|
+
# Whether parameters that were form-encoded will be coerced by default.
|
19
|
+
def default_coerce_form_params
|
20
|
+
raise "needs implementation"
|
21
|
+
end
|
22
|
+
|
18
23
|
# Whether parameters in a request's path will be considered and coerced
|
19
24
|
# by default.
|
20
25
|
def default_path_params
|
@@ -9,6 +9,8 @@ module Committee::Middleware
|
|
9
9
|
@optimistic_json = options.fetch(:optimistic_json, false)
|
10
10
|
@strict = options[:strict]
|
11
11
|
|
12
|
+
@coerce_form_params = options.fetch(:coerce_form_params,
|
13
|
+
@schema.driver.default_coerce_form_params)
|
12
14
|
@coerce_path_params = options.fetch(:coerce_path_params,
|
13
15
|
@schema.driver.default_path_params)
|
14
16
|
@coerce_query_params = options.fetch(:coerce_query_params,
|
@@ -50,7 +52,9 @@ module Committee::Middleware
|
|
50
52
|
request,
|
51
53
|
allow_form_params: @allow_form_params,
|
52
54
|
allow_query_params: @allow_query_params,
|
53
|
-
|
55
|
+
coerce_form_params: @coerce_form_params,
|
56
|
+
optimistic_json: @optimistic_json,
|
57
|
+
schema: link ? link.schema : nil
|
54
58
|
).call
|
55
59
|
|
56
60
|
request.env[@params_key].merge!(path_params)
|
@@ -5,7 +5,9 @@ module Committee
|
|
5
5
|
|
6
6
|
@allow_form_params = options[:allow_form_params]
|
7
7
|
@allow_query_params = options[:allow_query_params]
|
8
|
+
@coerce_form_params = options[:coerce_form_params]
|
8
9
|
@optimistic_json = options[:optimistic_json]
|
10
|
+
@schema = options[:schema]
|
9
11
|
end
|
10
12
|
|
11
13
|
def call
|
@@ -26,7 +28,16 @@ module Committee
|
|
26
28
|
elsif @allow_form_params && @request.media_type == "application/x-www-form-urlencoded"
|
27
29
|
# Actually, POST means anything in the request body, could be from
|
28
30
|
# PUT or PATCH too. Silly Rack.
|
29
|
-
|
31
|
+
p = @request.POST
|
32
|
+
|
33
|
+
if @coerce_form_params && @schema
|
34
|
+
p.merge!(Committee::StringParamsCoercer.new(
|
35
|
+
p,
|
36
|
+
@schema
|
37
|
+
).call)
|
38
|
+
end
|
39
|
+
|
40
|
+
p
|
30
41
|
else
|
31
42
|
{}
|
32
43
|
end
|
@@ -32,6 +32,10 @@ describe Committee::Drivers::HyperSchema do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
it "defaults to not coercing form parameters" do
|
36
|
+
assert_equal false, @driver.default_coerce_form_params
|
37
|
+
end
|
38
|
+
|
35
39
|
it "defaults to no path parameters" do
|
36
40
|
assert_equal false, @driver.default_path_params
|
37
41
|
end
|
@@ -111,6 +111,10 @@ describe Committee::Drivers::OpenAPI2 do
|
|
111
111
|
assert_equal "Committee: no definitions section in spec data.", e.message
|
112
112
|
end
|
113
113
|
|
114
|
+
it "defaults to coercing form parameters" do
|
115
|
+
assert_equal true, @driver.default_coerce_form_params
|
116
|
+
end
|
117
|
+
|
114
118
|
it "defaults to path parameters" do
|
115
119
|
assert_equal true, @driver.default_path_params
|
116
120
|
end
|
data/test/drivers_test.rb
CHANGED
@@ -23,11 +23,12 @@ end
|
|
23
23
|
|
24
24
|
describe Committee::Drivers::Driver do
|
25
25
|
DRIVER_METHODS = {
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
26
|
+
:default_coerce_form_params => [],
|
27
|
+
:default_path_params => [],
|
28
|
+
:default_query_params => [],
|
29
|
+
:name => [],
|
30
|
+
:parse => [nil],
|
31
|
+
:schema_class => [],
|
31
32
|
}
|
32
33
|
|
33
34
|
it "has a set of abstract methods" do
|
@@ -82,6 +82,25 @@ describe Committee::RequestUnpacker do
|
|
82
82
|
assert_equal({ "x" => "y" }, params)
|
83
83
|
end
|
84
84
|
|
85
|
+
it "coerces form params with coerce_form_params and a schema" do
|
86
|
+
schema = JsonSchema::Schema.new
|
87
|
+
schema.properties = { "x" => JsonSchema::Schema.new }
|
88
|
+
schema.properties["x"].type = ["integer"]
|
89
|
+
|
90
|
+
env = {
|
91
|
+
"CONTENT_TYPE" => "application/x-www-form-urlencoded",
|
92
|
+
"rack.input" => StringIO.new("x=1"),
|
93
|
+
}
|
94
|
+
request = Rack::Request.new(env)
|
95
|
+
params = Committee::RequestUnpacker.new(
|
96
|
+
request,
|
97
|
+
allow_form_params: true,
|
98
|
+
coerce_form_params: true,
|
99
|
+
schema: schema
|
100
|
+
).call
|
101
|
+
assert_equal({ "x" => 1 }, params)
|
102
|
+
end
|
103
|
+
|
85
104
|
it "unpacks form & query params with allow_form_params and allow_query_params" do
|
86
105
|
env = {
|
87
106
|
"CONTENT_TYPE" => "application/x-www-form-urlencoded",
|
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.0.0.
|
4
|
+
version: 2.0.0.pre3
|
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: 2016-10-
|
12
|
+
date: 2016-10-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json_schema
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
version: '0.14'
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.14.
|
23
|
+
version: 0.14.3
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
version: '0.14'
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.14.
|
33
|
+
version: 0.14.3
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: rack
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|