Module: Vagrant::Util::ScopedHashOverride

Included in:
Action::Builtin::MixinSyncedFolders
Defined in:
lib/vagrant/util/scoped_hash_override.rb

Overview

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"
}

Instance Method Summary collapse

Instance Method Details

#scoped_hash_override(original, scope) ⇒ Object


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/vagrant/util/scoped_hash_override.rb', line 20

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