openapi_first 0.13.3 → 0.14.3
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 +4 -4
- data/.rubocop.yml +3 -2
- data/CHANGELOG.md +41 -1
- data/Gemfile.lock +46 -73
- data/README.md +16 -8
- data/benchmarks/Gemfile.lock +51 -69
- data/benchmarks/apps/committee.ru +3 -1
- data/benchmarks/apps/committee_with_response_validation.ru +29 -0
- data/benchmarks/apps/committee_with_sinatra.ru +31 -0
- data/benchmarks/apps/openapi.yaml +14 -14
- data/benchmarks/apps/openapi_first_with_hanami_api.ru +26 -0
- data/benchmarks/apps/openapi_first_with_response_validation.ru +22 -0
- data/benchmarks/benchmarks.rb +11 -14
- data/lib/openapi_first/app.rb +3 -6
- data/lib/openapi_first/{find_handler.rb → default_operation_resolver.rb} +5 -11
- data/lib/openapi_first/definition.rb +8 -3
- data/lib/openapi_first/operation.rb +43 -19
- data/lib/openapi_first/request_validation.rb +4 -3
- data/lib/openapi_first/responder.rb +5 -4
- data/lib/openapi_first/response_object.rb +0 -1
- data/lib/openapi_first/response_validation.rb +1 -2
- data/lib/openapi_first/response_validator.rb +1 -3
- data/lib/openapi_first/router.rb +5 -3
- data/lib/openapi_first/validation_format.rb +5 -0
- data/lib/openapi_first/version.rb +1 -1
- data/lib/openapi_first.rb +22 -15
- data/openapi_first.gemspec +6 -3
- metadata +22 -21
- data/.travis.yml +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b6acd9051ff71dbc3980ec2547e6597992b4970f2aef176c4e118227f6ede01
|
4
|
+
data.tar.gz: d8f7a2142aaf4c2d07f951c75500bf1790fc7e9bee0006242a075de6f35ed405
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ca8769be4df5874bd1c4c36c80df6a9301c06687385cd6105f6c0acbcbcb39ff903b55a16df36aad3933e7f490ea8817975bf601c37b10d8b8489946e01cc1c
|
7
|
+
data.tar.gz: '08588cfd43470ed9181b2420731e86ef2fdc99cb90dafd55af6228cd67d0e94c4eea9d7a9b3695a0034bd88c0d0a3ce071081579aeac66cf96ae995a8869d53f'
|
data/.rubocop.yml
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
AllCops:
|
2
2
|
TargetRubyVersion: 2.6
|
3
3
|
NewCops: enable
|
4
|
+
SuggestExtensions: false
|
4
5
|
Style/Documentation:
|
5
6
|
Enabled: false
|
6
7
|
Style/ExponentialNotation:
|
7
8
|
Enabled: true
|
8
9
|
Metrics/BlockLength:
|
9
10
|
Exclude:
|
10
|
-
|
11
|
-
|
11
|
+
- "spec/**/*.rb"
|
12
|
+
- "*.gemspec"
|
12
13
|
Metrics/MethodLength:
|
13
14
|
Max: 20
|
data/CHANGELOG.md
CHANGED
@@ -1,33 +1,60 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.14.3
|
4
|
+
|
5
|
+
- Use json_refs to resolve OpenAPI file. This removes oas_parser and ActiveSupport from list of dependencies
|
6
|
+
|
7
|
+
## 0.14.2
|
8
|
+
|
9
|
+
- Empty query parameters are parsed and request validation returns 400 if an empty string is not allowed. Note that this does not look at `allowEmptyValue` in any way, because allowEmptyValue is deprecated.
|
10
|
+
|
11
|
+
## 0.14.1
|
12
|
+
|
13
|
+
- Bugfix: Don't mix path- and operation-level parameters for request validation
|
14
|
+
|
15
|
+
## 0.14.0
|
16
|
+
|
17
|
+
- Handle custom x-handler field in the API description to find a handler method not based on operationId
|
18
|
+
- Add `resolver` option to provide a custom resolver to find a handler method
|
19
|
+
|
3
20
|
## 0.13.3
|
21
|
+
|
4
22
|
- Better error message if string does not match format
|
23
|
+
- readOnly and writeOnly just works when used inside allOf
|
5
24
|
|
6
25
|
## 0.13.2
|
26
|
+
|
7
27
|
- Return indicator (`source: { parameter: 'list/1' }`) in error response body when array item in query parameter is invalid
|
8
28
|
|
9
29
|
## 0.13.0
|
30
|
+
|
10
31
|
- Add support for arrays in query parameters (style: form, explode: false)
|
11
32
|
- Remove warning when handler is not implemented
|
12
33
|
|
13
34
|
## 0.12.5
|
35
|
+
|
14
36
|
- Add `not_found: :continue` option to Router to make it do nothing if request is unknown
|
15
37
|
|
16
38
|
## 0.12.4
|
39
|
+
|
17
40
|
- content-type is found while ignoring additional content-type parameters (`application/json` is found when request/response content-type is `application/json; charset=UTF8`)
|
18
41
|
- Support wildcard mime-types when finding the content-type
|
19
42
|
|
20
43
|
## 0.12.3
|
44
|
+
|
21
45
|
- Add `response_validation:`, `router_raise_error` options to standalone mode.
|
22
46
|
|
23
47
|
## 0.12.2
|
48
|
+
|
24
49
|
- Allow response to have no media type object specified
|
25
50
|
|
26
51
|
## 0.12.1
|
52
|
+
|
27
53
|
- Fix response when handler returns 404 or 405
|
28
54
|
- Don't validate the response content if status is 204 (no content)
|
29
55
|
|
30
56
|
## 0.12.0
|
57
|
+
|
31
58
|
- Change `ResponseValidator` to raise an exception if it found a problem
|
32
59
|
- Params have symbolized keys now
|
33
60
|
- Remove `not_found` option from Router. Return 405 if HTTP verb is not allowed (via Hanami::Router)
|
@@ -39,6 +66,7 @@
|
|
39
66
|
- Add `Operation#name` that returns a human readable name for an operation
|
40
67
|
|
41
68
|
## 0.11.0
|
69
|
+
|
42
70
|
- Raise error if you forgot to add the Router middleware
|
43
71
|
- Make OpenapiFirst.app raise an error in test env when request path is not specified
|
44
72
|
- Rename OperationResolver to Responder
|
@@ -47,48 +75,60 @@
|
|
47
75
|
- Move namespace option from Router to OperationResolver
|
48
76
|
|
49
77
|
## 0.10.2
|
78
|
+
|
50
79
|
- Return 400 if request body has invalid JSON ([issue](https://github.com/ahx/openapi_first/issues/73)) thanks Thomas Frütel
|
51
80
|
|
52
81
|
## 0.10.1
|
82
|
+
|
53
83
|
- Fix duplicated key in `required` when generating JSON schema for `some[thing]` parameters
|
54
84
|
|
55
85
|
## 0.10.0
|
86
|
+
|
56
87
|
- Add support for query parameters named `"some[thing]"` ([issue](https://github.com/ahx/openapi_first/issues/40))
|
57
88
|
|
58
89
|
## 0.9.0
|
90
|
+
|
59
91
|
- Make request validation usable standalone
|
60
92
|
|
61
93
|
## 0.8.0
|
94
|
+
|
62
95
|
- Add merged parameter and request body available to env at `env[OpenapiFirst::INBOX]` in request validation
|
63
96
|
- Path and query parameters with `type: boolean` now get converted to `true`/`false`
|
64
97
|
- Rename `OpenapiFirst::PARAMS` to `OpenapiFirst::PARAMETERS`
|
65
98
|
|
66
99
|
## 0.7.1
|
100
|
+
|
67
101
|
- Add missing `require` to work with new version of `oas_parser`
|
68
102
|
|
69
103
|
## 0.7.0
|
104
|
+
|
70
105
|
- Make use of hanami-router, because it's fast
|
71
106
|
- Remove option `allow_unknown_query_paramerters`
|
72
107
|
- Move the namespace option to Router
|
73
|
-
- Convert numeric path and query parameters
|
108
|
+
- Convert numeric path and query parameters to `Integer` or `Float`
|
74
109
|
- Pass the Rack env if your action class' initializers accepts an argument
|
75
110
|
- Respec rack's `env['SCRIPT_NAME']` in router
|
76
111
|
- Add MIT license
|
77
112
|
|
78
113
|
## 0.6.10
|
114
|
+
|
79
115
|
- Bugfix: params.env['unknown'] now returns `nil` as expected. Thanks @tristandruyen.
|
80
116
|
|
81
117
|
## 0.6.9
|
118
|
+
|
82
119
|
- Removed radix tree, because of a bug (https://github.com/namusyaka/r2ree-ruby/issues/2)
|
83
120
|
|
84
121
|
## 0.6.8
|
122
|
+
|
85
123
|
- Performance: About 25% performance increase (i/s) with help of c++ based radix-tree and some optimizations
|
86
124
|
- Update dependencies
|
87
125
|
|
88
126
|
## 0.6.7
|
127
|
+
|
89
128
|
- Fix: version number of oas_parser
|
90
129
|
|
91
130
|
## 0.6.6
|
131
|
+
|
92
132
|
- Remove warnings for Ruby 2.7
|
93
133
|
|
94
134
|
## 0.6.5
|
data/Gemfile.lock
CHANGED
@@ -1,120 +1,93 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
openapi_first (0.
|
4
|
+
openapi_first (0.14.2)
|
5
5
|
deep_merge (>= 1.2.1)
|
6
|
-
hanami-router (~> 2.0.
|
6
|
+
hanami-router (~> 2.0.alpha4)
|
7
7
|
hanami-utils (~> 2.0.alpha1)
|
8
|
+
json_refs (>= 0.1.7)
|
8
9
|
json_schemer (~> 0.2.16)
|
9
10
|
multi_json (~> 1.14)
|
10
|
-
oas_parser (~> 0.25.1)
|
11
11
|
rack (~> 2.2)
|
12
12
|
|
13
13
|
GEM
|
14
14
|
remote: https://rubygems.org/
|
15
15
|
specs:
|
16
|
-
|
17
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>= 0.7, < 2)
|
19
|
-
minitest (~> 5.1)
|
20
|
-
tzinfo (~> 1.1)
|
21
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
22
|
-
addressable (2.7.0)
|
23
|
-
public_suffix (>= 2.0.2, < 5.0)
|
24
|
-
ast (2.4.1)
|
25
|
-
builder (3.2.4)
|
16
|
+
ast (2.4.2)
|
26
17
|
coderay (1.1.3)
|
27
|
-
concurrent-ruby (1.1.
|
18
|
+
concurrent-ruby (1.1.9)
|
28
19
|
deep_merge (1.2.1)
|
29
20
|
diff-lcs (1.4.4)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
dry-transformer (0.1.1)
|
22
|
+
ecma-re-validator (0.3.0)
|
23
|
+
regexp_parser (~> 2.0)
|
24
|
+
hana (1.3.7)
|
25
|
+
hanami-router (2.0.0.alpha5)
|
34
26
|
mustermann (~> 1.0)
|
35
27
|
mustermann-contrib (~> 1.0)
|
36
28
|
rack (~> 2.0)
|
37
|
-
hanami-utils (2.0.0.
|
29
|
+
hanami-utils (2.0.0.alpha3)
|
38
30
|
concurrent-ruby (~> 1.0)
|
39
|
-
|
31
|
+
dry-transformer (~> 0.1)
|
40
32
|
hansi (0.2.0)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
ecma-re-validator (~> 0.2)
|
33
|
+
json_refs (0.1.7)
|
34
|
+
hana
|
35
|
+
json_schemer (0.2.18)
|
36
|
+
ecma-re-validator (~> 0.3)
|
46
37
|
hana (~> 1.3)
|
47
|
-
regexp_parser (~>
|
38
|
+
regexp_parser (~> 2.0)
|
48
39
|
uri_template (~> 0.7)
|
49
40
|
method_source (1.0.0)
|
50
|
-
mini_portile2 (2.4.0)
|
51
|
-
minitest (5.14.2)
|
52
41
|
multi_json (1.15.0)
|
53
42
|
mustermann (1.1.1)
|
54
43
|
ruby2_keywords (~> 0.0.1)
|
55
44
|
mustermann-contrib (1.1.1)
|
56
45
|
hansi (~> 0.2.0)
|
57
46
|
mustermann (= 1.1.1)
|
58
|
-
|
59
|
-
|
60
|
-
oas_parser (0.25.1)
|
61
|
-
activesupport (>= 4.0.0)
|
62
|
-
addressable (~> 2.3)
|
63
|
-
builder (~> 3.2.3)
|
64
|
-
deep_merge (~> 1.2.1)
|
65
|
-
hash-deep-merge
|
66
|
-
mustermann-contrib (~> 1.1.1)
|
67
|
-
nokogiri
|
68
|
-
parallel (1.19.2)
|
69
|
-
parser (2.7.2.0)
|
47
|
+
parallel (1.21.0)
|
48
|
+
parser (3.0.2.0)
|
70
49
|
ast (~> 2.4.1)
|
71
|
-
pry (0.
|
50
|
+
pry (0.14.1)
|
72
51
|
coderay (~> 1.1)
|
73
52
|
method_source (~> 1.0)
|
74
|
-
public_suffix (4.0.6)
|
75
53
|
rack (2.2.3)
|
76
54
|
rack-test (1.1.0)
|
77
55
|
rack (>= 1.0, < 3)
|
78
56
|
rainbow (3.0.0)
|
79
|
-
rake (13.0.
|
80
|
-
regexp_parser (1.
|
81
|
-
rexml (3.2.
|
82
|
-
rspec (3.
|
83
|
-
rspec-core (~> 3.
|
84
|
-
rspec-expectations (~> 3.
|
85
|
-
rspec-mocks (~> 3.
|
86
|
-
rspec-core (3.
|
87
|
-
rspec-support (~> 3.
|
88
|
-
rspec-expectations (3.
|
57
|
+
rake (13.0.6)
|
58
|
+
regexp_parser (2.1.1)
|
59
|
+
rexml (3.2.5)
|
60
|
+
rspec (3.10.0)
|
61
|
+
rspec-core (~> 3.10.0)
|
62
|
+
rspec-expectations (~> 3.10.0)
|
63
|
+
rspec-mocks (~> 3.10.0)
|
64
|
+
rspec-core (3.10.1)
|
65
|
+
rspec-support (~> 3.10.0)
|
66
|
+
rspec-expectations (3.10.1)
|
89
67
|
diff-lcs (>= 1.2.0, < 2.0)
|
90
|
-
rspec-support (~> 3.
|
91
|
-
rspec-mocks (3.
|
68
|
+
rspec-support (~> 3.10.0)
|
69
|
+
rspec-mocks (3.10.2)
|
92
70
|
diff-lcs (>= 1.2.0, < 2.0)
|
93
|
-
rspec-support (~> 3.
|
94
|
-
rspec-support (3.
|
95
|
-
rubocop (
|
71
|
+
rspec-support (~> 3.10.0)
|
72
|
+
rspec-support (3.10.3)
|
73
|
+
rubocop (1.23.0)
|
96
74
|
parallel (~> 1.10)
|
97
|
-
parser (>=
|
75
|
+
parser (>= 3.0.0.0)
|
98
76
|
rainbow (>= 2.2.2, < 4.0)
|
99
|
-
regexp_parser (>= 1.8)
|
77
|
+
regexp_parser (>= 1.8, < 3.0)
|
100
78
|
rexml
|
101
|
-
rubocop-ast (>=
|
79
|
+
rubocop-ast (>= 1.12.0, < 2.0)
|
102
80
|
ruby-progressbar (~> 1.7)
|
103
|
-
unicode-display_width (>= 1.4.0, <
|
104
|
-
rubocop-ast (
|
105
|
-
parser (>=
|
106
|
-
ruby-progressbar (1.
|
107
|
-
ruby2_keywords (0.0.
|
108
|
-
|
109
|
-
transproc (1.1.1)
|
110
|
-
tzinfo (1.2.8)
|
111
|
-
thread_safe (~> 0.1)
|
112
|
-
unicode-display_width (1.7.0)
|
81
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
82
|
+
rubocop-ast (1.13.0)
|
83
|
+
parser (>= 3.0.1.1)
|
84
|
+
ruby-progressbar (1.11.0)
|
85
|
+
ruby2_keywords (0.0.5)
|
86
|
+
unicode-display_width (2.1.0)
|
113
87
|
uri_template (0.7.0)
|
114
|
-
zeitwerk (2.4.1)
|
115
88
|
|
116
89
|
PLATFORMS
|
117
|
-
|
90
|
+
x86_64-darwin-20
|
118
91
|
|
119
92
|
DEPENDENCIES
|
120
93
|
bundler (~> 2)
|
@@ -126,4 +99,4 @@ DEPENDENCIES
|
|
126
99
|
rubocop
|
127
100
|
|
128
101
|
BUNDLED WITH
|
129
|
-
2.
|
102
|
+
2.2.28
|
data/README.md
CHANGED
@@ -29,9 +29,9 @@ You always have to add this middleware first in order to make the other middlewa
|
|
29
29
|
use OpenapiFirst::Router, spec: OpenapiFirst.load('./openapi/openapi.yaml')
|
30
30
|
```
|
31
31
|
|
32
|
-
This middleware adds `env[OpenapiFirst::OPERATION]` which holds an Operation object that responds to
|
32
|
+
This middleware adds `env[OpenapiFirst::OPERATION]` which holds an Operation object that responds to `#operation_id`, `#path` (and `#[]` to access raw fields).
|
33
33
|
|
34
|
-
Options and
|
34
|
+
### Options and defaults
|
35
35
|
|
36
36
|
| Name | Possible values | Description | Default
|
37
37
|
|:---|---|---|---|
|
@@ -48,7 +48,7 @@ use OpenapiFirst::RequestValidation
|
|
48
48
|
```
|
49
49
|
|
50
50
|
|
51
|
-
Options and
|
51
|
+
### Options and defaults
|
52
52
|
|
53
53
|
| Name | Possible values | Description | Default
|
54
54
|
|:---|---|---|---|
|
@@ -109,16 +109,19 @@ Response validation fails if response body includes a property with `writeOnly:
|
|
109
109
|
|
110
110
|
This Rack endpoint maps the HTTP request to a method call based on the [operationId](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#operation-object) in your API description and calls it. Responder also adds a content-type to the response.
|
111
111
|
|
112
|
-
Currently there are no customization options for this part. Please [share your ideas](#contributing) on how to best meet your needs and preferred style.
|
113
|
-
|
114
112
|
```ruby
|
115
113
|
run OpenapiFirst::Responder, spec: OpenapiFirst.load('./openapi/openapi.yaml')
|
116
114
|
```
|
117
115
|
|
116
|
+
### Options
|
118
117
|
| Name | Description
|
119
118
|
|:---|---|
|
120
|
-
|
121
|
-
| `
|
119
|
+
| `namespace:` | Optional. A class or module where to find the handler method. |
|
120
|
+
| `resolver:` | Optional. An object that responds to `#call(operation)` and returns a [handler](#handlers). By default this is an instance of [DefaultOperationResolver](#OpenapiFirst::DefaultOperationResolver) |
|
121
|
+
|
122
|
+
|
123
|
+
### OpenapiFirst::DefaultOperationResolver
|
124
|
+
This is the default way to look up a handler method for an operation. Handlers are always looked up in a namespace module that needs to be specified.
|
122
125
|
|
123
126
|
It works like this:
|
124
127
|
|
@@ -176,7 +179,7 @@ The above will use the mentioned Rack middlewares to:
|
|
176
179
|
- Map the request to a method call `Pets.find_pet` based on the `operationId` in the API description
|
177
180
|
- Set the response content type according to your spec (here with the default status code `200`)
|
178
181
|
|
179
|
-
### Options and
|
182
|
+
### Options and defaults
|
180
183
|
|
181
184
|
| Name | Possible values | Description | Default
|
182
185
|
|:---|---|---|---|
|
@@ -185,6 +188,7 @@ The above will use the mentioned Rack middlewares to:
|
|
185
188
|
| `response_validation:` | `true`, `false` | If set to true it raises an exception if the response is invalid. This is useful during testing. | `false`
|
186
189
|
| `router_raise_error:` | `true`, `false` | If set to true it raises an exception (subclass of `OpenapiFirst::Error` when a request path/method is not specified. This is useful during testing. | `false`
|
187
190
|
| `request_validation_raise_error:` | `true`, `false` | If set to true it raises an exception (subclass of `OpenapiFirst::Error` when a request is not valid. | `false`
|
191
|
+
| `resolver:` | | Option to customize finding the [handler](#handlers) method for an operation. See [OpenapiFirst::Responder](#OpenapiFirst::Responder) for details.
|
188
192
|
|
189
193
|
|
190
194
|
Handler functions (`find_pet`) are called with two arguments:
|
@@ -285,6 +289,10 @@ Run `bundle exec rspec` to run the tests.
|
|
285
289
|
|
286
290
|
See `bundle exec rake -T` for rubygems related tasks.
|
287
291
|
|
292
|
+
## Benchmarks
|
293
|
+
|
294
|
+
[Results](https://gist.github.com/ahx/e6ffced58bd2e8d5baffb2f4d2c1f823)
|
295
|
+
|
288
296
|
### Run benchmarks
|
289
297
|
|
290
298
|
```sh
|
data/benchmarks/Gemfile.lock
CHANGED
@@ -1,90 +1,85 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
openapi_first (0.
|
4
|
+
openapi_first (0.14.2)
|
5
5
|
deep_merge (>= 1.2.1)
|
6
|
-
hanami-router (~> 2.0.
|
6
|
+
hanami-router (~> 2.0.alpha4)
|
7
7
|
hanami-utils (~> 2.0.alpha1)
|
8
|
+
json_refs (>= 0.1.7)
|
8
9
|
json_schemer (~> 0.2.16)
|
9
10
|
multi_json (~> 1.14)
|
10
|
-
oas_parser (~> 0.25.1)
|
11
11
|
rack (~> 2.2)
|
12
12
|
|
13
13
|
GEM
|
14
14
|
remote: https://rubygems.org/
|
15
15
|
specs:
|
16
|
-
activesupport (6.
|
16
|
+
activesupport (6.1.4.1)
|
17
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
-
i18n (>=
|
19
|
-
minitest (
|
20
|
-
tzinfo (~>
|
21
|
-
zeitwerk (~> 2.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
benchmark-memory (0.1.2)
|
26
|
-
memory_profiler (~> 0.9)
|
18
|
+
i18n (>= 1.6, < 2)
|
19
|
+
minitest (>= 5.1)
|
20
|
+
tzinfo (~> 2.0)
|
21
|
+
zeitwerk (~> 2.3)
|
22
|
+
benchmark-ips (2.9.2)
|
23
|
+
benchmark-memory (0.2.0)
|
24
|
+
memory_profiler (~> 1)
|
27
25
|
builder (3.2.4)
|
28
|
-
committee (4.
|
26
|
+
committee (4.4.0)
|
29
27
|
json_schema (~> 0.14, >= 0.14.3)
|
30
|
-
openapi_parser (>= 0.11.1)
|
28
|
+
openapi_parser (>= 0.11.1, < 1.0)
|
31
29
|
rack (>= 1.5)
|
32
|
-
concurrent-ruby (1.1.
|
30
|
+
concurrent-ruby (1.1.9)
|
33
31
|
deep_merge (1.2.1)
|
34
|
-
dry-configurable (0.
|
32
|
+
dry-configurable (0.13.0)
|
35
33
|
concurrent-ruby (~> 1.0)
|
36
|
-
dry-core (~> 0.
|
37
|
-
|
38
|
-
dry-container (0.7.2)
|
34
|
+
dry-core (~> 0.6)
|
35
|
+
dry-container (0.9.0)
|
39
36
|
concurrent-ruby (~> 1.0)
|
40
|
-
dry-configurable (~> 0.
|
41
|
-
dry-core (0.
|
37
|
+
dry-configurable (~> 0.13, >= 0.13.0)
|
38
|
+
dry-core (0.7.1)
|
42
39
|
concurrent-ruby (~> 1.0)
|
43
|
-
dry-
|
44
|
-
dry-
|
45
|
-
dry-logic (1.0.8)
|
40
|
+
dry-inflector (0.2.1)
|
41
|
+
dry-logic (1.2.0)
|
46
42
|
concurrent-ruby (~> 1.0)
|
47
|
-
dry-core (~> 0.
|
48
|
-
|
49
|
-
dry-types (1.
|
43
|
+
dry-core (~> 0.5, >= 0.5)
|
44
|
+
dry-transformer (0.1.1)
|
45
|
+
dry-types (1.5.1)
|
50
46
|
concurrent-ruby (~> 1.0)
|
51
47
|
dry-container (~> 0.3)
|
52
|
-
dry-core (~> 0.
|
53
|
-
dry-equalizer (~> 0.3)
|
48
|
+
dry-core (~> 0.5, >= 0.5)
|
54
49
|
dry-inflector (~> 0.1, >= 0.1.2)
|
55
50
|
dry-logic (~> 1.0, >= 1.0.2)
|
56
|
-
ecma-re-validator (0.
|
57
|
-
regexp_parser (~>
|
58
|
-
grape (1.
|
51
|
+
ecma-re-validator (0.3.0)
|
52
|
+
regexp_parser (~> 2.0)
|
53
|
+
grape (1.6.0)
|
59
54
|
activesupport
|
60
55
|
builder
|
61
56
|
dry-types (>= 1.1)
|
62
57
|
mustermann-grape (~> 1.0.0)
|
63
58
|
rack (>= 1.3.0)
|
64
59
|
rack-accept
|
65
|
-
hana (1.3.
|
66
|
-
hanami-api (0.
|
60
|
+
hana (1.3.7)
|
61
|
+
hanami-api (0.2.0)
|
67
62
|
hanami-router (~> 2.0.alpha)
|
68
|
-
hanami-router (2.0.0.
|
63
|
+
hanami-router (2.0.0.alpha5)
|
69
64
|
mustermann (~> 1.0)
|
70
65
|
mustermann-contrib (~> 1.0)
|
71
66
|
rack (~> 2.0)
|
72
|
-
hanami-utils (2.0.0.
|
67
|
+
hanami-utils (2.0.0.alpha3)
|
73
68
|
concurrent-ruby (~> 1.0)
|
74
|
-
|
69
|
+
dry-transformer (~> 0.1)
|
75
70
|
hansi (0.2.0)
|
76
|
-
|
77
|
-
i18n (1.8.5)
|
71
|
+
i18n (1.8.11)
|
78
72
|
concurrent-ruby (~> 1.0)
|
79
|
-
|
80
|
-
|
81
|
-
|
73
|
+
json_refs (0.1.7)
|
74
|
+
hana
|
75
|
+
json_schema (0.21.0)
|
76
|
+
json_schemer (0.2.18)
|
77
|
+
ecma-re-validator (~> 0.3)
|
82
78
|
hana (~> 1.3)
|
83
|
-
regexp_parser (~>
|
79
|
+
regexp_parser (~> 2.0)
|
84
80
|
uri_template (~> 0.7)
|
85
|
-
memory_profiler (0.
|
86
|
-
|
87
|
-
minitest (5.14.2)
|
81
|
+
memory_profiler (1.0.0)
|
82
|
+
minitest (5.14.4)
|
88
83
|
multi_json (1.15.0)
|
89
84
|
mustermann (1.1.1)
|
90
85
|
ruby2_keywords (~> 0.0.1)
|
@@ -93,44 +88,31 @@ GEM
|
|
93
88
|
mustermann (= 1.1.1)
|
94
89
|
mustermann-grape (1.0.1)
|
95
90
|
mustermann (>= 1.0.0)
|
96
|
-
|
97
|
-
mini_portile2 (~> 2.4.0)
|
98
|
-
oas_parser (0.25.2)
|
99
|
-
activesupport (>= 4.0.0)
|
100
|
-
addressable (~> 2.3)
|
101
|
-
builder (~> 3.2.3)
|
102
|
-
deep_merge (~> 1.2.1)
|
103
|
-
hash-deep-merge
|
104
|
-
mustermann-contrib (~> 1.1.1)
|
105
|
-
nokogiri
|
106
|
-
openapi_parser (0.12.1)
|
107
|
-
public_suffix (4.0.6)
|
91
|
+
openapi_parser (0.15.0)
|
108
92
|
rack (2.2.3)
|
109
93
|
rack-accept (0.4.5)
|
110
94
|
rack (>= 0.4)
|
111
95
|
rack-protection (2.1.0)
|
112
96
|
rack
|
113
|
-
regexp_parser (1.
|
114
|
-
ruby2_keywords (0.0.
|
97
|
+
regexp_parser (2.1.1)
|
98
|
+
ruby2_keywords (0.0.5)
|
115
99
|
seg (1.2.0)
|
116
100
|
sinatra (2.1.0)
|
117
101
|
mustermann (~> 1.0)
|
118
102
|
rack (~> 2.2)
|
119
103
|
rack-protection (= 2.1.0)
|
120
104
|
tilt (~> 2.0)
|
121
|
-
syro (3.2.
|
105
|
+
syro (3.2.1)
|
122
106
|
rack (>= 1.6.0)
|
123
107
|
seg
|
124
|
-
thread_safe (0.3.6)
|
125
108
|
tilt (2.0.10)
|
126
|
-
|
127
|
-
|
128
|
-
thread_safe (~> 0.1)
|
109
|
+
tzinfo (2.0.4)
|
110
|
+
concurrent-ruby (~> 1.0)
|
129
111
|
uri_template (0.7.0)
|
130
|
-
zeitwerk (2.
|
112
|
+
zeitwerk (2.5.1)
|
131
113
|
|
132
114
|
PLATFORMS
|
133
|
-
|
115
|
+
x86_64-darwin-20
|
134
116
|
|
135
117
|
DEPENDENCIES
|
136
118
|
benchmark-ips
|
@@ -145,4 +127,4 @@ DEPENDENCIES
|
|
145
127
|
syro
|
146
128
|
|
147
129
|
BUNDLED WITH
|
148
|
-
2.
|
130
|
+
2.2.28
|
@@ -19,6 +19,8 @@ app = Class.new(Hanami::API) do
|
|
19
19
|
end
|
20
20
|
end.new
|
21
21
|
|
22
|
-
use Committee::Middleware::RequestValidation,
|
22
|
+
use Committee::Middleware::RequestValidation,
|
23
|
+
schema_path: File.absolute_path('./openapi.yaml', __dir__),
|
24
|
+
parse_response_by_content_type: true
|
23
25
|
|
24
26
|
run app
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'multi_json'
|
4
|
+
require 'committee'
|
5
|
+
require 'hanami/api'
|
6
|
+
|
7
|
+
app = Class.new(Hanami::API) do
|
8
|
+
get '/hello/:id' do
|
9
|
+
json(hello: 'world', id: params.fetch(:id))
|
10
|
+
end
|
11
|
+
|
12
|
+
get '/hello' do
|
13
|
+
json([{ hello: 'world' }])
|
14
|
+
end
|
15
|
+
|
16
|
+
post '/hello' do
|
17
|
+
status 201
|
18
|
+
json(hello: 'world')
|
19
|
+
end
|
20
|
+
end.new
|
21
|
+
|
22
|
+
use Committee::Middleware::RequestValidation,
|
23
|
+
schema_path: File.absolute_path('./openapi.yaml', __dir__),
|
24
|
+
parse_response_by_content_type: true
|
25
|
+
|
26
|
+
use Committee::Middleware::ResponseValidation,
|
27
|
+
schema_path: File.absolute_path('./openapi.yaml', __dir__)
|
28
|
+
|
29
|
+
run app
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'multi_json'
|
4
|
+
require 'committee'
|
5
|
+
require 'sinatra'
|
6
|
+
|
7
|
+
class SinatraWithCommiteeExample < Sinatra::Base
|
8
|
+
set :environment, :production
|
9
|
+
|
10
|
+
get '/hello/:id' do
|
11
|
+
content_type :json
|
12
|
+
MultiJson.dump(hello: 'world', id: params.fetch('id'))
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/hello' do
|
16
|
+
content_type :json
|
17
|
+
MultiJson.dump([{ hello: 'world' }])
|
18
|
+
end
|
19
|
+
|
20
|
+
post '/hello' do
|
21
|
+
content_type :json
|
22
|
+
status 201
|
23
|
+
MultiJson.dump(hello: 'world')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
use Committee::Middleware::RequestValidation,
|
28
|
+
schema_path: File.absolute_path('./openapi.yaml', __dir__),
|
29
|
+
parse_response_by_content_type: true
|
30
|
+
|
31
|
+
run SinatraWithCommiteeExample
|