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 +4 -4
- data/.github/workflows/create_release.yml +1 -1
- data/lib/rspec/openapi/schema_merger.rb +49 -1
- data/lib/rspec/openapi/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: df4214dc6ec5b88e9418ccc5e0c7cc86b69fbe90ec960faba1c48db8c5a5885d
|
|
4
|
+
data.tar.gz: f4de4de889d2e8df45173ce55c3e010e7838fa32b7f4af20435df7ba01b03868
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 908be0ef51bad71044644c4e3abaf6dccf54d712f489963afd4b7e05a4cdbfdb6848536ed1aa9004e38bf1b85f0ebe79da365368a7f0559f291aa29416e54040
|
|
7
|
+
data.tar.gz: 542c5ed74819337e5cddcd244792aab84084afc9a43e81cb2b73e3bbb8eff9056ed3b62f5354d4421a6c3490e8356b16366b22da30c317989efcce757e77d714
|
|
@@ -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
|
-
|
|
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
|
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.
|
|
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.
|
|
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:
|