rspec-openapi 0.21.4 → 0.21.5

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: 10130361a7c2ee93e28be624decd6662215eaeb981a28981f02e5f1c95e82559
4
- data.tar.gz: f32bbbe9f13c4a2b454ba4138b7c4825ca582f2ad32af73318c0a9c0c3d81147
3
+ metadata.gz: b35d6193603f213ab605629e833a56827da2cc4071a9bde884ed7f67ae257946
4
+ data.tar.gz: d3f5d1b55e242ccde842aca000aebdcff950fac29d11197cdd2002bedd9f6976
5
5
  SHA512:
6
- metadata.gz: ad8029bb23d7c9ec5b2a6c6898d82b906a061806e93912b166e6ab6b5464263dc936a3bbe86e821eea01a3d60e49f379327a966d8d1986e99258997f9132823e
7
- data.tar.gz: 310ab5b4ff9b5a63555881679e77f0e1e829d3e1b296df79170db0915441bb70f5c8ebc553444574c93de80e6a7f510c2f26622c9df1052848dfc789df87d1f6
6
+ metadata.gz: c30cc46860494d67aed4b1eb9ea11db58b77bbfec31f3d1fef1f0723aad7a16775ed30f4b874331eec6ed26a3238522f8ee018d0ae252fe769a78de3b6b5eb46
7
+ data.tar.gz: e50cf253d00c8d4c11d6abe1793c32b8a5eec594dca37d8fdeb48969a3e4c13c79b40e8a034f3ca0f4cec2909e0c48d5d8082131c9109ffe9015ddc0ec5bdf75
@@ -273,7 +273,6 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
273
273
  unique_types = property_variations.map { |p| p[:type] }.compact.uniq
274
274
 
275
275
  if unique_types.size > 1
276
- # Different types detected - create oneOf
277
276
  unique_props = property_variations.map { |p| p.reject { |k, _| k == :nullable } }.uniq
278
277
  merged_schema[:properties][key] = { oneOf: unique_props }
279
278
  else
@@ -315,7 +314,9 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
315
314
  nullable_only = all_prop_variations.select { |p| p && p.keys == [:nullable] }
316
315
  prop_variations = all_prop_variations.select { |p| p && p.keys != [:nullable] }.compact
317
316
 
318
- has_nullable = all_prop_variations.any?(&:nil?) || nullable_only.any?
317
+ has_nullable = all_prop_variations.any? do |v|
318
+ v.nil? || (v.is_a?(Hash) && v[:nullable] == true)
319
+ end || nullable_only.any?
319
320
 
320
321
  if prop_variations.empty? && has_nullable
321
322
  merged[:properties][key] = { nullable: true }
@@ -324,8 +325,21 @@ class << RSpec::OpenAPI::SchemaBuilder = Object.new
324
325
  merged[:properties][key][:nullable] = true if has_nullable
325
326
  elsif prop_variations.size > 1
326
327
  prop_types = prop_variations.map { |p| p[:type] }.compact.uniq
327
-
328
- if prop_types.size == 1
328
+ has_one_of = prop_variations.any? { |p| p.key?(:oneOf) }
329
+
330
+ if has_one_of
331
+ all_options = []
332
+ prop_variations.each do |prop|
333
+ clean_prop = prop.reject { |k, _| k == :nullable }
334
+ if clean_prop.key?(:oneOf)
335
+ all_options.concat(clean_prop[:oneOf])
336
+ else
337
+ all_options << clean_prop unless clean_prop.empty?
338
+ end
339
+ end
340
+ all_options.uniq!
341
+ merged[:properties][key] = { oneOf: all_options }
342
+ elsif prop_types.size == 1
329
343
  # Only recursively merge if it's an object type
330
344
  merged[:properties][key] = if prop_types.first == 'object'
331
345
  build_merged_schema_from_variations(prop_variations)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module OpenAPI
5
- VERSION = '0.21.4'
5
+ VERSION = '0.21.5'
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.21.4
4
+ version: 0.21.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
@@ -110,7 +110,7 @@ licenses:
110
110
  metadata:
111
111
  homepage_uri: https://github.com/exoego/rspec-openapi
112
112
  source_code_uri: https://github.com/exoego/rspec-openapi
113
- changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.21.4
113
+ changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.21.5
114
114
  rubygems_mfa_required: 'true'
115
115
  rdoc_options: []
116
116
  require_paths: