@@ -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
0 commit comments