module RSpec::OpenAPI::SchemaMerger
Public Class Methods
reverse_merge!(base, spec)
click to toggle source
@param [Hash] base @param [Hash] spec
# File lib/rspec/openapi/schema_merger.rb, line 4 def reverse_merge!(base, spec) spec = normalize_keys(spec) deep_reverse_merge!(base, spec) end
Private Class Methods
deep_reverse_merge!(base, spec)
click to toggle source
Not doing `base.replace(deep_merge(base, spec))` to preserve key orders TODO: Perform more intelligent merges like rerouting edits / merging types Should we probably force-merge `summary` regardless of manual modifications?
# File lib/rspec/openapi/schema_merger.rb, line 27 def deep_reverse_merge!(base, spec) spec.each do |key, value| if base[key].is_a?(Hash) && value.is_a?(Hash) deep_reverse_merge!(base[key], value) elsif !base.key?(key) base[key] = value elsif base[key].is_a?(Array) && value.is_a?(Array) if key == "parameters" # merge arrays base[key] |= value end else # no-op end end base end
normalize_keys(spec)
click to toggle source
# File lib/rspec/openapi/schema_merger.rb, line 11 def normalize_keys(spec) case spec when Hash spec.map do |key, value| [key.to_s, normalize_keys(value)] end.to_h when Array spec.map { |s| normalize_keys(s) } else spec end end