rspec-openapi 0.4.8 → 0.5.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/test.yml +13 -5
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -1
- data/README.md +2 -0
- data/lib/rspec/openapi/hooks.rb +2 -2
- data/lib/rspec/openapi/schema_merger.rb +11 -10
- data/lib/rspec/openapi/version.rb +1 -1
- metadata +2 -3
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b35634b5756cb3719f38bdb5bbb501033b69472d0680615b5e1dcdba2251f41f
|
4
|
+
data.tar.gz: 6600c602466bf0ea6a468c22a2762c6717086ed2ee1ae89c4d132b7d5edc21cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13c6e8ad06467426186336d53a387e7e92207d5caf5c6838a076275674e3f334a490185cbf20d889f59b04160d6ec056b3030e35862217d6425f88ccef7fc97c
|
7
|
+
data.tar.gz: 4393d139ac38acd1ccf1b8404482671932b39491eed44ab69cbf57c28e06a186cdf452cb610b01377d2237f28ee4fe024fd43e28780b8662e8c76626be414332
|
data/.github/workflows/test.yml
CHANGED
@@ -15,11 +15,19 @@ jobs:
|
|
15
15
|
strategy:
|
16
16
|
fail-fast: false
|
17
17
|
matrix:
|
18
|
-
|
19
|
-
- ruby:2.5
|
20
|
-
- ruby:2.6
|
21
|
-
- ruby:2.7
|
22
|
-
- ruby:3.0
|
18
|
+
include:
|
19
|
+
- ruby: ruby:2.5
|
20
|
+
- ruby: ruby:2.6
|
21
|
+
- ruby: ruby:2.7
|
22
|
+
- ruby: ruby:3.0
|
23
|
+
- ruby: ruby:3.1
|
24
|
+
rails: 6.0.5
|
25
|
+
- ruby: ruby:3.1
|
26
|
+
rails: 6.1.6
|
27
|
+
- ruby: ruby:3.1
|
28
|
+
rails: 7.0.3
|
29
|
+
env:
|
30
|
+
RAILS_VERSION: ${{ matrix.rails == '' && '6.1.6' || matrix.rails }}
|
23
31
|
steps:
|
24
32
|
- uses: actions/checkout@v2
|
25
33
|
- name: bundle install
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -105,6 +105,8 @@ and the schema file can be used as an input of [Swagger UI](https://github.com/s
|
|
105
105
|
The following configurations are optional.
|
106
106
|
|
107
107
|
```rb
|
108
|
+
require 'rspec/openapi'
|
109
|
+
|
108
110
|
# Change the path to generate schema from `doc/openapi.yaml`
|
109
111
|
RSpec::OpenAPI.path = 'doc/schema.yaml'
|
110
112
|
|
data/lib/rspec/openapi/hooks.rb
CHANGED
@@ -22,10 +22,10 @@ RSpec.configuration.after(:suite) do
|
|
22
22
|
RSpec::OpenAPI::SchemaFile.new(path).edit do |spec|
|
23
23
|
schema = RSpec::OpenAPI::DefaultSchema.build(title)
|
24
24
|
schema[:info].merge!(RSpec::OpenAPI.info)
|
25
|
-
RSpec::OpenAPI::SchemaMerger.
|
25
|
+
RSpec::OpenAPI::SchemaMerger.merge!(spec, schema)
|
26
26
|
records.each do |record|
|
27
27
|
begin
|
28
|
-
RSpec::OpenAPI::SchemaMerger.
|
28
|
+
RSpec::OpenAPI::SchemaMerger.merge!(spec, RSpec::OpenAPI::SchemaBuilder.build(record))
|
29
29
|
rescue StandardError, NotImplementedError => e # e.g. SchemaBuilder raises a NotImplementedError
|
30
30
|
error_records[e] = record # Avoid failing the build
|
31
31
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
class << RSpec::OpenAPI::SchemaMerger = Object.new
|
2
2
|
# @param [Hash] base
|
3
3
|
# @param [Hash] spec
|
4
|
-
def
|
4
|
+
def merge!(base, spec)
|
5
5
|
spec = normalize_keys(spec)
|
6
|
-
|
6
|
+
merge_schema!(base, spec)
|
7
7
|
end
|
8
8
|
|
9
9
|
private
|
@@ -22,25 +22,26 @@ class << RSpec::OpenAPI::SchemaMerger = Object.new
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# Not doing `base.replace(deep_merge(base, spec))` to preserve key orders.
|
25
|
-
# Also this needs to be aware of OpenAPI details
|
26
|
-
#
|
25
|
+
# Also this needs to be aware of OpenAPI details because a Hash-like structure
|
26
|
+
# may be an array whose Hash elements have a key name.
|
27
27
|
#
|
28
|
-
# TODO: Perform more intelligent merges like rerouting edits / merging types
|
29
28
|
# TODO: Should we probably force-merge `summary` regardless of manual modifications?
|
30
|
-
def
|
29
|
+
def merge_schema!(base, spec)
|
31
30
|
spec.each do |key, value|
|
32
31
|
if base[key].is_a?(Hash) && value.is_a?(Hash)
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
if !base[key].key?("$ref")
|
33
|
+
merge_schema!(base[key], value)
|
34
|
+
end
|
36
35
|
elsif base[key].is_a?(Array) && value.is_a?(Array)
|
37
36
|
# parameters need to be merged as if `name` and `in` were the Hash keys.
|
38
37
|
if key == 'parameters'
|
39
38
|
base[key] |= value
|
40
39
|
base[key].uniq! { |param| param.slice('name', 'in') }
|
40
|
+
else
|
41
|
+
base[key] = value
|
41
42
|
end
|
42
43
|
else
|
43
|
-
|
44
|
+
base[key] = value
|
44
45
|
end
|
45
46
|
end
|
46
47
|
base
|
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.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -49,7 +49,6 @@ files:
|
|
49
49
|
- ".github/workflows/test.yml"
|
50
50
|
- ".gitignore"
|
51
51
|
- ".rspec"
|
52
|
-
- ".travis.yml"
|
53
52
|
- CHANGELOG.md
|
54
53
|
- Gemfile
|
55
54
|
- LICENSE.txt
|