Issue #14371 has been updated by shevegen (Robert A. Heiler).


I agree with the proposal.

If it is approved, please do not forget meaningful documentation + perhaps
at the least one short example for using it (I refer to the recursive: true
option; http://ruby-doc.org/core-2.5.0/Hash.html#method-i-transform_keys-21).

----------------------------------------
Feature #14371: New option "recursive: true" for Hash#transform_keys!
https://bugs.ruby-lang.org/issues/14371#change-69627

* Author: tagomoris (Satoshi TAGOMORI)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
`Hash#transform_keys!` is available when we want to symbolize hash keys.
But in some/many cases (for example, receiver hash object is nested configuration tree loaded from any files), hash object are
nested object, which has hashes or arrays of hashes as values.
It's super useful if we can transform keys of such nested values.

My proposal is `Hash#transform_keys!(recursive: true, &:to_sym)`. Pseudo code is:

```ruby
def transform_keys!(recursive: false, &block)
  # do original transform_keys! here
  values.each do |v|
    if v.respond_to?(:each)
      v.each{|i| i.transform_keys!(recursive: true, &block) if i.respond_to?(:transform_keys!) }
    else v.respond_to?(:transform_keys!)
      v.transform_keys!(recursive: true, &block)
    end
  end if recursive
end
```

The most major usage example is: `config = MyAwesomeFormat.load(file); config.transform_keys!(recursive: true, &:to_sym)`.




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>