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

Version Path
rspec-openapi-0.3.17 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.16 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.15 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.14 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.13 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.12 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.11 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.10 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.9 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.8 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.7 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.6 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.5 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.4 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.3 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.2 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.1 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.3.0 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.2.2 lib/rspec/openapi/schema_merger.rb
rspec-openapi-0.2.1 lib/rspec/openapi/schema_merger.rb