Issue #15409 has been updated by marcandre (Marc-Andre Lafortune).


I opened a PR that resolves this: https://github.com/ruby/ostruct/pull/15

Note that using a field called `:method` has never worked with `OpenStruct`=
 before; only private methods could be overridden.

The PR does a few things:
- reverts lazy initialization and restores overriding private methods
- allows overriding public methods (as in this issue, for flexibility and c=
ompatibility with `Struct`)
- creates aliases ending with `!` for public instance methods (e.g. `OpenSt=
ruct.new.class! # =3D> OpenStruct`)
- adds documentation about the caveats of using `OpenStruct` and recommendi=
ng not using it at all
- small refactoring to better handle frozen state

----------------------------------------
Bug #15409: OpenStruct error when attribute is called 'method'
https://bugs.ruby-lang.org/issues/15409#change-87510

* Author: elioncho (El=EDas Orozco)
* Status: Assigned
* Priority: Normal
* Assignee: marcandre (Marc-Andre Lafortune)
* ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin16]
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
The following error is shown when you try to access an OpenStruct with a pr=
operty called method:

`method': wrong number of arguments (given 0, expected 1) (ArgumentError)

To replicate:

~~~ ruby
require 'ostruct'
o =3D OpenStruct.new({ method: 'get' })
o.method
~~~


The expected behavior should be to return 'get'




-- =

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

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