From 0977040133c53be92713e9054b491a0b3649e148 Mon Sep 17 00:00:00 2001 From: Marc-Andre Lafortune Date: Fri, 25 Sep 2020 21:17:06 -0400 Subject: [PATCH] [ruby/ostruct] Add test that frozen OpenStructs are Ractor-shareable --- lib/ostruct.rb | 2 ++ test/ostruct/test_ostruct.rb | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/ostruct.rb b/lib/ostruct.rb index 8cfccb0dfb..d2e93b1463 100644 --- a/lib/ostruct.rb +++ b/lib/ostruct.rb @@ -62,6 +62,8 @@ # first_pet # => # # first_pet == second_pet # => true # +# Ractor compatibility: A frozen OpenStruct with shareable values is itself shareable. +# # == Caveats # # An OpenStruct utilizes Ruby's method lookup structure to find and define the diff --git a/test/ostruct/test_ostruct.rb b/test/ostruct/test_ostruct.rb index 6105f37c42..5de6f278d0 100644 --- a/test/ostruct/test_ostruct.rb +++ b/test/ostruct/test_ostruct.rb @@ -298,4 +298,15 @@ class TC_OpenStruct < Test::Unit::TestCase o.foo = 42 assert_equal 42, o.foo end + + def test_ractor + obj1 = OpenStruct.new(a: 42, b: 42) + obj1.c = 42 + obj1.freeze + + obj2 = Ractor.new obj1 do |obj| + obj + end.take + assert obj1.object_id == obj2.object_id + end if defined?(Ractor) end