rspec-openapi 0.1.3 → 0.2.2
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/.github/workflows/test.yml +27 -0
- data/CHANGELOG.md +24 -0
- data/README.md +9 -6
- data/lib/rspec/openapi.rb +3 -1
- data/lib/rspec/openapi/record_builder.rb +10 -1
- data/lib/rspec/openapi/schema_builder.rb +16 -6
- data/lib/rspec/openapi/version.rb +1 -1
- data/rspec-openapi.gemspec +3 -3
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11f6fd4a506ac6f481fa67c33e2bacecba3ee4e568339338acf4237f4f599bac
|
4
|
+
data.tar.gz: 45ea7bbf466a413d3eb5d32ae19a38591c542431eee4dcb21905b8070b2280ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b98372303bb006dba766c0b48218c4be8a45a84f470d6cdfc40b3e7f9d780edb484ca58373239a6aeeba83c7f4c8c3daf8c241cdcb903cc1158c80c92269203
|
7
|
+
data.tar.gz: 8a198194bdc3e4bf0d09f6fe66b1893da1eaa4b0333c1168b9bd309ba26634ab16d53342c140f8d7b4c0f31e02cfc1ba9629b5dc12905dfc5e6eb35990f23c30
|
@@ -0,0 +1,27 @@
|
|
1
|
+
name: test
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- master
|
6
|
+
pull_request:
|
7
|
+
types:
|
8
|
+
- opened
|
9
|
+
- synchronize
|
10
|
+
- reopened
|
11
|
+
jobs:
|
12
|
+
test:
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
container: ${{ matrix.ruby }}
|
15
|
+
strategy:
|
16
|
+
fail-fast: false
|
17
|
+
matrix:
|
18
|
+
ruby:
|
19
|
+
- ruby:2.5
|
20
|
+
- ruby:2.6
|
21
|
+
- ruby:2.7
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v2
|
24
|
+
- name: bundle install
|
25
|
+
run: bundle install -j$(nproc) --retry 3
|
26
|
+
- run: bundle exec rspec
|
27
|
+
timeout-minutes: 1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
## v0.2.2
|
2
|
+
|
3
|
+
* Allow disabling `example` by `RSpec::OpenAPI.enable_example = false`
|
4
|
+
|
5
|
+
## v0.2.1
|
6
|
+
|
7
|
+
* Generate `example` of request body and path / query params
|
8
|
+
[#4](https://github.com/k0kubun/rspec-openapi/issues/4)
|
9
|
+
* Remove a wrapper param created by Rails in request body
|
10
|
+
[#4](https://github.com/k0kubun/rspec-openapi/issues/4)
|
11
|
+
|
12
|
+
## v0.2.0
|
13
|
+
|
14
|
+
* Generate `example` of response body [#3](https://github.com/k0kubun/rspec-openapi/issues/3)
|
15
|
+
|
16
|
+
## v0.1.5
|
17
|
+
|
18
|
+
* Support detecting `float` type [#2](https://github.com/k0kubun/rspec-openapi/issues/2)
|
19
|
+
|
20
|
+
## v0.1.4
|
21
|
+
|
22
|
+
* Avoid NoMethodError on nil Content-Type
|
23
|
+
* Include a space between controller and action in summary
|
24
|
+
|
1
25
|
## v0.1.3
|
2
26
|
|
3
27
|
* Add `RSpec::OpenAPI.comment` configuration
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# rspec-openapi
|
1
|
+
# rspec-openapi 
|
2
2
|
|
3
|
-
Generate OpenAPI
|
3
|
+
Generate OpenAPI schema from RSpec request specs.
|
4
4
|
|
5
5
|
## What's this?
|
6
6
|
|
@@ -64,7 +64,7 @@ info:
|
|
64
64
|
paths:
|
65
65
|
"/tables":
|
66
66
|
get:
|
67
|
-
summary: tables#index
|
67
|
+
summary: 'tables #index'
|
68
68
|
parameters:
|
69
69
|
- name: page
|
70
70
|
in: query
|
@@ -98,12 +98,15 @@ and the schema file can be used as an input of [Swagger UI](https://github.com/s
|
|
98
98
|
|
99
99
|
### Configuration
|
100
100
|
|
101
|
-
|
101
|
+
The following configurations are optional.
|
102
102
|
|
103
103
|
```rb
|
104
104
|
# Change the path to generate schema from `doc/openapi.yaml`
|
105
105
|
RSpec::OpenAPI.path = 'doc/schema.yaml'
|
106
106
|
|
107
|
+
# Disable generating `example`
|
108
|
+
RSpec::OpenAPI.enable_example = false
|
109
|
+
|
107
110
|
# Generate a comment on top of a schema file
|
108
111
|
RSpec::OpenAPI.comment = <<~EOS
|
109
112
|
This file is auto-generated by rspec-openapi https://github.com/k0kubun/rspec-openapi
|
@@ -138,9 +141,9 @@ end
|
|
138
141
|
|
139
142
|
## Project status
|
140
143
|
|
141
|
-
|
144
|
+
Beta
|
142
145
|
|
143
|
-
|
146
|
+
Basic features are there, and some people are already using this.
|
144
147
|
|
145
148
|
### Current limitations
|
146
149
|
|
data/lib/rspec/openapi.rb
CHANGED
@@ -15,7 +15,7 @@ class << RSpec::OpenAPI::RecordBuilder = Object.new
|
|
15
15
|
path: route.path.spec.to_s.delete_suffix('(.:format)'),
|
16
16
|
path_params: request.path_parameters,
|
17
17
|
query_params: request.query_parameters,
|
18
|
-
request_params: request
|
18
|
+
request_params: raw_request_params(request),
|
19
19
|
request_content_type: request.content_type,
|
20
20
|
controller: route.requirements[:controller],
|
21
21
|
action: route.requirements[:action],
|
@@ -35,4 +35,13 @@ class << RSpec::OpenAPI::RecordBuilder = Object.new
|
|
35
35
|
end
|
36
36
|
raise "No route matched for #{request.request_method} #{request.path_info}"
|
37
37
|
end
|
38
|
+
|
39
|
+
# workaround to get real request parameters
|
40
|
+
# because ActionController::ParamsWrapper overwrites request_parameters
|
41
|
+
def raw_request_params(request)
|
42
|
+
original = request.delete_header('action_dispatch.request.request_parameters')
|
43
|
+
request.request_parameters
|
44
|
+
ensure
|
45
|
+
request.set_header('action_dispatch.request.request_parameters', original)
|
46
|
+
end
|
38
47
|
end
|
@@ -6,7 +6,7 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
6
6
|
paths: {
|
7
7
|
normalize_path(record.path) => {
|
8
8
|
record.method.downcase => {
|
9
|
-
summary: "#{record.controller}##{record.action}",
|
9
|
+
summary: "#{record.controller} ##{record.action}",
|
10
10
|
parameters: build_parameters(record),
|
11
11
|
requestBody: build_request_body(record),
|
12
12
|
responses: {
|
@@ -15,7 +15,8 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
15
15
|
content: {
|
16
16
|
normalize_content_type(record.response_content_type) => {
|
17
17
|
schema: build_property(record.response_body),
|
18
|
-
|
18
|
+
example: (record.response_body if example_enabled?),
|
19
|
+
}.compact,
|
19
20
|
},
|
20
21
|
},
|
21
22
|
},
|
@@ -27,6 +28,10 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
27
28
|
|
28
29
|
private
|
29
30
|
|
31
|
+
def example_enabled?
|
32
|
+
RSpec::OpenAPI.enable_example
|
33
|
+
end
|
34
|
+
|
30
35
|
def build_parameters(record)
|
31
36
|
parameters = []
|
32
37
|
|
@@ -37,7 +42,8 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
37
42
|
in: 'path',
|
38
43
|
required: true,
|
39
44
|
schema: build_property(try_cast(value)),
|
40
|
-
|
45
|
+
example: (try_cast(value) if example_enabled?),
|
46
|
+
}.compact
|
41
47
|
end
|
42
48
|
|
43
49
|
record.query_params.each do |key, value|
|
@@ -45,7 +51,8 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
45
51
|
name: key.to_s,
|
46
52
|
in: 'query',
|
47
53
|
schema: build_property(try_cast(value)),
|
48
|
-
|
54
|
+
example: (try_cast(value) if example_enabled?),
|
55
|
+
}.compact
|
49
56
|
end
|
50
57
|
|
51
58
|
return nil if parameters.empty?
|
@@ -60,7 +67,8 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
60
67
|
content: {
|
61
68
|
normalize_content_type(record.request_content_type) => {
|
62
69
|
schema: build_property(record.request_params),
|
63
|
-
|
70
|
+
example: (record.request_params if example_enabled?),
|
71
|
+
}.compact
|
64
72
|
}
|
65
73
|
}
|
66
74
|
end
|
@@ -84,6 +92,8 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
84
92
|
case value
|
85
93
|
when String
|
86
94
|
'string'
|
95
|
+
when Float
|
96
|
+
'float'
|
87
97
|
when Integer
|
88
98
|
'integer'
|
89
99
|
when TrueClass, FalseClass
|
@@ -113,6 +123,6 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
113
123
|
end
|
114
124
|
|
115
125
|
def normalize_content_type(content_type)
|
116
|
-
content_type
|
126
|
+
content_type&.sub(/;.+\z/, '')
|
117
127
|
end
|
118
128
|
end
|
data/rspec-openapi.gemspec
CHANGED
@@ -6,15 +6,15 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.authors = ['Takashi Kokubun']
|
7
7
|
spec.email = ['takashikkbn@gmail.com']
|
8
8
|
|
9
|
-
spec.summary = %q{Generate OpenAPI
|
10
|
-
spec.description = %q{Generate OpenAPI
|
9
|
+
spec.summary = %q{Generate OpenAPI schema from RSpec request specs}
|
10
|
+
spec.description = %q{Generate OpenAPI from RSpec request specs}
|
11
11
|
spec.homepage = 'https://github.com/k0kubun/rspec-openapi'
|
12
12
|
spec.license = 'MIT'
|
13
13
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
|
14
14
|
|
15
15
|
spec.metadata['homepage_uri'] = spec.homepage
|
16
16
|
spec.metadata['source_code_uri'] = spec.homepage
|
17
|
-
|
17
|
+
spec.metadata['changelog_uri'] = File.join(spec.homepage, 'blob/master/CHANGELOG.md')
|
18
18
|
|
19
19
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
20
20
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-openapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -24,13 +24,14 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
description: Generate OpenAPI
|
27
|
+
description: Generate OpenAPI from RSpec request specs
|
28
28
|
email:
|
29
29
|
- takashikkbn@gmail.com
|
30
30
|
executables: []
|
31
31
|
extensions: []
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
|
+
- ".github/workflows/test.yml"
|
34
35
|
- ".gitignore"
|
35
36
|
- ".rspec"
|
36
37
|
- ".travis.yml"
|
@@ -57,6 +58,7 @@ licenses:
|
|
57
58
|
metadata:
|
58
59
|
homepage_uri: https://github.com/k0kubun/rspec-openapi
|
59
60
|
source_code_uri: https://github.com/k0kubun/rspec-openapi
|
61
|
+
changelog_uri: https://github.com/k0kubun/rspec-openapi/blob/master/CHANGELOG.md
|
60
62
|
post_install_message:
|
61
63
|
rdoc_options: []
|
62
64
|
require_paths:
|
@@ -75,5 +77,5 @@ requirements: []
|
|
75
77
|
rubygems_version: 3.1.2
|
76
78
|
signing_key:
|
77
79
|
specification_version: 4
|
78
|
-
summary: Generate OpenAPI
|
80
|
+
summary: Generate OpenAPI schema from RSpec request specs
|
79
81
|
test_files: []
|