Class: Traductor::KeyFlattener

Inherits:
Object
  • Object
show all
Defined in:
lib/traductor/key_flattener.rb

Class Method Summary collapse

Class Method Details

.flatten(hash, prefix = nil) ⇒ Object

Converts a nested hash to flat dot-notation key-value pairs.

{"users" => {"greeting" => "Hello %{name}"}}
=> {"users.greeting" => "Hello %{name}"}


10
11
12
13
14
15
16
17
18
19
# File 'lib/traductor/key_flattener.rb', line 10

def self.flatten(hash, prefix = nil)
  hash.each_with_object({}) do |(key, value), result|
    full_key = [prefix, key].compact.join(".")
    if value.is_a?(Hash)
      result.merge!(flatten(value, full_key))
    else
      result[full_key] = value
    end
  end
end

.unflatten(hash) ⇒ Object

Converts flat dot-notation key-value pairs back to a nested hash.

{"users.greeting" => "Hola %{name}"}
=> {"users" => {"greeting" => "Hola %{name}"}}


26
27
28
29
30
31
32
33
34
35
36
# File 'lib/traductor/key_flattener.rb', line 26

def self.unflatten(hash)
  hash.each_with_object({}) do |(key, value), result|
    parts = key.split(".")
    current = result
    parts[0..-2].each do |part|
      current[part] ||= {}
      current = current[part]
    end
    current[parts.last] = value
  end
end