rspec-openapi 0.19.0 → 0.20.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 +4 -4
- data/.github/workflows/codeql-analysis.yml +1 -1
- data/.github/workflows/rubocop.yml +1 -1
- data/.github/workflows/test.yml +1 -1
- data/.gitignore +2 -0
- data/lib/rspec/openapi/extractors/hanami.rb +21 -1
- data/lib/rspec/openapi/extractors/rack.rb +21 -1
- data/lib/rspec/openapi/extractors/rails.rb +21 -1
- data/lib/rspec/openapi/schema_file.rb +9 -1
- data/lib/rspec/openapi/version.rb +1 -1
- metadata +4 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a94cc7be13ab8a500bf3eb4bb5831f1c06c7722e96f9f7157e424fa402f2f137
|
4
|
+
data.tar.gz: db6591ab069d1f7bd1d7f07b6f2c4d9be9ef86f90df497c28a2b8ed01ee1d5e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 785d100550f4ecde118a8986ee7c98349e310de9c870a04067a9f84892d37b63cadf9a88d0ff2158012c153c561c3a0576a3c0c79860a645bb53bb295c64bbc5
|
7
|
+
data.tar.gz: 660bd242fa8c5686bc6fbead56f595be959f1f1cae465723ed89e93c0b0096ee6c86094c8561193cabf119cedb74762e84e6b9c3651d34fca7691b63317fc611
|
data/.github/workflows/test.yml
CHANGED
@@ -32,7 +32,7 @@ jobs:
|
|
32
32
|
RAILS_VERSION: ${{ matrix.rails == '' && '6.1.6' || matrix.rails }}
|
33
33
|
COVERAGE: ${{ matrix.coverage || '' }}
|
34
34
|
steps:
|
35
|
-
- uses: actions/checkout@
|
35
|
+
- uses: actions/checkout@v5
|
36
36
|
- name: bundle install
|
37
37
|
run: bundle install -j$(nproc) --retry 3
|
38
38
|
- run: bundle exec rspec
|
data/.gitignore
CHANGED
@@ -56,7 +56,7 @@ class << RSpec::OpenAPI::Extractors::Hanami = Object.new
|
|
56
56
|
|
57
57
|
return RSpec::OpenAPI::Extractors::Rack.request_attributes(request, example) unless route.routable?
|
58
58
|
|
59
|
-
metadata = example.metadata
|
59
|
+
metadata = merge_openapi_metadata(example.metadata)
|
60
60
|
summary = metadata[:summary] || RSpec::OpenAPI.summary_builder.call(example)
|
61
61
|
tags = metadata[:tags] || RSpec::OpenAPI.tags_builder.call(example)
|
62
62
|
formats = metadata[:formats] || RSpec::OpenAPI.formats_builder.curry.call(example)
|
@@ -100,6 +100,26 @@ class << RSpec::OpenAPI::Extractors::Hanami = Object.new
|
|
100
100
|
[request, response]
|
101
101
|
end
|
102
102
|
|
103
|
+
private
|
104
|
+
|
105
|
+
def merge_openapi_metadata(metadata)
|
106
|
+
collect_openapi_metadata(metadata).reduce({}, &:merge)
|
107
|
+
end
|
108
|
+
|
109
|
+
def collect_openapi_metadata(metadata)
|
110
|
+
[].tap do |result|
|
111
|
+
current = metadata
|
112
|
+
|
113
|
+
while current
|
114
|
+
[current[:example_group], current].each do |meta|
|
115
|
+
result.unshift(meta[:openapi]) if meta&.dig(:openapi)
|
116
|
+
end
|
117
|
+
|
118
|
+
current = current[:parent_example_group]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
103
123
|
def add_id(path, route)
|
104
124
|
return path if route.params.empty?
|
105
125
|
|
@@ -6,7 +6,7 @@ class << RSpec::OpenAPI::Extractors::Rack = Object.new
|
|
6
6
|
# @param [RSpec::Core::Example] example
|
7
7
|
# @return Array
|
8
8
|
def request_attributes(request, example)
|
9
|
-
metadata = example.metadata
|
9
|
+
metadata = merge_openapi_metadata(example.metadata)
|
10
10
|
summary = metadata[:summary] || RSpec::OpenAPI.summary_builder.call(example)
|
11
11
|
tags = metadata[:tags] || RSpec::OpenAPI.tags_builder.call(example)
|
12
12
|
formats = metadata[:formats] || RSpec::OpenAPI.formats_builder.curry.call(example)
|
@@ -40,4 +40,24 @@ class << RSpec::OpenAPI::Extractors::Rack = Object.new
|
|
40
40
|
|
41
41
|
[request, response]
|
42
42
|
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def merge_openapi_metadata(metadata)
|
47
|
+
collect_openapi_metadata(metadata).reduce({}, &:merge)
|
48
|
+
end
|
49
|
+
|
50
|
+
def collect_openapi_metadata(metadata)
|
51
|
+
[].tap do |result|
|
52
|
+
current = metadata
|
53
|
+
|
54
|
+
while current
|
55
|
+
[current[:example_group], current].each do |meta|
|
56
|
+
result.unshift(meta[:openapi]) if meta&.dig(:openapi)
|
57
|
+
end
|
58
|
+
|
59
|
+
current = current[:parent_example_group]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
43
63
|
end
|
@@ -16,7 +16,7 @@ class << RSpec::OpenAPI::Extractors::Rails = Object.new
|
|
16
16
|
|
17
17
|
raise "No route matched for #{fixed_request.request_method} #{fixed_request.path_info}" if route.nil?
|
18
18
|
|
19
|
-
metadata = example.metadata
|
19
|
+
metadata = merge_openapi_metadata(example.metadata)
|
20
20
|
summary = metadata[:summary] || RSpec::OpenAPI.summary_builder.call(example)
|
21
21
|
tags = metadata[:tags] || RSpec::OpenAPI.tags_builder.call(example)
|
22
22
|
formats = metadata[:formats] || RSpec::OpenAPI.formats_builder.curry.call(example)
|
@@ -55,6 +55,26 @@ class << RSpec::OpenAPI::Extractors::Rails = Object.new
|
|
55
55
|
[context.request, context.response]
|
56
56
|
end
|
57
57
|
|
58
|
+
private
|
59
|
+
|
60
|
+
def merge_openapi_metadata(metadata)
|
61
|
+
collect_openapi_metadata(metadata).reduce({}, &:merge)
|
62
|
+
end
|
63
|
+
|
64
|
+
def collect_openapi_metadata(metadata)
|
65
|
+
[].tap do |result|
|
66
|
+
current = metadata
|
67
|
+
|
68
|
+
while current
|
69
|
+
[current[:example_group], current].each do |meta|
|
70
|
+
result.unshift(meta[:openapi]) if meta&.dig(:openapi)
|
71
|
+
end
|
72
|
+
|
73
|
+
current = current[:parent_example_group]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
58
78
|
# @param [ActionDispatch::Request] request
|
59
79
|
def find_rails_route(request, app: Rails.application, path_prefix: '')
|
60
80
|
app.routes.router.recognize(request) do |route, _parameters|
|
@@ -4,6 +4,9 @@ require 'fileutils'
|
|
4
4
|
require 'yaml'
|
5
5
|
require 'json'
|
6
6
|
|
7
|
+
# For Ruby 2.7
|
8
|
+
require 'date'
|
9
|
+
|
7
10
|
# TODO: Support JSON
|
8
11
|
class RSpec::OpenAPI::SchemaFile
|
9
12
|
# @param [String] path
|
@@ -24,7 +27,12 @@ class RSpec::OpenAPI::SchemaFile
|
|
24
27
|
def read
|
25
28
|
return {} unless File.exist?(@path)
|
26
29
|
|
27
|
-
RSpec::OpenAPI::KeyTransformer.symbolize(
|
30
|
+
RSpec::OpenAPI::KeyTransformer.symbolize(
|
31
|
+
YAML.safe_load(
|
32
|
+
File.read(@path),
|
33
|
+
permitted_classes: [Date, Time],
|
34
|
+
),
|
35
|
+
) # this can also parse JSON
|
28
36
|
end
|
29
37
|
|
30
38
|
# @param [Hash] spec
|
metadata
CHANGED
@@ -1,15 +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.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
- TATSUNO Yasuhiro
|
9
|
-
autorequire:
|
10
9
|
bindir: exe
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: actionpack
|
@@ -109,9 +108,8 @@ licenses:
|
|
109
108
|
metadata:
|
110
109
|
homepage_uri: https://github.com/exoego/rspec-openapi
|
111
110
|
source_code_uri: https://github.com/exoego/rspec-openapi
|
112
|
-
changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.
|
111
|
+
changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.20.0
|
113
112
|
rubygems_mfa_required: 'true'
|
114
|
-
post_install_message:
|
115
113
|
rdoc_options: []
|
116
114
|
require_paths:
|
117
115
|
- lib
|
@@ -126,8 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
124
|
- !ruby/object:Gem::Version
|
127
125
|
version: '0'
|
128
126
|
requirements: []
|
129
|
-
rubygems_version: 3.
|
130
|
-
signing_key:
|
127
|
+
rubygems_version: 3.6.9
|
131
128
|
specification_version: 4
|
132
129
|
summary: Generate OpenAPI schema from RSpec request specs
|
133
130
|
test_files: []
|