rspec-openapi 0.1.2 → 0.2.1
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 +25 -1
- data/README.md +14 -5
- data/lib/rspec/openapi.rb +1 -1
- data/lib/rspec/openapi/record_builder.rb +10 -1
- data/lib/rspec/openapi/schema_builder.rb +8 -2
- data/lib/rspec/openapi/schema_file.rb +11 -1
- data/lib/rspec/openapi/version.rb +1 -1
- data/rspec-openapi.gemspec +3 -3
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb2aae5a8366967c1ce6a904bb990372af7f5d3b09d4c81fad3866e590c168c3
|
4
|
+
data.tar.gz: 0665f9348a14cb0eb77c37368f69d3952d6eb71e919d8864931cdfbbbc3055dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69ec6408d396d9e4c75bc4ba3ef1c71f82ea2a7bbd67def082262b275c20b9769db851fdb2c1bea971a4ede35c10b6f325fbc35a73be8591f12a986e94a01637
|
7
|
+
data.tar.gz: b71662890f9710012a329db3f380f831e10a8d37671fd9db2a9e3b84d237c699c0c40892020e4f20c781b36ab68563205208bc51607f73f5b2f002c80b5c48de
|
@@ -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,6 +1,30 @@
|
|
1
|
+
## v0.2.1
|
2
|
+
|
3
|
+
* Generate `example` of request body and path / query params
|
4
|
+
[#4](https://github.com/k0kubun/rspec-openapi/issues/4)
|
5
|
+
* Remove a wrapper param created by Rails in request body
|
6
|
+
[#4](https://github.com/k0kubun/rspec-openapi/issues/4)
|
7
|
+
|
8
|
+
## v0.2.0
|
9
|
+
|
10
|
+
* Generate `example` of response body [#3](https://github.com/k0kubun/rspec-openapi/issues/3)
|
11
|
+
|
12
|
+
## v0.1.5
|
13
|
+
|
14
|
+
* Support detecting `float` type [#2](https://github.com/k0kubun/rspec-openapi/issues/2)
|
15
|
+
|
16
|
+
## v0.1.4
|
17
|
+
|
18
|
+
* Avoid NoMethodError on nil Content-Type
|
19
|
+
* Include a space between controller and action in summary
|
20
|
+
|
21
|
+
## v0.1.3
|
22
|
+
|
23
|
+
* Add `RSpec::OpenAPI.comment` configuration
|
24
|
+
|
1
25
|
## v0.1.2
|
2
26
|
|
3
|
-
* Generate `required: true` for path params
|
27
|
+
* Generate `required: true` for path params [#1](https://github.com/k0kubun/rspec-openapi/issues/1)
|
4
28
|
|
5
29
|
## v0.1.1
|
6
30
|
|
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
|
|
@@ -52,7 +52,7 @@ end
|
|
52
52
|
If you run the spec with `OPENAPI=1`,
|
53
53
|
|
54
54
|
```
|
55
|
-
OPENAPI=1
|
55
|
+
OPENAPI=1 rspec spec/requests/tables_spec.rb
|
56
56
|
```
|
57
57
|
|
58
58
|
It will generate [`doc/openapi.yaml` file](./spec/railsapp/doc/openapi.yaml) like:
|
@@ -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,10 +98,19 @@ 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
|
+
# Change the path to generate schema from `doc/openapi.yaml`
|
104
105
|
RSpec::OpenAPI.path = 'doc/schema.yaml'
|
106
|
+
|
107
|
+
# Generate a comment on top of a schema file
|
108
|
+
RSpec::OpenAPI.comment = <<~EOS
|
109
|
+
This file is auto-generated by rspec-openapi https://github.com/k0kubun/rspec-openapi
|
110
|
+
|
111
|
+
When you write a spec in spec/requests, running the spec with `OPENAPI=1 rspec` will
|
112
|
+
update this file automatically. You can also manually edit this file.
|
113
|
+
EOS
|
105
114
|
```
|
106
115
|
|
107
116
|
### How can I add information which can't be generated from RSpec?
|
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,6 +15,7 @@ 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
|
+
example: record.response_body,
|
18
19
|
},
|
19
20
|
},
|
20
21
|
},
|
@@ -37,6 +38,7 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
37
38
|
in: 'path',
|
38
39
|
required: true,
|
39
40
|
schema: build_property(try_cast(value)),
|
41
|
+
example: try_cast(value),
|
40
42
|
}
|
41
43
|
end
|
42
44
|
|
@@ -45,6 +47,7 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
45
47
|
name: key.to_s,
|
46
48
|
in: 'query',
|
47
49
|
schema: build_property(try_cast(value)),
|
50
|
+
example: try_cast(value),
|
48
51
|
}
|
49
52
|
end
|
50
53
|
|
@@ -60,6 +63,7 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
60
63
|
content: {
|
61
64
|
normalize_content_type(record.request_content_type) => {
|
62
65
|
schema: build_property(record.request_params),
|
66
|
+
example: record.request_params,
|
63
67
|
}
|
64
68
|
}
|
65
69
|
}
|
@@ -84,6 +88,8 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
84
88
|
case value
|
85
89
|
when String
|
86
90
|
'string'
|
91
|
+
when Float
|
92
|
+
'float'
|
87
93
|
when Integer
|
88
94
|
'integer'
|
89
95
|
when TrueClass, FalseClass
|
@@ -113,6 +119,6 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
|
|
113
119
|
end
|
114
120
|
|
115
121
|
def normalize_content_type(content_type)
|
116
|
-
content_type
|
122
|
+
content_type&.sub(/;.+\z/, '')
|
117
123
|
end
|
118
124
|
end
|
@@ -26,6 +26,16 @@ class RSpec::OpenAPI::SchemaFile
|
|
26
26
|
# @param [Hash] spec
|
27
27
|
def write(spec)
|
28
28
|
FileUtils.mkdir_p(File.dirname(@path))
|
29
|
-
File.write(@path, YAML.dump(spec))
|
29
|
+
File.write(@path, prepend_comment(YAML.dump(spec)))
|
30
|
+
end
|
31
|
+
|
32
|
+
def prepend_comment(content)
|
33
|
+
return content if RSpec::OpenAPI.comment.nil?
|
34
|
+
|
35
|
+
comment = RSpec::OpenAPI.comment.dup
|
36
|
+
unless comment.end_with?("\n")
|
37
|
+
comment << "\n"
|
38
|
+
end
|
39
|
+
"#{comment.gsub(/^/, '# ').gsub(/^# \n/, "#\n")}#{content}"
|
30
40
|
end
|
31
41
|
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.1
|
4
|
+
version: 0.2.1
|
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-06-
|
11
|
+
date: 2020-06-25 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:
|
@@ -72,8 +74,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
74
|
- !ruby/object:Gem::Version
|
73
75
|
version: '0'
|
74
76
|
requirements: []
|
75
|
-
rubygems_version: 3.
|
77
|
+
rubygems_version: 3.2.0.pre1
|
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: []
|