class Rack::Session::Abstract::SessionHash

SessionHash is responsible to lazily load the session from store.

Public Class Methods

new(by, env) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 51
def initialize(by, env)
  super()
  @by = by
  @env = env
  @loaded = false
end

Public Instance Methods

[](key) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 58
def [](key)
  load_for_read!
  super(key.to_s)
end
[]=(key, value) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 70
def []=(key, value)
  load_for_write!
  super(key.to_s, value)
end
clear() click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 75
def clear
  load_for_write!
  super
end
delete(key) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 92
def delete(key)
  load_for_write!
  super(key.to_s)
end
empty?() click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 114
def empty?
  load_for_read!
  super
end
exists?() click to toggle source
# File lib/rack/session/abstract/id.rb, line 105
def exists?
  return @exists if instance_variable_defined?(:@exists)
  @exists = @by.send(:session_exists?, @env)
end
has_key?(key) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 63
def has_key?(key)
  load_for_read!
  super(key.to_s)
end
Also aliased as: key?, include?
include?(key)
Alias for: has_key?
inspect() click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 97
def inspect
  if loaded?
    super
  else
    "#<#{self.class}:0x#{self.object_id.to_s(16)} not yet loaded>"
  end
end
key?(key)
Alias for: has_key?
loaded?() click to toggle source
# File lib/rack/session/abstract/id.rb, line 110
def loaded?
  @loaded
end
merge!(hash) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 119
def merge!(hash)
  load_for_write!
  super
end
to_hash() click to toggle source
# File lib/rack/session/abstract/id.rb, line 80
def to_hash
  load_for_read!
  h = {}.replace(self)
  h.delete_if { |k,v| v.nil? }
  h
end
update(hash) click to toggle source
Calls superclass method
# File lib/rack/session/abstract/id.rb, line 87
def update(hash)
  load_for_write!
  super(stringify_keys(hash))
end

Private Instance Methods

load!() click to toggle source
# File lib/rack/session/abstract/id.rb, line 134
def load!
  id, session = @by.send(:load_session, @env)
  @env[ENV_SESSION_OPTIONS_KEY][:id] = id
  replace(stringify_keys(session))
  @loaded = true
end
load_for_read!() click to toggle source
# File lib/rack/session/abstract/id.rb, line 126
def load_for_read!
  load! if !loaded? && exists?
end
load_for_write!() click to toggle source
# File lib/rack/session/abstract/id.rb, line 130
def load_for_write!
  load! unless loaded?
end
stringify_keys(other) click to toggle source
# File lib/rack/session/abstract/id.rb, line 141
def stringify_keys(other)
  hash = {}
  other.each do |key, value|
    hash[key.to_s] = value
  end
  hash
end