Project

General

Profile

Feature #12282

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

A new feature for your consideration: #dig! which is to #fetch as #dig is to #[]. For me and maybe many others, Hash#fetch is used much more than Hash#[]. And traversing multiple fetches isn't very convenient nor Ruby-like, e.g.: places.fetch(:countries).fetch(:canada).fetch(ontario). 

 Here's how it would work: 

 ~~~ruby ~~~ 
 places = { countries: { canada: true } } 

 places.dig    :countries, :canada    # => true 
 places.dig! :countries, :canada    # => true 

 places.dig    :countries, :canada, :ontario    # => nil 
 places.dig! :countries, :canada, :ontario    # => KeyError: Key not found: :ontario 

 ~~~ 


 Here's an implementation and tests: https://gist.github.com/dogweather/819ccdb41c9db0514c163cfdb1c528e2

Back