rspec-openapi 0.9.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 ![test](https://github.com/exoego/rspec-openapi/workflows/test/badge.svg) [![codecov](https://codecov.io/gh/exoego/rspec-openapi/branch/master/graph/badge.svg?token=egYm6AlxkD)](https://codecov.io/gh/exoego/rspec-openapi)
|
1
|
+
# rspec-openapi [![Gem Version](https://badge.fury.io/rb/rspec-openapi.svg)](https://badge.fury.io/rb/rspec-openapi) [![test](https://github.com/exoego/rspec-openapi/actions/workflows/test.yml/badge.svg)](https://github.com/exoego/rspec-openapi/actions/workflows/test.yml) [![codecov](https://codecov.io/gh/exoego/rspec-openapi/branch/master/graph/badge.svg?token=egYm6AlxkD)](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
|