class Bosh::Director::Jobs::Helpers::DeepHashReplacement

Public Class Methods

replacement_map(obj) click to toggle source
# File lib/bosh/director/jobs/helpers/deep_hash_replacement.rb, line 6
def self.replacement_map(obj)
  result = []
  create_replacement_map(result, obj)

  result
end

Private Class Methods

create_replacement_map(result, obj, path = nil) click to toggle source
# File lib/bosh/director/jobs/helpers/deep_hash_replacement.rb, line 15
def self.create_replacement_map(result, obj, path = nil)
  if obj.is_a? Array
    obj.each_with_index do |item, index|
      new_path = path.nil? ? [] : Bosh::Common::DeepCopy.copy(path)
      new_path << index
      create_replacement_map(result, item, new_path)
    end
  elsif obj.is_a? Hash
    obj.each do |key, value|
      new_path = path.nil? ? [] : Bosh::Common::DeepCopy.copy(path)
      new_path << key
      create_replacement_map(result, value, new_path)
    end
  else
    path ||= []
    if obj.to_s.match(/^\(\(.*\)\)$/)
      key_name = obj.gsub(/(^\(\(|\)\)$)/, '')
      result << {'key' => key_name, 'path' => path}
    end
  end
end