Skip to content

Commit 2ee508c

Browse files
committed
simplify
1 parent 91ffffe commit 2ee508c

File tree

2 files changed

+7
-37
lines changed

2 files changed

+7
-37
lines changed

lib/rspec/openapi/schema_builder.rb

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,6 @@ def build_array_items_schema(array, record: nil)
278278
else
279279
merged_schema[:properties][key] = property_variations.first.dup
280280
end
281-
else
282-
unique_schemas = property_variations.map { |p| p.reject { |k, _| k == :nullable } }.uniq
283-
merged_schema[:properties][key] = { oneOf: unique_schemas }
284281
end
285282

286283
merged_schema[:properties][key][:nullable] = true if property_variations.size < all_schemas.size
@@ -364,34 +361,13 @@ def merge_object_schemas(schema1, schema2)
364361
def merge_property_schemas(prop1, prop2)
365362
return prop1 unless prop2.is_a?(Hash) && prop1.is_a?(Hash)
366363

367-
if prop1[:oneOf] || prop2[:oneOf] || (prop1[:type] && prop2[:type] && prop1[:type] != prop2[:type])
368-
schemas = []
369-
370-
[prop1, prop2].each do |prop|
371-
if prop[:oneOf]
372-
prop[:oneOf].each do |schema|
373-
schemas.concat(schema[:oneOf] || [schema])
374-
end
375-
elsif prop[:type]
376-
schemas << prop.reject { |k, _| k == :nullable }
377-
end
378-
end
379-
380-
schemas = schemas.uniq
381-
382-
merged = schemas.size == 1 ? schemas.first.dup : { oneOf: schemas }
383-
merged[:nullable] = true if prop1[:nullable] || prop2[:nullable]
384-
return merged
385-
end
386-
387364
merged = prop1.dup
365+
366+
# If either property is nullable, the merged property should be nullable
388367
merged[:nullable] = true if prop2[:nullable] && !prop1[:nullable]
389368

390-
if prop1[:type] == 'array' && prop2[:type] == 'array'
391-
merged[:items] = merge_property_schemas(prop1[:items], prop2[:items]) if prop1[:items] && prop2[:items]
392-
elsif prop1[:type] == 'object' && prop2[:type] == 'object'
393-
merged = merge_object_schemas(prop1, prop2)
394-
end
369+
# If both are objects, recursively merge their properties
370+
merged = merge_object_schemas(prop1, prop2) if prop1[:type] == 'object' && prop2[:type] == 'object'
395371

396372
merged
397373
end

lib/rspec/openapi/schema_merger.rb

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,11 @@ def merge_closest_match!(options, spec)
7777

7878
return if option&.key?(:$ref)
7979

80+
return if spec[:oneOf]
81+
8082
if score.to_f > SIMILARITY_THRESHOLD
8183
merge_schema!(option, spec)
82-
elsif spec[:oneOf]
83-
spec[:oneOf].each do |schema|
84-
if schema[:oneOf]
85-
merge_closest_match!(options, schema)
86-
elsif options.none? { |opt| opt == schema }
87-
options.push(schema)
88-
end
89-
end
90-
elsif options.none? { |opt| opt == spec }
84+
else
9185
options.push(spec)
9286
end
9387
end

0 commit comments

Comments
 (0)