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