Module: Vagrant::Util::ScopedHashOverride

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
42
# 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
      result.delete(key)
    end
  end

  result
end