rspec-openapi 0.30.1 → 0.32.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac25084c38b7c495cf2197cfa26341339d3ea7bb6326a6d23fa35a41d4f1091b
4
- data.tar.gz: 14b30d2bbb595dc55ffd5252b37e4ba3ce6a6fab6c7c38a1ddbe6aa3c4afb329
3
+ metadata.gz: 64afa135a6f5a64d96bf01dbf50457b98964a0875a21f0e85c159dc16cbd6a11
4
+ data.tar.gz: '048bab9ffc8d6c6876a3c2aeb03e7cf68ba992db9da6953d50dfef9106fe5acd'
5
5
  SHA512:
6
- metadata.gz: 96cb0d669e6091b46ec82d86f69f427b3790ce390e73a6c1d654e46a59e70f615a394490abbefae0757fde329b1ab5d65cb392900f64a97b5769c7663da1e9a3
7
- data.tar.gz: ec43dcd03bb3ff4444aa3a5cafd20bd4af26151717db730c7a36b9c25ede0aae95033b99fd3a52f20d38ca7f9c9abeb0d59871d534ed0461ae6663318e29270c
6
+ metadata.gz: 9967fb54526fc7d743f4ba7d1de62c5a65b8a47ccc4350a55c575eef27d38110dfcc4ff2614fc02664d4eb622fb302422e1352cc2bbdb28e955989bc051609b7
7
+ data.tar.gz: b407e68dee10bf81a9b4ced14e8b767ce9099fd3ebedbecb67f43fd0f994fb06fb10868b422ba0fef9c6d4bbeaca2c06db5f58758f8ac09953c608949a6574ff
data/README.md CHANGED
@@ -897,7 +897,7 @@ responses:
897
897
  '400': { ... }
898
898
  ```
899
899
 
900
- Mixing `:single` (some tests) with `:multiple` (others) on the same endpoint also works for `requestBody` -
900
+ Mixing `:single` (some tests) with `:multiple` (others) on the same endpoint also works for `requestBody` -
901
901
  the merger up-converts the singular `example:` into the `examples:` map automatically
902
902
  (see [Merge Behavior with Mixed Modes](#merge-behavior-with-mixed-modes) below).
903
903
 
@@ -997,7 +997,7 @@ Existing RSpec plugins which have OpenAPI integration:
997
997
  ## Acknowledgements
998
998
 
999
999
  * Heavily inspired by [r7kamura/autodoc](https://github.com/r7kamura/autodoc)
1000
- * Orignally created by [k0kubun](https://github.com/k0kubun) and the ownership was transferred
1000
+ * Originally created by [k0kubun](https://github.com/k0kubun) and the ownership was transferred
1001
1001
  to [exoego](https://github.com/exoego) in 2022-11-29.
1002
1002
 
1003
1003
  ## Releasing
@@ -79,8 +79,19 @@ class << RSpec::OpenAPI::RecordBuilder = Object.new
79
79
  # because ActionController::ParamsWrapper overwrites request_parameters
80
80
  def raw_request_params(request)
81
81
  original = request.delete_header('action_dispatch.request.request_parameters')
82
- request.request_parameters
82
+ unwrap_json_root(request.request_parameters)
83
83
  ensure
84
84
  request.set_header('action_dispatch.request.request_parameters', original)
85
85
  end
86
+
87
+ # Rails' default JSON parser wraps a body that isn't a Hash - a top-level array,
88
+ # string, number, and so on - as `{ _json: <body> }`, so `request_parameters`
89
+ # stops reflecting what the client actually sent.
90
+ # See ActionDispatch::Http::Parameters::DEFAULT_PARSERS
91
+ def unwrap_json_root(params)
92
+ return params unless params.is_a?(Hash) && params.size == 1
93
+
94
+ key, value = params.first
95
+ key.to_s == '_json' ? value : params
96
+ end
86
97
  end
@@ -303,7 +303,7 @@ class << RSpec::OpenAPI::SchemaBuilder
303
303
  def build_example(value)
304
304
  return nil if value.nil?
305
305
 
306
- adjust_params(value.dup)
306
+ adjust_value(value.dup)
307
307
  end
308
308
 
309
309
  def adjust_params(hash)
@@ -331,10 +331,9 @@ class << RSpec::OpenAPI::SchemaBuilder
331
331
  alias normalize_content_disposition normalize_content_type
332
332
 
333
333
  def build_array_items_schema(array, ctx)
334
- return {} if array.empty?
335
-
336
334
  schemas = array.map { |item| build_property(item, ctx) }
337
- return schemas.first if schemas.size == 1 || !array.all?(Hash)
335
+ return schemas.first if schemas.size == 1
336
+ return merge_non_object_item_variations(schemas) unless array.all?(Hash)
338
337
 
339
338
  merged = schemas.first.dup
340
339
  merged[:properties] = merge_property_variations(schemas, allow_recursive_merge: false)
@@ -342,9 +341,16 @@ class << RSpec::OpenAPI::SchemaBuilder
342
341
  merged
343
342
  end
344
343
 
345
- def build_merged_schema_from_variations(variations)
346
- return {} if variations.empty?
344
+ def merge_non_object_item_variations(schemas)
345
+ nullable_only = ->(schema) { schema.keys == [:nullable] }
346
+ typed = schemas.reject(&nullable_only)
347
+
348
+ merged = typed.size == 1 ? typed.first.dup : merge_multi(typed)
349
+ merged[:nullable] = true if schemas.any?(&nullable_only) && merged.is_a?(Hash)
350
+ merged
351
+ end
347
352
 
353
+ def build_merged_schema_from_variations(variations)
348
354
  # Drop empty `{}` schemas (e.g. items of an empty array) — they carry no
349
355
  # type info and would otherwise spuriously mark every property of their
350
356
  # populated siblings as nullable via the missing-key nullable rule.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module OpenAPI
5
- VERSION = '0.30.1'
5
+ VERSION = '0.32.0'
6
6
  end
7
7
  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.30.1
4
+ version: 0.32.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
@@ -97,7 +97,7 @@ licenses:
97
97
  metadata:
98
98
  homepage_uri: https://github.com/exoego/rspec-openapi
99
99
  source_code_uri: https://github.com/exoego/rspec-openapi
100
- changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.30.1
100
+ changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.32.0
101
101
  rubygems_mfa_required: 'true'
102
102
  rdoc_options: []
103
103
  require_paths:
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
115
  requirements: []
116
- rubygems_version: 4.0.10
116
+ rubygems_version: 4.0.16
117
117
  specification_version: 4
118
118
  summary: Generate OpenAPI schema from RSpec request specs
119
119
  test_files: []