From e13f41e02df0d29fbde659b9e426862a8d433003 Mon Sep 17 00:00:00 2001 From: Adam Hess Date: Tue, 5 Jan 2021 15:34:45 -0800 Subject: [PATCH] [ruby/ostruct] Allow ostruct to return a value on super (#4028) This fixes cases where you can super in something that inherits from OpenStruct Co-authored-by: John Hawthorn --- lib/ostruct.rb | 1 + test/ostruct/test_ostruct.rb | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/lib/ostruct.rb b/lib/ostruct.rb index a5a5140d10..e7beac044f 100644 --- a/lib/ostruct.rb +++ b/lib/ostruct.rb @@ -240,6 +240,7 @@ class OpenStruct end set_ostruct_member_value!(mname, args[0]) elsif len == 0 + @table[mid] else begin super diff --git a/test/ostruct/test_ostruct.rb b/test/ostruct/test_ostruct.rb index 3ca98ee739..443a20c86a 100644 --- a/test/ostruct/test_ostruct.rb +++ b/test/ostruct/test_ostruct.rb @@ -249,6 +249,14 @@ class TC_OpenStruct < Test::Unit::TestCase assert_equal(:bar, os.format) end + def test_super + c = Class.new(OpenStruct) { + def foo; super; end + } + os = c.new(foo: :bar) + assert_equal(:bar, os.foo) + end + def test_overridden_public_methods os = OpenStruct.new(method: :foo, class: :bar) assert_equal(:foo, os.method)