Class: ChefUtils::Mash

Inherits:
Hash
  • Object
show all
Defined in:
lib/chef-utils/mash.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(constructor = {}) ⇒ Mash

Returns a new instance of Mash.

Parameters:

  • constructor (Object) (defaults to: {})

    The default value for the mash. Defaults to an empty hash.



61
62
63
64
65
66
67
68
# File 'lib/chef-utils/mash.rb', line 61

def initialize(constructor = {})
  if constructor.is_a?(Hash)
    super()
    update(constructor)
  else
    super(constructor)
  end
end

Class Method Details

.from_hash(hash) ⇒ Mash

The input Hash’s default value is maintained

Returns:

  • (Mash)

    Convert a Hash into a Mash



227
228
229
230
231
# File 'lib/chef-utils/mash.rb', line 227

def self.from_hash(hash)
  mash = Mash.new(hash)
  mash.default = hash.default
  mash
end

Instance Method Details

#[](key) ⇒ Object

Parameters:

  • key (Object)

    The key to get.



118
119
120
# File 'lib/chef-utils/mash.rb', line 118

def [](key)
  regular_reader(key)
end

#[]=(key, value) ⇒ Object

Parameters:

  • key (Object)

    The key to set.

  • value (Object)

    The value to set the key to.

See Also:

  • #convert_key
  • #convert_value


128
129
130
# File 'lib/chef-utils/mash.rb', line 128

def []=(key, value)
  regular_writer(convert_key(key), convert_value(value))
end

#default(key = nil) ⇒ Object

Parameters:

  • key (Object) (defaults to: nil)

    The default value for the mash. Defaults to nil.



89
90
91
92
93
94
95
# File 'lib/chef-utils/mash.rb', line 89

def default(key = nil)
  if key.is_a?(Symbol) && include?(key = key.to_s)
    self[key]
  else
    super
  end
end

#delete(key) ⇒ Object

Parameters:

  • key (Object)

    The key to delete from the mash.\



193
194
195
# File 'lib/chef-utils/mash.rb', line 193

def delete(key)
  super(convert_key(key))
end

#except(*keys) ⇒ Mash

Returns A new mash without the selected keys.

Examples:

{ :one => 1, :two => 2, :three => 3 }.except(:one)
  #=> { "two" => 2, "three" => 3 }

Parameters:

  • *rejected (Array[(String, Symbol)] The mash keys to exclude.)

    rejected<Array[(String, Symbol)] The mash keys to exclude.

Returns:

  • (Mash)

    A new mash without the selected keys.



204
205
206
# File 'lib/chef-utils/mash.rb', line 204

def except(*keys)
  super(*keys.map { |k| convert_key(k) })
end

#fetch(key, *extras) ⇒ Object

Returns The value at key or the default value.

Parameters:

  • key (Object)

    The key to fetch. This will be run through convert_key.

  • *extras (Array)

    Default value.

Returns:

  • (Object)

    The value at key or the default value.



172
173
174
# File 'lib/chef-utils/mash.rb', line 172

def fetch(key, *extras)
  super(convert_key(key), *extras)
end

#initialize_copy(orig) ⇒ Object

Returns A new copied Mash.

Parameters:

  • orig (Object)

    Mash being copied

Returns:

  • (Object)

    A new copied Mash



73
74
75
76
77
78
79
80
81
82
# File 'lib/chef-utils/mash.rb', line 73

def initialize_copy(orig)
  super
  # Handle nested values
  each do |k, v|
    if v.is_a?(Mash) || v.is_a?(Array)
      self[k] = v.dup
    end
  end
  self
end

#internal_get(key) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

internal API for use by Chef’s deep merge cache



134
135
136
# File 'lib/chef-utils/mash.rb', line 134

def internal_get(key)
  regular_reader(key)
end

#internal_set(key, value) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

internal API for use by Chef’s deep merge cache



140
141
142
# File 'lib/chef-utils/mash.rb', line 140

def internal_set(key, value)
  regular_writer(key, convert_value(value))
end

#key?(key) ⇒ Boolean Also known as: include?, has_key?, member?

Returns True if the key exists in the mash.

Parameters:

  • key (Object)

    The key to check for. This will be run through convert_key.

Returns:

  • (Boolean)

    True if the key exists in the mash.



159
160
161
# File 'lib/chef-utils/mash.rb', line 159

def key?(key)
  super(convert_key(key))
end

#merge(hash) ⇒ Mash

Returns A new mash with the hash values merged in.

Parameters:

  • hash (Hash)

    The hash to merge with the mash.

Returns:

  • (Mash)

    A new mash with the hash values merged in.



187
188
189
# File 'lib/chef-utils/mash.rb', line 187

def merge(hash)
  dup.update(hash)
end

#regular_deleteObject



114
# File 'lib/chef-utils/mash.rb', line 114

alias_method :regular_delete, :delete

#regular_readerObject



98
# File 'lib/chef-utils/mash.rb', line 98

alias_method :regular_reader, :[]

#regular_updateObject



106
# File 'lib/chef-utils/mash.rb', line 106

alias_method :regular_update, :update

#regular_writerObject



102
# File 'lib/chef-utils/mash.rb', line 102

alias_method :regular_writer, :[]=

#stringify_keys!Mash

Used to provide the same interface as Hash.

Returns:

  • (Mash)

    This mash unchanged.



211
# File 'lib/chef-utils/mash.rb', line 211

def stringify_keys!; self end

#symbolize_keysHash

Returns The mash as a Hash with symbolized keys.

Returns:

  • (Hash)

    The mash as a Hash with symbolized keys.



214
215
216
217
218
# File 'lib/chef-utils/mash.rb', line 214

def symbolize_keys
  h = Hash.new(default)
  each { |key, val| h[key.to_sym] = val }
  h
end

#to_hashHash

Returns The mash as a Hash with string keys.

Returns:

  • (Hash)

    The mash as a Hash with string keys.



221
222
223
# File 'lib/chef-utils/mash.rb', line 221

def to_hash
  Hash.new(default).merge(self)
end

#update(other_hash) ⇒ Mash Also known as: merge!

Returns The updated mash.

Parameters:

  • other_hash (Hash)

    A hash to update values in the mash with. The keys and the values will be converted to Mash format.

Returns:

  • (Mash)

    The updated mash.



149
150
151
152
# File 'lib/chef-utils/mash.rb', line 149

def update(other_hash)
  other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
  self
end

#values_at(*indices) ⇒ Array

Returns The values at each of the provided keys.

Parameters:

  • *indices (Array)

    The keys to retrieve values for. These will be run through convert_key.

Returns:

  • (Array)

    The values at each of the provided keys



180
181
182
# File 'lib/chef-utils/mash.rb', line 180

def values_at(*indices)
  indices.collect { |key| self[convert_key(key)] }
end