class StTools::Common

Public Class Methods

flatten_hash(hash) click to toggle source

Функция переводит хеши с несколькими уровнями вложения в плоский хэш, в котором глубина структуры заменяется ключами, разделенными точкой. За основу взят не-рекурсивный алгоритм отсюда: gist.github.com/lucabelmondo/4161211

@param [Hash] hash для перевода ключей в плоский вид, разделенный точками @return [Hash] возвращается одномерная Hash-структура вида “key.subkey.subsubkey” => value

# File lib/st_tools/common.rb, line 10
def self.flatten_hash(hash)
  result_iter = {}
  paths = hash.keys.map { |key| [key] }

  until paths.empty?
    path = paths.shift
    value = hash
    path.each { |step| value = value[step] }

    if value.respond_to?(:keys)
      value.keys.each { |key| paths << path + [key] }
    else
      result_iter[path.join(".")] = value
    end
  end

  result_iter
end