rspec-openapi 0.4.6 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f83672f313f4451abb668adf66697c74be2d0ad7866c6fbc433b2ef815e06419
4
- data.tar.gz: 696c074c32d5ec4f6dfc0f5ea2ab02f9123a4b88a8ce7d09a4c8aada60fe1b6f
3
+ metadata.gz: b35634b5756cb3719f38bdb5bbb501033b69472d0680615b5e1dcdba2251f41f
4
+ data.tar.gz: 6600c602466bf0ea6a468c22a2762c6717086ed2ee1ae89c4d132b7d5edc21cc
5
5
  SHA512:
6
- metadata.gz: 232765a27c157fdbb1bd479b14987d095c0fce190e3b76cc10a4f8f3b990c253456af15a79924be632daaf0d08254e934b9da00f24c9779f4f9c4531b3f36bae
7
- data.tar.gz: fbf0fb968a2d1afde12566cc472bb72a97b800101e60c640c1b7fa218a5563f993f48070532af6903c0cf1432a4142fd08235c1e9b6443847e5c2e4b6b22dfdb
6
+ metadata.gz: 13c6e8ad06467426186336d53a387e7e92207d5caf5c6838a076275674e3f334a490185cbf20d889f59b04160d6ec056b3030e35862217d6425f88ccef7fc97c
7
+ data.tar.gz: 4393d139ac38acd1ccf1b8404482671932b39491eed44ab69cbf57c28e06a186cdf452cb610b01377d2237f28ee4fe024fd43e28780b8662e8c76626be414332
@@ -15,11 +15,19 @@ jobs:
15
15
  strategy:
16
16
  fail-fast: false
17
17
  matrix:
18
- ruby:
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
@@ -1,3 +1,18 @@
1
+ ## v0.5.0
2
+
3
+ * Overwrite fields in an existing schema file instead of leaving all existing fields as is
4
+ [#55](https://github.com/k0kubun/rspec-openapi/pull/55)
5
+
6
+ ## v0.4.8
7
+
8
+ * Fix a bug in nested parameters handling
9
+ [#46](https://github.com/k0kubun/rspec-openapi/pull/46)
10
+
11
+ ## v0.4.7
12
+
13
+ * Add `info` config hash
14
+ [#43](https://github.com/k0kubun/rspec-openapi/pull/43)
15
+
1
16
  ## v0.4.6
2
17
 
3
18
  * Fix "No route matched for" error in engine routes
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in rspec-openapi.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rails', '6.0.3.2'
6
+ gem 'rails', ENV['RAILS_VERSION'] || '6.0.3.2'
7
7
  gem 'roda'
8
8
  gem 'rspec-rails'
9
9
 
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
 
@@ -126,6 +128,15 @@ RSpec::OpenAPI.enable_example = false
126
128
  # Change `info.version`
127
129
  RSpec::OpenAPI.application_version = '1.0.0'
128
130
 
131
+ # Set the info header details
132
+ RSpec::OpenAPI.info = {
133
+ description: 'My beautiful API',
134
+ license: {
135
+ 'name': 'Apache 2.0',
136
+ 'url': 'https://www.apache.org/licenses/LICENSE-2.0.html'
137
+ }
138
+ }
139
+
129
140
  # Set `headers` - generate parameters with headers for a request
130
141
  RSpec::OpenAPI.request_headers = %w[X-Authorization-Token]
131
142
 
@@ -20,10 +20,12 @@ RSpec.configuration.after(:suite) do
20
20
  title = File.basename(Dir.pwd)
21
21
  path_records.each do |path, records|
22
22
  RSpec::OpenAPI::SchemaFile.new(path).edit do |spec|
23
- RSpec::OpenAPI::SchemaMerger.reverse_merge!(spec, RSpec::OpenAPI::DefaultSchema.build(title))
23
+ schema = RSpec::OpenAPI::DefaultSchema.build(title)
24
+ schema[:info].merge!(RSpec::OpenAPI.info)
25
+ RSpec::OpenAPI::SchemaMerger.merge!(spec, schema)
24
26
  records.each do |record|
25
27
  begin
26
- RSpec::OpenAPI::SchemaMerger.reverse_merge!(spec, RSpec::OpenAPI::SchemaBuilder.build(record))
28
+ RSpec::OpenAPI::SchemaMerger.merge!(spec, RSpec::OpenAPI::SchemaBuilder.build(record))
27
29
  rescue StandardError, NotImplementedError => e # e.g. SchemaBuilder raises a NotImplementedError
28
30
  error_records[e] = record # Avoid failing the build
29
31
  end
@@ -158,9 +158,15 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
158
158
  def build_example(value)
159
159
  return nil if value.nil?
160
160
  value = value.dup
161
+ adjust_params(value)
162
+ end
163
+
164
+ def adjust_params(value)
161
165
  value.each do |key, v|
162
166
  if v.is_a?(ActionDispatch::Http::UploadedFile)
163
167
  value[key] = v.original_filename
168
+ elsif v.is_a?(Hash)
169
+ adjust_params(v)
164
170
  end
165
171
  end
166
172
  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 reverse_merge!(base, spec)
4
+ def merge!(base, spec)
5
5
  spec = normalize_keys(spec)
6
- deep_reverse_merge!(base, spec)
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 unlike an ordinary deep_reverse_merge
26
- # because a Hash-like structure may be an array whose Hash elements have a key name.
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 deep_reverse_merge!(base, spec)
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
- deep_reverse_merge!(base[key], value)
34
- elsif !base.key?(key)
35
- base[key] = value
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
- # no-op
44
+ base[key] = value
44
45
  end
45
46
  end
46
47
  base
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module OpenAPI
3
- VERSION = '0.4.6'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
data/lib/rspec/openapi.rb CHANGED
@@ -6,12 +6,13 @@ module RSpec::OpenAPI
6
6
  @comment = nil
7
7
  @enable_example = true
8
8
  @description_builder = -> (example) { example.description }
9
+ @info = {}
9
10
  @application_version = '1.0.0'
10
11
  @request_headers = []
11
12
  @server_urls = []
12
13
  @example_types = %i[request]
13
14
 
14
15
  class << self
15
- attr_accessor :path, :comment, :enable_example, :description_builder, :application_version, :request_headers, :server_urls, :example_types
16
+ attr_accessor :path, :comment, :enable_example, :description_builder, :info, :application_version, :request_headers, :server_urls, :example_types
16
17
  end
17
18
  end
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.6
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-03-24 00:00:00.000000000 Z
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
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.7.1
6
- before_install: gem install bundler -v 2.1.4