rspec-openapi 0.9.0 → 0.11.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/dependabot.yml +8 -0
- data/.github/workflows/codeql-analysis.yml +4 -4
- data/.github/workflows/rubocop.yml +2 -2
- data/.github/workflows/test.yml +8 -1
- data/.rubocop_todo.yml +18 -8
- data/.simplecov_spawn.rb +1 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +1 -1
- data/README.md +18 -3
- data/lib/rspec/openapi/record_builder.rb +3 -3
- data/lib/rspec/openapi/result_recorder.rb +16 -8
- data/lib/rspec/openapi/schema_builder.rb +1 -0
- data/lib/rspec/openapi/schema_cleaner.rb +30 -0
- data/lib/rspec/openapi/schema_merger.rb +22 -10
- data/lib/rspec/openapi/schema_sorter.rb +35 -0
- data/lib/rspec/openapi/version.rb +1 -1
- data/lib/rspec/openapi.rb +15 -1
- data/scripts/rspec_with_simplecov +1 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a48ebba5d2201f35bb94f47d5bd649444bb9c58ae1f0ef91f57e315553f9ef2
|
4
|
+
data.tar.gz: 71d4dec68449c2e14b4d3ce7058622b7c56629bee2814e04b1f16e5e817a7bf2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c984f5dbd1a4587a9d34686c50e06a832051215f5e22abc8a96781ecebe57e0bdddabeef093db06f5bea23f58e70322a7574168f621e8765721ab2c2cf19c48
|
7
|
+
data.tar.gz: 2877daab4753106d04275e3189b8a8e648b7268a6c6d7e422e94d5bfb230064a2e875e73531abe6930bfa6c8b7cdefe7d06ee512cdcb4e22adb618915349514b
|
@@ -25,15 +25,15 @@ jobs:
|
|
25
25
|
|
26
26
|
steps:
|
27
27
|
- name: Checkout repository
|
28
|
-
uses: actions/checkout@
|
28
|
+
uses: actions/checkout@v4
|
29
29
|
|
30
30
|
- name: Initialize CodeQL
|
31
|
-
uses: github/codeql-action/init@
|
31
|
+
uses: github/codeql-action/init@v3
|
32
32
|
with:
|
33
33
|
languages: ${{ matrix.language }}
|
34
34
|
|
35
35
|
- name: Autobuild
|
36
|
-
uses: github/codeql-action/autobuild@
|
36
|
+
uses: github/codeql-action/autobuild@v3
|
37
37
|
|
38
38
|
- name: Perform CodeQL Analysis
|
39
|
-
uses: github/codeql-action/analyze@
|
39
|
+
uses: github/codeql-action/analyze@v3
|
@@ -14,7 +14,7 @@ jobs:
|
|
14
14
|
|
15
15
|
steps:
|
16
16
|
- name: Checkout repository
|
17
|
-
uses: actions/checkout@
|
17
|
+
uses: actions/checkout@v4
|
18
18
|
|
19
19
|
- name: Set up Ruby
|
20
20
|
uses: ruby/setup-ruby@v1
|
@@ -30,6 +30,6 @@ jobs:
|
|
30
30
|
"
|
31
31
|
|
32
32
|
- name: Upload Sarif output
|
33
|
-
uses: github/codeql-action/upload-sarif@
|
33
|
+
uses: github/codeql-action/upload-sarif@v3
|
34
34
|
with:
|
35
35
|
sarif_file: rubocop.sarif
|
data/.github/workflows/test.yml
CHANGED
@@ -26,14 +26,21 @@ jobs:
|
|
26
26
|
rails: 6.1.6
|
27
27
|
- ruby: ruby:3.1
|
28
28
|
rails: 7.0.3
|
29
|
+
- ruby: ruby:3.3
|
30
|
+
rails: 7.1.2
|
29
31
|
coverage: coverage
|
30
32
|
env:
|
31
33
|
RAILS_VERSION: ${{ matrix.rails == '' && '6.1.6' || matrix.rails }}
|
32
34
|
COVERAGE: ${{ matrix.coverage || '' }}
|
33
35
|
steps:
|
34
|
-
- uses: actions/checkout@
|
36
|
+
- uses: actions/checkout@v4
|
35
37
|
- name: bundle install
|
36
38
|
run: bundle install -j$(nproc) --retry 3
|
39
|
+
- name: install simplecov-fork only for minitest with coverage
|
40
|
+
run: |
|
41
|
+
gem install specific_install
|
42
|
+
gem specific_install https://github.com/exoego/simplecov.git branch-fix
|
43
|
+
if: matrix.coverage == 'coverage'
|
37
44
|
- run: bundle exec rspec
|
38
45
|
timeout-minutes: 1
|
39
46
|
- name: Upload coverage reports
|
data/.rubocop_todo.yml
CHANGED
@@ -1,25 +1,35 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2024-01-13 11:12:43 UTC using RuboCop version 1.50.2.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count:
|
9
|
+
# Offense count: 9
|
10
10
|
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
|
11
11
|
Metrics/AbcSize:
|
12
|
-
Max:
|
12
|
+
Max: 48
|
13
|
+
|
14
|
+
# Offense count: 2
|
15
|
+
# Configuration parameters: CountComments, CountAsOne.
|
16
|
+
Metrics/ClassLength:
|
17
|
+
Max: 192
|
13
18
|
|
14
|
-
# Offense count:
|
19
|
+
# Offense count: 5
|
15
20
|
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
16
21
|
Metrics/CyclomaticComplexity:
|
17
|
-
Max:
|
22
|
+
Max: 13
|
18
23
|
|
19
|
-
# Offense count:
|
24
|
+
# Offense count: 16
|
20
25
|
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
|
21
26
|
Metrics/MethodLength:
|
22
|
-
Max:
|
27
|
+
Max: 31
|
28
|
+
|
29
|
+
# Offense count: 1
|
30
|
+
# Configuration parameters: AllowedMethods, AllowedPatterns.
|
31
|
+
Metrics/PerceivedComplexity:
|
32
|
+
Max: 13
|
23
33
|
|
24
34
|
# Offense count: 1
|
25
35
|
# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
|
@@ -29,7 +39,7 @@ Naming/VariableNumber:
|
|
29
39
|
Exclude:
|
30
40
|
- 'spec/integration_tests/roda_test.rb'
|
31
41
|
|
32
|
-
# Offense count:
|
42
|
+
# Offense count: 6
|
33
43
|
# Configuration parameters: AllowedConstants.
|
34
44
|
Style/Documentation:
|
35
45
|
Exclude:
|
data/.simplecov_spawn.rb
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
## v0.11.0
|
2
|
+
|
3
|
+
## What's Changed
|
4
|
+
- feat: Allow path-based config overrides
|
5
|
+
[#162](https://github.com/exoego/rspec-openapi/pull/162)
|
6
|
+
- enhancement: Sort HTTP methods, response status codes, and contents lexicographically
|
7
|
+
[#163](https://github.com/exoego/rspec-openapi/pull/163)
|
8
|
+
- enhancement: Remove parameters that conflict with security schemas
|
9
|
+
[#166](https://github.com/exoego/rspec-openapi/pull/166)
|
10
|
+
|
11
|
+
## v0.10.0
|
12
|
+
- bugfix: Merge parameter data to preserve description in manually edited Openapi spec
|
13
|
+
[#149](https://github.com/exoego/rspec-openapi/pull/149)
|
14
|
+
- feat: Add ability to configure which path params to ignore
|
15
|
+
[#150](https://github.com/exoego/rspec-openapi/pull/150)
|
16
|
+
- feat: Add custom title
|
17
|
+
[#147](https://github.com/exoego/rspec-openapi/pull/147)
|
18
|
+
- feat: Add ability to define custom summary and tags builders
|
19
|
+
[#148](https://github.com/exoego/rspec-openapi/pull/148)
|
20
|
+
- enhancement: Sort paths lexicographically so the order of paths is more stable and predictable
|
21
|
+
[#155](https://github.com/exoego/rspec-openapi/pull/155)
|
22
|
+
- enhancement: requestBody should not merge requestBody from error examples
|
23
|
+
[#154](https://github.com/exoego/rspec-openapi/pull/154)
|
24
|
+
|
1
25
|
## v0.9.0
|
2
26
|
- bugfix: Fix engine path resolution
|
3
27
|
[#113](https://github.com/exoego/rspec-openapi/pull/113)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# rspec-openapi  [](https://codecov.io/gh/exoego/rspec-openapi)
|
1
|
+
# rspec-openapi [](https://badge.fury.io/rb/rspec-openapi) [](https://github.com/exoego/rspec-openapi/actions/workflows/test.yml) [](https://codecov.io/gh/exoego/rspec-openapi)
|
2
2
|
|
3
3
|
Generate OpenAPI schema from RSpec request specs.
|
4
4
|
|
@@ -122,6 +122,8 @@ RSpec::OpenAPI.path = -> (example) {
|
|
122
122
|
end
|
123
123
|
}
|
124
124
|
|
125
|
+
RSpec::OpenAPI.title = 'OpenAPI Documentation'
|
126
|
+
|
125
127
|
# Disable generating `example`
|
126
128
|
RSpec::OpenAPI.enable_example = false
|
127
129
|
|
@@ -167,8 +169,21 @@ EOS
|
|
167
169
|
# Generate a custom description, given an RSpec example
|
168
170
|
RSpec::OpenAPI.description_builder = -> (example) { example.description }
|
169
171
|
|
172
|
+
# Generate a custom summary, given an RSpec example
|
173
|
+
# This example uses the summary from the example_group.
|
174
|
+
RSpec::OpenAPI.summary_builder = ->(example) { example.metadata.dig(:example_group, :openapi, :summary) }
|
175
|
+
|
176
|
+
# Generate a custom tags, given an RSpec example
|
177
|
+
# This example uses the tags from the parent_example_group
|
178
|
+
RSpec::OpenAPI.tags_builder = -> (example) { example.metadata.dig(:example_group, :parent_example_group, :openapi, :tags) }
|
179
|
+
|
170
180
|
# Change the example type(s) that will generate schema
|
171
181
|
RSpec::OpenAPI.example_types = %i[request]
|
182
|
+
|
183
|
+
# Configure which path params to ignore
|
184
|
+
# :controller and :action always exist. :format is added when routes is configured as such.
|
185
|
+
RSpec::OpenAPI.ignored_path_params = %i[controller action format]
|
186
|
+
|
172
187
|
```
|
173
188
|
|
174
189
|
### Can I use rspec-openapi with `$ref` to minimize duplication of schema?
|
@@ -199,7 +214,7 @@ paths:
|
|
199
214
|
application/json:
|
200
215
|
schema:
|
201
216
|
$ref: "#/components/schemas/User"
|
202
|
-
# Note) #/components/
|
217
|
+
# Note) #/components/schemas is not needed to be defined.
|
203
218
|
```
|
204
219
|
|
205
220
|
3. Then, re-run rspec-openapi. It will generate `#/components/schemas` with the referenced schema (`User` for example) newly-generated or updated.
|
@@ -278,7 +293,7 @@ If you find a room for improvement, open an issue.
|
|
278
293
|
|
279
294
|
### How can I add information which can't be generated from RSpec?
|
280
295
|
|
281
|
-
rspec-openapi tries to
|
296
|
+
rspec-openapi tries to preserve manual modifications as much as possible when generating specs.
|
282
297
|
You can directly edit `doc/openapi.yaml` as you like without spoiling the automatic generation capability.
|
283
298
|
|
284
299
|
### Can I exclude specific specs from OpenAPI generation?
|
@@ -62,8 +62,8 @@ class << RSpec::OpenAPI::RecordBuilder = Object.new
|
|
62
62
|
|
63
63
|
def extract_request_attributes(request, example)
|
64
64
|
metadata = example.metadata[:openapi] || {}
|
65
|
-
summary = metadata[:summary]
|
66
|
-
tags = metadata[:tags]
|
65
|
+
summary = metadata[:summary] || RSpec::OpenAPI.summary_builder.call(example)
|
66
|
+
tags = metadata[:tags] || RSpec::OpenAPI.tags_builder.call(example)
|
67
67
|
operation_id = metadata[:operation_id]
|
68
68
|
required_request_params = metadata[:required_request_params] || []
|
69
69
|
security = metadata[:security]
|
@@ -83,7 +83,7 @@ class << RSpec::OpenAPI::RecordBuilder = Object.new
|
|
83
83
|
tags ||= [route.requirements[:controller]&.classify].compact
|
84
84
|
# :controller and :action always exist. :format is added when routes is configured as such.
|
85
85
|
# TODO: Use .except(:controller, :action, :format) when we drop support for Ruby 2.x
|
86
|
-
raw_path_params = raw_path_params.slice(*(raw_path_params.keys -
|
86
|
+
raw_path_params = raw_path_params.slice(*(raw_path_params.keys - RSpec::OpenAPI.ignored_path_params))
|
87
87
|
end
|
88
88
|
summary ||= "#{request.method} #{path}"
|
89
89
|
[path, summary, tags, operation_id, required_request_params, raw_path_params, description, security]
|
@@ -7,25 +7,33 @@ class RSpec::OpenAPI::ResultRecorder
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def record_results!
|
10
|
-
title = File.basename(Dir.pwd)
|
11
10
|
@path_records.each do |path, records|
|
11
|
+
# Look for a path-specific config file and run it.
|
12
|
+
config_file = File.join(File.dirname(path), RSpec::OpenAPI.config_filename)
|
13
|
+
begin
|
14
|
+
require config_file if File.exist?(config_file)
|
15
|
+
rescue StandardError => e
|
16
|
+
puts "WARNING: Unable to load #{config_file}: #{e}"
|
17
|
+
end
|
18
|
+
|
19
|
+
title = RSpec::OpenAPI.title
|
12
20
|
RSpec::OpenAPI::SchemaFile.new(path).edit do |spec|
|
13
21
|
schema = RSpec::OpenAPI::DefaultSchema.build(title)
|
14
22
|
schema[:info].merge!(RSpec::OpenAPI.info)
|
15
23
|
RSpec::OpenAPI::SchemaMerger.merge!(spec, schema)
|
16
24
|
new_from_zero = {}
|
17
25
|
records.each do |record|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
@error_records[e] = record # Avoid failing the build
|
24
|
-
end
|
26
|
+
record_schema = RSpec::OpenAPI::SchemaBuilder.build(record)
|
27
|
+
RSpec::OpenAPI::SchemaMerger.merge!(spec, record_schema)
|
28
|
+
RSpec::OpenAPI::SchemaMerger.merge!(new_from_zero, record_schema)
|
29
|
+
rescue StandardError, NotImplementedError => e # e.g. SchemaBuilder raises a NotImplementedError
|
30
|
+
@error_records[e] = record # Avoid failing the build
|
25
31
|
end
|
32
|
+
RSpec::OpenAPI::SchemaCleaner.cleanup_conflicting_security_parameters!(spec)
|
26
33
|
RSpec::OpenAPI::SchemaCleaner.cleanup!(spec, new_from_zero)
|
27
34
|
RSpec::OpenAPI::ComponentsUpdater.update!(spec, new_from_zero)
|
28
35
|
RSpec::OpenAPI::SchemaCleaner.cleanup_empty_required_array!(spec)
|
36
|
+
RSpec::OpenAPI::SchemaSorter.deep_sort!(spec)
|
29
37
|
end
|
30
38
|
end
|
31
39
|
end
|
@@ -39,6 +39,24 @@ class << RSpec::OpenAPI::SchemaCleaner = Object.new
|
|
39
39
|
base
|
40
40
|
end
|
41
41
|
|
42
|
+
def cleanup_conflicting_security_parameters!(base)
|
43
|
+
security_schemes = base.dig('components', 'securitySchemes') || {}
|
44
|
+
|
45
|
+
return if security_schemes.empty?
|
46
|
+
|
47
|
+
paths_to_security_definitions = RSpec::OpenAPI::HashHelper.matched_paths_deeply_nested(base, 'paths', 'security')
|
48
|
+
|
49
|
+
paths_to_security_definitions.each do |path|
|
50
|
+
parent_path_definition = base.dig(*path.take(path.length - 1))
|
51
|
+
|
52
|
+
security_schemes.each do |security_scheme_name, security_scheme|
|
53
|
+
remove_parameters_conflicting_with_security_sceheme!(
|
54
|
+
parent_path_definition, security_scheme, security_scheme_name,
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
42
60
|
def cleanup_empty_required_array!(base)
|
43
61
|
paths_to_objects = [
|
44
62
|
*RSpec::OpenAPI::HashHelper.matched_paths_deeply_nested(base, 'components.schemas', 'properties'),
|
@@ -53,6 +71,18 @@ class << RSpec::OpenAPI::SchemaCleaner = Object.new
|
|
53
71
|
|
54
72
|
private
|
55
73
|
|
74
|
+
def remove_parameters_conflicting_with_security_sceheme!(path_definition, security_scheme, security_scheme_name)
|
75
|
+
return unless path_definition['security']
|
76
|
+
return unless path_definition['parameters']
|
77
|
+
return unless path_definition.dig('security', 0).keys.include?(security_scheme_name)
|
78
|
+
|
79
|
+
path_definition['parameters'].reject! do |parameter|
|
80
|
+
parameter['in'] == security_scheme['in'] && # same location (ie. header)
|
81
|
+
parameter['name'] == security_scheme['name'] # same name (ie. AUTHORIZATION)
|
82
|
+
end
|
83
|
+
path_definition.delete('parameters') if path_definition['parameters'].empty?
|
84
|
+
end
|
85
|
+
|
56
86
|
def cleanup_array!(base, spec, selector, fields_for_identity = [])
|
57
87
|
marshal = lambda do |obj|
|
58
88
|
Marshal.dump(slice(obj, fields_for_identity))
|
@@ -43,16 +43,28 @@ class << RSpec::OpenAPI::SchemaMerger = Object.new
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def merge_arrays(base, key, value)
|
46
|
-
case key
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
46
|
+
base[key] = case key
|
47
|
+
when 'parameters'
|
48
|
+
merge_parameters(base, key, value)
|
49
|
+
when 'required'
|
50
|
+
# Preserve properties that appears in all test cases
|
51
|
+
value & base[key]
|
52
|
+
else
|
53
|
+
# last one wins
|
54
|
+
value
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def merge_parameters(base, key, value)
|
59
|
+
all_parameters = value | base[key]
|
60
|
+
|
61
|
+
unique_base_parameters = base[key].index_by { |parameter| [parameter['name'], parameter['in']] }
|
62
|
+
all_parameters = all_parameters.map do |parameter|
|
63
|
+
base_parameter = unique_base_parameters[[parameter['name'], parameter['in']]] || {}
|
64
|
+
base_parameter ? base_parameter.merge(parameter) : parameter
|
56
65
|
end
|
66
|
+
|
67
|
+
all_parameters.uniq! { |param| param.slice('name', 'in') }
|
68
|
+
base[key] = all_parameters
|
57
69
|
end
|
58
70
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class << RSpec::OpenAPI::SchemaSorter = Object.new
|
4
|
+
# Sort some unpredictably ordered properties in a lexicographical manner to make the order more predictable.
|
5
|
+
#
|
6
|
+
# @param [Hash|Array]
|
7
|
+
def deep_sort!(spec)
|
8
|
+
# paths
|
9
|
+
deep_sort_by_selector!(spec, 'paths')
|
10
|
+
|
11
|
+
# methods
|
12
|
+
deep_sort_by_selector!(spec, 'paths.*')
|
13
|
+
|
14
|
+
# response status code
|
15
|
+
deep_sort_by_selector!(spec, 'paths.*.*.responses')
|
16
|
+
|
17
|
+
# content-type
|
18
|
+
deep_sort_by_selector!(spec, 'paths.*.*.responses.*.content')
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# @param [Hash] base
|
24
|
+
# @param [String] selector
|
25
|
+
def deep_sort_by_selector!(base, selector)
|
26
|
+
RSpec::OpenAPI::HashHelper.matched_paths(base, selector).each do |paths|
|
27
|
+
deep_sort_hash!(base.dig(*paths))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def deep_sort_hash!(hash)
|
32
|
+
sorted = hash.entries.sort_by { |k, _| k }.to_h
|
33
|
+
hash.replace(sorted)
|
34
|
+
end
|
35
|
+
end
|
data/lib/rspec/openapi.rb
CHANGED
@@ -9,15 +9,19 @@ require 'rspec/openapi/schema_builder'
|
|
9
9
|
require 'rspec/openapi/schema_file'
|
10
10
|
require 'rspec/openapi/schema_merger'
|
11
11
|
require 'rspec/openapi/schema_cleaner'
|
12
|
+
require 'rspec/openapi/schema_sorter'
|
12
13
|
|
13
14
|
require 'rspec/openapi/minitest_hooks' if Object.const_defined?('Minitest')
|
14
15
|
require 'rspec/openapi/rspec_hooks' if ENV['OPENAPI'] && Object.const_defined?('RSpec')
|
15
16
|
|
16
17
|
module RSpec::OpenAPI
|
17
18
|
@path = 'doc/openapi.yaml'
|
19
|
+
@title = File.basename(Dir.pwd)
|
18
20
|
@comment = nil
|
19
21
|
@enable_example = true
|
20
22
|
@description_builder = ->(example) { example.description }
|
23
|
+
@summary_builder = ->(example) { example.metadata[:summary] }
|
24
|
+
@tags_builder = ->(example) { example.metadata[:tags] }
|
21
25
|
@info = {}
|
22
26
|
@application_version = '1.0.0'
|
23
27
|
@request_headers = []
|
@@ -26,12 +30,19 @@ module RSpec::OpenAPI
|
|
26
30
|
@example_types = %i[request]
|
27
31
|
@response_headers = []
|
28
32
|
@path_records = Hash.new { |h, k| h[k] = [] }
|
33
|
+
@ignored_path_params = %i[controller action format]
|
34
|
+
|
35
|
+
# This is the configuraion override file name we look for within each path.
|
36
|
+
@config_filename = 'rspec_openapi.rb'
|
29
37
|
|
30
38
|
class << self
|
31
39
|
attr_accessor :path,
|
40
|
+
:title,
|
32
41
|
:comment,
|
33
42
|
:enable_example,
|
34
43
|
:description_builder,
|
44
|
+
:summary_builder,
|
45
|
+
:tags_builder,
|
35
46
|
:info,
|
36
47
|
:application_version,
|
37
48
|
:request_headers,
|
@@ -39,6 +50,9 @@ module RSpec::OpenAPI
|
|
39
50
|
:security_schemes,
|
40
51
|
:example_types,
|
41
52
|
:response_headers,
|
42
|
-
:path_records
|
53
|
+
:path_records,
|
54
|
+
:ignored_path_params
|
55
|
+
|
56
|
+
attr_reader :config_filename
|
43
57
|
end
|
44
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-openapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2024-01-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -47,6 +47,7 @@ executables: []
|
|
47
47
|
extensions: []
|
48
48
|
extra_rdoc_files: []
|
49
49
|
files:
|
50
|
+
- ".github/dependabot.yml"
|
50
51
|
- ".github/workflows/codeql-analysis.yml"
|
51
52
|
- ".github/workflows/rubocop.yml"
|
52
53
|
- ".github/workflows/test.yml"
|
@@ -75,6 +76,7 @@ files:
|
|
75
76
|
- lib/rspec/openapi/schema_cleaner.rb
|
76
77
|
- lib/rspec/openapi/schema_file.rb
|
77
78
|
- lib/rspec/openapi/schema_merger.rb
|
79
|
+
- lib/rspec/openapi/schema_sorter.rb
|
78
80
|
- lib/rspec/openapi/version.rb
|
79
81
|
- rspec-openapi.gemspec
|
80
82
|
- scripts/rspec
|