# Copyright (C) 2011 AMEE UK Ltd. - http://www.amee.com
# Released as Open Source Software under the BSD 3-Clause license. See LICENSE.txt for details.
# :title: Class: Hash
class Hash
# Return a new instance of Hash which represents the same data as
# self but with all keys - including those of sub-hashes - symbolized
#
def recursive_symbolize_keys
new_hash = {}
self.each_pair do |k,v|
new_hash[k.to_sym] = value_or_symbolize_value(v)
end
new_hash
end
# Modify self in place, transforming all keys - including those of
# sub-hashes - in to symbols
#
def recursive_symbolize_keys!
items = {}
self.each_pair do |k,v|
value = delete(k)
items[k] = value_or_symbolize_value(value)
end
items
end
private
# Symbolize any hash key or sub-hash key containing within value.
def value_or_symbolize_value(value)
if value.is_a? Hash
return value.recursive_symbolize_keys
elsif value.is_a? Array
return value.map { |elem| value_or_symbolize_value(elem) }
else
return value
end
end
end