Issue #5531 has been updated by Alexey Muranov.


Konstantin Haase wrote:
> Never mind, got it.
>  
>  On Oct 31, 2011, at 17:32 , Haase, Konstantin wrote:
>  
>  > What's the difference (usability wise) between
>  > 
>  > 	hash[:foo][:bar]
>  > 
>  > and
>  > 
>  > 	hash.dv(:foo, :bar)
>  > 
>  > Konstantin

I'll answer anyway if someone else didn't get it :).
{ :foo => 1 }[2][3] raises NoMethodError, and { :foo => 1 }.[2,3] should return nil.
----------------------------------------
Feature #5531: deep_value for dealing with nested hashes
http://redmine.ruby-lang.org/issues/5531

Author: Kyle Peyton
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


This feature request stems from dealing with nested hashes, like the params from a request often dealt with in web frameworks.

Conditional code often needs to be written with multiple logical ANDs in order to achieve what this simple function can:

class Hash
  def deep_value(*ks)
    if ks.size == 1
      return self[ks.shift]
    else
      val = ks.shift
      return (self[val].is_a?(Hash) ? self[val].deep_value(*ks) : nil)
    end
  end
  
  alias dv deep_value
end


deep_value (dv) will simply recurse over a hash given a set of indexes and return the value at the end.

Example:

> foo = {:bar => {:baz => 'blah'}}
> foo.dv(:bar, :baz)
-> 'blah'
> foo.dv(:cats)
-> nil



-- 
http://redmine.ruby-lang.org