Skip to content

Instantly share code, notes, and snippets.

@rodrei
Created July 12, 2011 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rodrei/1078545 to your computer and use it in GitHub Desktop.
Save rodrei/1078545 to your computer and use it in GitHub Desktop.
Hash class with flatten method added
class FlatteableHash
def flatten(ancestor_names = [])
flat_hash = {}
each do |key, value|
names = Array.new(ancestor_names)
names << key
if value.is_a?(Hash)
value = FlatteableHash.new(value)
flat_hash.merge!(value.flatten(names))
else
flat_key = names.shift.to_s.dup
names.each do |name|
flat_key << "[#{name}]"
end
if value.is_a?(Array)
value.each_with_index do |array_val, i|
array_names = names + [flat_key + "[#{i}]"]
array_val = FlatteableHash.new(array_val)
flat_hash.merge!(array_val.flatten(array_names))
end
else
flat_hash[flat_key] = value
end
end
end
flat_hash
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment