Hashオブジェクトのキー変換

Railsでアプリケーションを作っていると、Hashオブジェクトのキーをシンボルで扱うことが多いので、わざわざキーを文字列からシンボルに変換して統一することがあります。
でも、Hashオブジェクトがネストしたりしていると、このキーの変換処理がとても煩雑になってしまいます。
そこで、次のようにHashクラスを拡張して、登録されているキーをシンボルに一括変換できるようにしています(速度に関しては、あまり考慮していません...)。

Hash.class_eval {

 # This method need not be defined if using rails.
 def symbolize_keys
   inject({}){ |result, (k, v)|
     result.update(k.to_sym => v)
   }
 end

 def symbolize_deep_keys
   hash = symbolize_keys
   hash.each {|k, v|
     case v.class.name
     when 'Hash'
       hash[k] = v.symbolize_deep_keys
     when 'Array'
       rec = Proc.new {|list|
         list.map {|item|
           case item.class.name
           when 'Hash'
             item.symbolize_deep_keys
           when 'Array'
             rec.call(item)
           else
             item
           end
         }
       }
       hash[k] = rec.call(v)
     end
   }
   hash
 end

}

Rubyオープンクラスは賛否両論あるようですが、私は「変更・拡張した方が自然」と思った時は、どんどん既存のクラスをカスタマイズする方です。