class AnyCable::Rails::Connections::SessionProxy

in the RPC call (set by the previous calls)
Wrap ‘request.session` to lazily load values provided

def initialize(rack_session, socket_session)

def initialize(rack_session, socket_session)
  @rack_session = rack_session
  @socket_session = JSON.parse(socket_session).with_indifferent_access
end

def instance_variable_get(name)

This method is used by StimulusReflex to obtain `@by`
def instance_variable_get(name)
  super || rack_session.instance_variable_get(name)
end

def keys

def keys
  rack_session.keys + socket_session.keys
end

def method_missing(method, *args, &block)

def method_missing(method, *args, &block)
  if rack_session.respond_to?(method, true)
    rack_session.send(method, *args, &block)
  else
    super
  end
end

def respond_to_missing?(name, include_private = false)

Delegate both publuc and private methods to rack_session
def respond_to_missing?(name, include_private = false)
  return false if name == :marshal_dump || name == :_dump
  rack_session.respond_to?(name, include_private) || super
end

def restore!

def restore!
  socket_session.keys.each(&method(:restore_key!))
end

def restore_key!(key)

def restore_key!(key)
  return unless socket_session.key?(key)
  val = socket_session.delete(key)
  rack_session[key] =
    if val.is_a?(String)
      GlobalID::Locator.locate(val) || val
    else
      val
    end
end