Module: RobotLab::RactorBoundary
- Defined in:
- lib/robot_lab/ractor_boundary.rb
Overview
Utility for making values safe to pass across Ractor boundaries.
Recursively freezes Hash and Array structures. Raises RactorBoundaryError if a value cannot be made Ractor-shareable (e.g. a live IO or Proc).
Class Method Summary collapse
-
.freeze_deep(obj) ⇒ Object
Recursively freeze an object for safe Ractor boundary crossing.
Class Method Details
.freeze_deep(obj) ⇒ Object
Recursively freeze an object for safe Ractor boundary crossing.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/robot_lab/ractor_boundary.rb', line 19 def self.freeze_deep(obj) return obj if Ractor.shareable?(obj) result = case obj when Hash obj.transform_keys { |k| freeze_deep(k) } .transform_values { |v| freeze_deep(v) } when Array obj.map { |v| freeze_deep(v) } else begin obj.dup rescue TypeError raise RactorBoundaryError, "Cannot make #{obj.class} Ractor-shareable: dup not supported" end end Ractor.make_shareable(result) rescue Ractor::IsolationError, Ractor::Error => e raise RactorBoundaryError, "Cannot make value Ractor-shareable: #{e.}" end |