rspec-openapi 0.23.0 → 0.24.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: 9de2ab7b530ea8a400d157e5296b042e7a1988b84537a2def73007a169d530fe
4
- data.tar.gz: 4550f2cee402ccbd45c2722a8bac19550494e2822ea5344a09294ba06845901b
3
+ metadata.gz: df4214dc6ec5b88e9418ccc5e0c7cc86b69fbe90ec960faba1c48db8c5a5885d
4
+ data.tar.gz: f4de4de889d2e8df45173ce55c3e010e7838fa32b7f4af20435df7ba01b03868
5
5
  SHA512:
6
- metadata.gz: 9ad939c9bfc561a429838f5e6149c1cefbe7c6e1346c8d0cf95fd83fa7cbd55654c7dcb9d889d9fdb8f6eead6c35c6eb316d35445679ba6cabc3b8e7cc2a5022
7
- data.tar.gz: bac87ded3a5f9cbcbedf675b8a29e18ea53ec87f3abc396d56872279a6c88c879afcb09589db87796736b947cef34ef9b59af49e903e297c6aa0c4389f5b2465
6
+ metadata.gz: 908be0ef51bad71044644c4e3abaf6dccf54d712f489963afd4b7e05a4cdbfdb6848536ed1aa9004e38bf1b85f0ebe79da365368a7f0559f291aa29416e54040
7
+ data.tar.gz: 542c5ed74819337e5cddcd244792aab84084afc9a43e81cb2b73e3bbb8eff9056ed3b62f5354d4421a6c3490e8356b16366b22da30c317989efcce757e77d714
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
  inputs:
6
6
  version:
7
- description: 'Version to release (e.g. 0.23.1 or 0.24.0)'
7
+ description: 'Version to release (e.g. 0.24.1 or 0.25.0)'
8
8
  required: true
9
9
 
10
10
  jobs:
@@ -65,13 +65,61 @@ class << RSpec::OpenAPI::SchemaMerger = Object.new
65
65
 
66
66
  all_parameters = all_parameters.map do |parameter|
67
67
  base_parameter = unique_base_parameters[[parameter[:name], parameter[:in]]] || {}
68
- base_parameter ? base_parameter.merge(parameter) : parameter
68
+ if base_parameter.empty?
69
+ parameter
70
+ else
71
+ merge_parameter_with_schema(base_parameter, parameter)
72
+ end
69
73
  end
70
74
 
71
75
  all_parameters.uniq! { |param| param.slice(:name, :in) }
72
76
  base[key] = all_parameters
73
77
  end
74
78
 
79
+ def merge_parameter_with_schema(base_param, new_param)
80
+ base_schema = base_param[:schema]
81
+ new_schema = new_param[:schema]
82
+
83
+ # If schemas have different types, create a oneOf
84
+ if base_schema && new_schema && schemas_have_different_types?(base_schema, new_schema)
85
+ merged_schema = merge_schemas_into_one_of(base_schema, new_schema)
86
+ base_param.merge(new_param).merge(schema: merged_schema)
87
+ else
88
+ base_param.merge(new_param)
89
+ end
90
+ end
91
+
92
+ def schemas_have_different_types?(schema1, schema2)
93
+ # If either already has oneOf, we need to merge into it
94
+ return true if schema1[:oneOf] || schema2[:oneOf]
95
+
96
+ type1 = schema1[:type]
97
+ type2 = schema2[:type]
98
+
99
+ type1 && type2 && type1 != type2
100
+ end
101
+
102
+ def merge_schemas_into_one_of(base_schema, new_schema)
103
+ existing_types = extract_schema_types(base_schema)
104
+ new_types = extract_schema_types(new_schema)
105
+
106
+ all_types = existing_types + new_types
107
+ all_types.uniq!
108
+
109
+ # If only one type remains, return it directly
110
+ return all_types.first if all_types.size == 1
111
+
112
+ { oneOf: all_types }
113
+ end
114
+
115
+ def extract_schema_types(schema)
116
+ if schema[:oneOf]
117
+ schema[:oneOf].map { |s| s.reject { |k, _| k == :example } }
118
+ else
119
+ [schema.reject { |k, _| k == :example }]
120
+ end
121
+ end
122
+
75
123
  def build_unique_params(base, key)
76
124
  base[key].each_with_object({}) do |parameter, hash|
77
125
  hash[[parameter[:name], parameter[:in]]] = parameter
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module OpenAPI
5
- VERSION = '0.23.0'
5
+ VERSION = '0.24.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.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
@@ -112,7 +112,7 @@ licenses:
112
112
  metadata:
113
113
  homepage_uri: https://github.com/exoego/rspec-openapi
114
114
  source_code_uri: https://github.com/exoego/rspec-openapi
115
- changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.23.0
115
+ changelog_uri: https://github.com/exoego/rspec-openapi/releases/tag/v0.24.0
116
116
  rubygems_mfa_required: 'true'
117
117
  rdoc_options: []
118
118
  require_paths: