Hashieは既存Hashを拡張する形で運用するExtensionを持っています。
hash_instance.export Hashie::Extensions::ExtensionName
とするなり、自作Hash拡張クラス内で
class NewHash < Hash include Hashie::Extensions::Coercion ... end
とすれば有効になります。
DeepFind
DeepFIndは込み入ったHashがあるときに有効です。
込み入ったHashの生成自体は、次の記事を参照してください。
初期状態でネストしたHashを生成する場合のTips - Bye Bye Moore
参考例
たとえば既存のハッシュとして以下のようなモノがあった時は
user = {name: "shuzo_kino", subteam: [ {name: 'taro'}, { name: 'jiro' }]} #=> {:name=>"shuzo_kino", :subteam=>[{:name=>"taro"}, {:name=>"jiro"}]}
user.extend Hashie::Extensions::DeepFind
とやって、拡張します。
以降は、深く入り組んだハッシュから同名のカラムを引っ張り出す事ができるようになります。
user.deep_find :name => "shuzo_kino" user.deep_find_all :name => ["shuzo_kino", "taro", "jiro"]
Hashie::Extensions::DeepFind#deep_find_allに関しては
原文によると
alias_method :deep_select, :deep_find_all
とエイリアスが貼られているので
user.deep_select :name => ["shuzo_kino", "taro", "jiro"]
とやってあげる事も可能です。