From: pschambacher@... Date: 2017-12-18T15:27:28+00:00 Subject: [ruby-core:84338] [Ruby trunk Bug#13358] OpenStruct overriding allocate Issue #13358 has been updated by PSchambacher (Pierre Schambacher). Any chance this could be backported to ruby 2.3? It's creating issues because we're loading OpenStruct from the database and Ruby 2.4 is still several months ahead for this project. ---------------------------------------- Bug #13358: OpenStruct overriding allocate https://bugs.ruby-lang.org/issues/13358#change-68507 * Author: sitter (Harald Sitter) * Status: Closed * Priority: Normal * Assignee: Eregon (Benoit Daloze) * Target version: * ruby -v: ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux] * Backport: 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE ---------------------------------------- In https://github.com/ruby/ruby/commit/15960b37e82ba60455c480b1c23e1567255d3e05 OpenStruct gained ~~~ruby class << self # :nodoc: alias allocate new end ~~~ Which is rather severely conflicting with expected behavior as `Class.allocate` is meant to [not call initialize](http://ruby-doc.org/core-2.4.0/Class.html#method-i-allocate). So, in fact, the change made `allocate` of `OpenStruct` do what `allocate` is asserting not to do :-/ For `OpenStruct` itself that isn't that big a deal, for classes inheriting from `OpenStruct` it breaks `allocate` though. Example: ~~~ruby require 'ostruct' class A < OpenStruct def initialize(x, y = {}) super(y) end end A.allocate ~~~ As `allocate` is alias'd to `new` in `OpenStruct` this will attempt to initialize `A` which will raise an `ArgumentError` because `A` cannot be initialized without arguments. ~~~ $ ruby x.rb x.rb:4:in `initialize': wrong number of arguments (given 0, expected 1..2) (ArgumentError) from x.rb:9:in `new' from x.rb:9:in `
' ~~~ OpenStruct at the very least should document the fact that its allocate is behaving differently. Ideally, `OpenStruct` should not alias allocate at all. ---Files-------------------------------- 0001-ostruct.rb-improve-fix-for-OpenStruct.allocate-respo.patch (1.19 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: