How to get “x[y][z]” out of a hash ?
This made life with our form helpers a lot easier, since they take normal or nested keys <-> name of the input and prefilled value through params.
Any alternative is appreciated, since its pretty complex/hacky, the name is weird too …
(a simple to_query.split(‘=’)).inject… can work too, but would stringify all values and keys)
Usage
{'x'=>{'y'=>{'z'=>1}}}.value_from_nested_key('x[y][z]') == 1
Code
class Hash
# {'x'=>{'y'=>{'z'=>1}}.value_from_nested_key('x[y][z]') => 1
def value_from_nested_key(key)
if key.to_s.include?('[')
match, first, nesting = key.to_s.match(/(.+?)\[(.*)\]/).to_a
value = self[first]
nesting.split('][').each do |part|
return nil unless value.is_a?(Hash)
value = value[part]
end
value
else
self[key]
end
end
end