Sha256: 556fcd3f012d6ea8b85049de5820b0229d0b2d83ede90d7e8fc25be0c5df1773
Contents?: true
Size: 943 Bytes
Versions: 27
Compression:
Stored size: 943 Bytes
Contents
class << RSpec::OpenAPI::SchemaMerger = Object.new # @param [Hash] base # @param [Hash] spec def reverse_merge!(base, spec) spec = normalize_keys(spec) deep_reverse_merge!(base, spec) end private 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 # 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? 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 end end base end end
Version data entries
27 entries across 27 versions & 1 rubygems