Module: RactorRailsShim::Freezers::MessagesConstantsFreezer

Extended by:
RoleDefaults
Defined in:
lib/ractor_rails_shim/roles/freezers.rb

Constant Summary collapse

TARGET_NAMES =

Mutable target list — downstream apps can register their own message-serializer constants via add_target without monkey-patching.

%i[ENVELOPE_SERIALIZERS TIMESTAMP_SERIALIZERS]

Class Method Summary collapse

Methods included from RoleDefaults

default_funnel, default_reassign_shareable_const, default_safe_const_get

Class Method Details

._load_message_packObject



265
266
267
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 265

def self._load_message_pack
  require "active_support/message_pack"
end

.add_target(name) ⇒ Object



236
237
238
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 236

def self.add_target(name)
  TARGET_NAMES << name unless TARGET_NAMES.include?(name)
end

.callObject



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 244

def self.call
  return true unless msgpack_available?
  _load_message_pack

  mod = safe_const_get.call("ActiveSupport::Messages::Metadata", inherit: false)
  return true unless mod.is_a?(Module)
  TARGET_NAMES.each do |name|
    next unless mod.const_defined?(name, false)
    val = mod.const_get(name, false)
    next if Ractor.shareable?(val)
    shareable = Ractor.make_shareable(val) rescue val
    begin
      mod.send(:remove_const, name) if mod.const_defined?(name, false)
      mod.const_set(name, shareable)
    rescue StandardError
      nil
    end
  end
  true
end

.configure(safe_const_get: nil) ⇒ Object



220
221
222
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 220

def self.configure(safe_const_get: nil)
  @safe_const_get = safe_const_get
end

.msgpack_available?Boolean

Returns:

  • (Boolean)


240
241
242
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 240

def self.msgpack_available?
  Gem::Specification.find_all_by_name("msgpack").any?
end

.reset_configurationObject



224
225
226
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 224

def self.reset_configuration
  @safe_const_get = nil
end

.safe_const_getObject



228
229
230
# File 'lib/ractor_rails_shim/roles/freezers.rb', line 228

def self.safe_const_get
  @safe_const_get || default_safe_const_get
end