Cómo simbolizar elegantemente_keys para un hash 'anidado'

Considere el siguiente código:

  hash1 = {"one" => 1, "two" => 2, "three" => 3}
  hash2 = hash1.reduce({}){ |h, (k,v)| h.merge(k => hash1) }
  hash3 = hash2.reduce({}){ |h, (k,v)| h.merge(k => hash2) }
  hash4 = hash3.reduce({}){ |h, (k,v)| h.merge(k => hash3) }

hash4 es un hash 'anidado', es decir, un hash con claves de cadena y valores hash similares 'anidados'.

El método 'symbolize_keys' para Hash en Rails nos permite convertir fácilmente las teclas de cadena en símbolos. Pero estoy buscando unelegante forma de convertir todas las claves (claves principales más claves de todos los hashes dentro de hash4) en símbolos.

El punto es salvarme de mi (imo) solución fea:

  class Hash
    def symbolize_keys_and_hash_values
      symbolize_keys.reduce({}) do |h, (k,v)|
        new_val = v.is_a?(Hash) ? v.symbolize_keys_and_hash_values : v
        h.merge({k => new_val})
      end
    end
  end

  hash4.symbolize_keys_and_hash_values #=> desired result

FYI: la configuración es Rails 3.2.17 y Ruby 2.1.1

Actualizar:

La respuesta eshash4.deep_symbolize_keys para rieles <= 5.0

La respuesta esJSON.parse(JSON[hash4], symbolize_names: true) para rieles> 5

Respuestas a la pregunta(6)

Su respuesta a la pregunta