Ruby Hashのkeyをsymbolに変換する
hashの中のarrayの中にもhashがあったときの事を考えて書きました。
config/initializers/hash.rb
class Hash def keys_to_sym each_with_object({}) do |(k, v), hash| hash[k.to_sym] = v.respond_to?(:keys_to_sym) ? v.keys_to_sym : v end end end
config/initializers/array.rb
class Array def keys_to_sym map{|v| v.respond_to?(:keys_to_sym) ? v.keys_to_sym : v } end end
pryで実行
[1] pry(main)> [:s, {"ddd" => :ddd}, {fff: {"sda" => "sds"}}] => [:s, {"ddd"=>:ddd}, {:fff=>{"sda"=>"sds"}}] [2] pry(main)> [:s, {"ddd" => :ddd}, {fff: {"sda" => "sds"}}].keys_to_sym => [:s, {:ddd=>:ddd}, {:fff=>{:sda=>"sds"}}]
Railsで使用。こうやって拡張するのがやりやすくていいですね。iOSでいうところのカテゴリ+.pchでのインポートみたいな感じですね。
2015/6/16 追記
deep_symbolize_keysはhash中のarray中のhashはsymbolizeしないらしい。