vaguerent/lib/vagrant/util/scoped_hash_override.rb

48 lines
1.2 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
module Vagrant
module Util
# This allows for hash options to be overridden by a scope key
# prefix. An example speaks best here. Imagine the following hash:
#
# original = {
# id: "foo",
# mitchellh__id: "bar",
# mitchellh__other: "foo"
# }
#
# scoped = scoped_hash_override(original, "mitchellh")
#
# scoped == {
# id: "bar",
# other: "foo"
# }
#
module ScopedHashOverride
def scoped_hash_override(original, scope)
# Convert the scope to a string in case a symbol was given since
# we use string comparisons for everything.
scope = scope.to_s
# Shallow copy the hash for the result
result = original.dup
original.each do |key, value|
parts = key.to_s.split("__", 2)
# If we don't have the proper parts, then bail
next if parts.length != 2
# If this is our scope, then override
if parts[0] == scope
result[parts[1].to_sym] = value
end
end
result
end
end
end
end