I’m back and I wanna share those simple snippets with you:

~

class Hash def deep_has_key?(key) self.has_key?(key) || any? {|k, v| v.deep_has_key?(key) if v.is_a? Hash} end alias :deep_include? :deep_has_key? alias :deep_key? :deep_has_key? alias :deep_member? :deep_has_key?

def deep_has_value?(value) self.has_value?(value) || any? {|k,v| v.deep_has_value?(value) if v.is_a? Hash} end alias :deep_value? :deep_has_value? end

Example:
{:a => {:c => 'c'}, :b =>{:d => {:e => 'e'}}}.deep_has_key?(:e) # => true {:a => {:c => 'c'}, :b =>{:d => {:e => 'e'}}}.deep_has_key?(:z) # => false

{:a => {:c => ‘c’}, :b =>{:d => {:e => ’e’}}}.deep_has_value?(’e’) # => true {:a => {:c => ‘c’}, :b =>{:d => {:e => ’e’}}}.deep_has_value?(‘z’) # => false

For a complete test suite, please check related gist.