Class: StTools::Common

Inherits:
Object
  • Object
show all
Defined in:
lib/st_tools/common.rb

Class Method Summary collapse

Class Method Details

.flatten_hash(hash) ⇒ Hash

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

Parameters:

  • hash (Hash)

    для перевода ключей в плоский вид, разделенный точками

Returns:

  • (Hash)

    возвращается одномерная Hash-структура вида “key.subkey.subsubkey” => value



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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