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
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
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
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
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
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
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