Project

General

Profile

Feature #14371

Updated by nobu (Nobuyoshi Nakada) almost 2 years ago

`Hash#transform_keys!` 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)`.

Back