Module: RactorRailsShim::Freezers::GlobalClassIvarFreezer
- Extended by:
- RoleDefaults
- Defined in:
- lib/ractor_rails_shim/roles/freezers.rb
Constant Summary
collapse
- TARGETS =
Mutable target list — downstream apps can register their own global
classes via add_target without monkey-patching. Read at boot time
(main Ractor only) before workers spawn.
%w[Time Date DateTime I18n]
Class Method Summary
collapse
default_funnel, default_reassign_shareable_const, default_safe_const_get
Class Method Details
.add_target(class_name) ⇒ Object
133
134
135
|
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 133
def self.add_target(class_name)
TARGETS << class_name unless TARGETS.include?(class_name)
end
|
.call ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
148
149
|
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 137
def self.call
classes = TARGETS.filter_map { |n| safe_const_get.call(n) }
classes.each do |klass|
klass.instance_variables.each do |ivar|
val = klass.instance_variable_get(ivar)
next if Ractor.shareable?(val)
funnel.call("freeze global ivar #{klass}#{ivar}") do
Ractor.make_shareable(val)
end
end
end
true
end
|
110
111
112
113
|
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 110
def self.configure(funnel: nil, safe_const_get: nil)
@funnel = funnel
@safe_const_get = safe_const_get
end
|
.funnel ⇒ Object
120
121
122
|
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 120
def self.funnel
@funnel || default_funnel
end
|
.reset_configuration ⇒ Object
115
116
117
118
|
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 115
def self.reset_configuration
@funnel = nil
@safe_const_get = nil
end
|
.safe_const_get ⇒ Object
124
125
126
|
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 124
def self.safe_const_get
@safe_const_get || default_safe_const_get
end
|