Skip to content

Instantly share code, notes, and snippets.

@jamesdaniels
Created December 17, 2009 07:50
Show Gist options
  • Save jamesdaniels/258607 to your computer and use it in GitHub Desktop.
Save jamesdaniels/258607 to your computer and use it in GitHub Desktop.
I use this on about all of my projects, a really great way to cleanup hashes. Especially useful for hashes loaded from yaml.
class Hash
def symbolize_keys
inject({}) do |options, (key, value)|
options[(key.to_sym rescue key) || key] = value
options
end
end
def recursive_symbolize_keys
inject({}){|result, (key, value)|
new_key = case key
when String then key.to_sym
else key
end
new_value = case value
when Hash then value.recursive_symbolize_keys
when Array then value.recursive_symbolize_keys
else value
end
result[new_key] = new_value
result
}
end
end
class Array
def recursive_symbolize_keys
inject([]){|result, value|
result << case value
when Hash then value.recursive_symbolize_keys
when Array then value.recursive_symbolize_keys
else value
end
result
}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment