# 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! self.each_pair do |k,v| value = delete(k) self[k.to_sym] = value_or_symbolize_value(value) end self 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