summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ostruct.rb2
-rw-r--r--test/ostruct/test_ostruct.rb11
2 files changed, 13 insertions, 0 deletions
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 # => #<OpenStruct name="Rowdy">
# 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