[ruby-core:89407] [Ruby trunk Feature#15225] OpenStruct: Recursively converting child Hash objects to OpenStruct objects.

From: abhilashmv@...
Date: 2018-10-15 15:32:54 UTC
List: ruby-core #89407
Issue #15225 has been updated by abhionlyone (Abhilash Reddy).


abhionlyone (Abhilash Reddy) wrote:
> Currently, OpenStruct allows this:
> 
> ~~~ ruby
> person = OpenStruct.new
> person.age = 25
> person.name = "Abhilash"
> puts person.name # "Abhilash"
> ~~~
> 
> But something like this is not possible:
> 
> ~~~ ruby
> person.more_info = {country: "Japan",  skills: ["Ruby", "C++"]}
> puts person.more_info.country # NoMethodError (undefined method `country' for {:country=>"Japan"}:Hash)
> ~~~
> 
> It will be very helpful if we can provide an option to recursively convert child Hash objects to OpenStruct objects. By default it can be set to false. 
> 
> I've done a basic implementation of this and created a PR here: https://github.com/ruby/ostruct/pull/5
> 
> Please let me know if there are any objections. If this can be accepted, I would like to implement and add test cases for the same.



----------------------------------------
Feature #15225: OpenStruct: Recursively converting child Hash objects to OpenStruct objects.
https://bugs.ruby-lang.org/issues/15225#change-74447

* Author: abhionlyone (Abhilash Reddy)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Currently, OpenStruct allows this:

~~~ ruby
person = OpenStruct.new
person.age = 25
person.name = "Abhilash"
puts person.name # "Abhilash"
~~~

But something like this is not possible:

~~~ ruby
person.more_info = {country: "Japan",  skills: ["Ruby", "C++"]}
puts person.more_info.country # NoMethodError (undefined method `country' for {:country=>"Japan"}:Hash)
~~~

It will be very helpful if we can provide an option to recursively convert child Hash objects to OpenStruct objects. By default it can be set to false. 

I've done a basic implementation of this and created a PR here: https://github.com/ruby/ostruct/pull/5

Please let me know if there are any objections. If this can be accepted, I would like to add test cases for the same.



-- 
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>

In This Thread

Prev Next