class Rack::Session::Abstract::SessionHash

SessionHash is responsible to lazily load the session from store.

Attributes

id[W]

Public Class Methods

find(req) click to toggle source
# File lib/rack/session/abstract/id.rb, line 21
def self.find(req)
  req.get_header RACK_SESSION
end
new(store, req) click to toggle source
# File lib/rack/session/abstract/id.rb, line 33
def initialize(store, req)
  @store = store
  @req = req
  @loaded = false
end
set(req, session) click to toggle source
# File lib/rack/session/abstract/id.rb, line 25
def self.set(req, session)
  req.set_header RACK_SESSION, session
end
set_options(req, options) click to toggle source
# File lib/rack/session/abstract/id.rb, line 29
def self.set_options(req, options)
  req.set_header RACK_SESSION_OPTIONS, options.dup
end

Public Instance Methods

[](key) click to toggle source
# File lib/rack/session/abstract/id.rb, line 53
def [](key)
  load_for_read!
  @data[key.to_s]
end
Also aliased as: fetch
[]=(key, value) click to toggle source
# File lib/rack/session/abstract/id.rb, line 66
def []=(key, value)
  load_for_write!
  @data[key.to_s] = value
end
Also aliased as: store
clear() click to toggle source
# File lib/rack/session/abstract/id.rb, line 72
def clear
  load_for_write!
  @data.clear
end
delete(key) click to toggle source
# File lib/rack/session/abstract/id.rb, line 98
def delete(key)
  load_for_write!
  @data.delete(key.to_s)
end
destroy() click to toggle source
# File lib/rack/session/abstract/id.rb, line 77
def destroy
  clear
  @id = @store.send(:delete_session, @req, id, options)
end
each(&block) click to toggle source
# File lib/rack/session/abstract/id.rb, line 48
def each(&block)
  load_for_read!
  @data.each(&block)
end
empty?() click to toggle source
# File lib/rack/session/abstract/id.rb, line 121
def empty?
  load_for_read!
  @data.empty?
end
exists?() click to toggle source
# File lib/rack/session/abstract/id.rb, line 111
def exists?
  return @exists if instance_variable_defined?(:@exists)
  @data = {}
  @exists = @store.send(:session_exists?, @req)
end
fetch(key)
Alias for: []
has_key?(key) click to toggle source
# File lib/rack/session/abstract/id.rb, line 59
def has_key?(key)
  load_for_read!
  @data.has_key?(key.to_s)
end
Also aliased as: key?, include?
id() click to toggle source
# File lib/rack/session/abstract/id.rb, line 39
def id
  return @id if @loaded or instance_variable_defined?(:@id)
  @id = @store.send(:extract_session_id, @req)
end
include?(key)
Alias for: has_key?
inspect() click to toggle source
# File lib/rack/session/abstract/id.rb, line 103
def inspect
  if loaded?
    @data.inspect
  else
    "#<#{self.class}:0x#{self.object_id.to_s(16)} not yet loaded>"
  end
end
key?(key)
Alias for: has_key?
keys() click to toggle source
# File lib/rack/session/abstract/id.rb, line 126
def keys
  load_for_read!
  @data.keys
end
loaded?() click to toggle source
# File lib/rack/session/abstract/id.rb, line 117
def loaded?
  @loaded
end
merge!(hash)
Alias for: update
options() click to toggle source
# File lib/rack/session/abstract/id.rb, line 44
def options
  @req.session_options
end
replace(hash) click to toggle source
# File lib/rack/session/abstract/id.rb, line 93
def replace(hash)
  load_for_write!
  @data.replace(stringify_keys(hash))
end
store(key, value)
Alias for: []=
to_hash() click to toggle source
# File lib/rack/session/abstract/id.rb, line 82
def to_hash
  load_for_read!
  @data.dup
end
update(hash) click to toggle source
# File lib/rack/session/abstract/id.rb, line 87
def update(hash)
  load_for_write!
  @data.update(stringify_keys(hash))
end
Also aliased as: merge!
values() click to toggle source
# File lib/rack/session/abstract/id.rb, line 131
def values
  load_for_read!
  @data.values
end

Private Instance Methods

load!() click to toggle source
# File lib/rack/session/abstract/id.rb, line 146
def load!
  @id, session = @store.send(:load_session, @req)
  @data = stringify_keys(session)
  @loaded = true
end
load_for_read!() click to toggle source
# File lib/rack/session/abstract/id.rb, line 138
def load_for_read!
  load! if !loaded? && exists?
end
load_for_write!() click to toggle source
# File lib/rack/session/abstract/id.rb, line 142
def load_for_write!
  load! unless loaded?
end
stringify_keys(other) click to toggle source
# File lib/rack/session/abstract/id.rb, line 152
def stringify_keys(other)
  hash = {}
  other.each do |key, value|
    hash[key.to_s] = value
  end
  hash
end