class AnyCable::Rails::SessionProxy

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

Attributes

rack_session[R]
socket_session[R]

Public Class Methods

new(rack_session, socket_session) click to toggle source
# File lib/anycable/rails/session_proxy.rb, line 10
def initialize(rack_session, socket_session)
  @rack_session = rack_session
  @socket_session = JSON.parse(socket_session).with_indifferent_access
end

Public Instance Methods

instance_variable_get(name) click to toggle source

This method is used by StimulusReflex to obtain `@by`

Calls superclass method
# File lib/anycable/rails/session_proxy.rb, line 57
def instance_variable_get(name)
  super || rack_session.instance_variable_get(name)
end
keys() click to toggle source
# File lib/anycable/rails/session_proxy.rb, line 38
def keys
  rack_session.keys + socket_session.keys
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/anycable/rails/session_proxy.rb, line 48
def method_missing(method, *args, &block)
  if rack_session.respond_to?(method, true)
    rack_session.send(method, *args, &block)
  else
    super
  end
end
respond_to_missing?(name, include_private = false) click to toggle source

Delegate both publuc and private methods to rack_session

Calls superclass method
# File lib/anycable/rails/session_proxy.rb, line 43
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

Private Instance Methods

restore!() click to toggle source
# File lib/anycable/rails/session_proxy.rb, line 63
def restore!
  socket_session.keys.each(&method(:restore_key!))
end
restore_key!(key) click to toggle source
# File lib/anycable/rails/session_proxy.rb, line 67
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