SessionHash is responsible to lazily load the session from store.
# File lib/rack/session/abstract/id.rb, line 54 def self.find(env) env[ENV_SESSION_KEY] end
# File lib/rack/session/abstract/id.rb, line 66 def initialize(store, env) @store = store @env = env @loaded = false end
# File lib/rack/session/abstract/id.rb, line 58 def self.set(env, session) env[ENV_SESSION_KEY] = session end
# File lib/rack/session/abstract/id.rb, line 62 def self.set_options(env, options) env[ENV_SESSION_OPTIONS_KEY] = options.dup end
# File lib/rack/session/abstract/id.rb, line 86 def [](key) load_for_read! @data[key.to_s] end
# File lib/rack/session/abstract/id.rb, line 99 def []=(key, value) load_for_write! @data[key.to_s] = value end
# File lib/rack/session/abstract/id.rb, line 105 def clear load_for_write! @data.clear end
# File lib/rack/session/abstract/id.rb, line 131 def delete(key) load_for_write! @data.delete(key.to_s) end
# File lib/rack/session/abstract/id.rb, line 110 def destroy clear @id = @store.send(:destroy_session, @env, id, options) end
# File lib/rack/session/abstract/id.rb, line 81 def each(&block) load_for_read! @data.each(&block) end
# File lib/rack/session/abstract/id.rb, line 154 def empty? load_for_read! @data.empty? end
# File lib/rack/session/abstract/id.rb, line 144 def exists? return @exists if instance_variable_defined?(:@exists) @data = {} @exists = @store.send(:session_exists?, @env) end
# File lib/rack/session/abstract/id.rb, line 92 def has_key?(key) load_for_read! @data.has_key?(key.to_s) end
# File lib/rack/session/abstract/id.rb, line 72 def id return @id if @loaded or instance_variable_defined?(:@id) @id = @store.send(:extract_session_id, @env) end
# File lib/rack/session/abstract/id.rb, line 136 def inspect if loaded? @data.inspect else "#<#{self.class}:0x#{self.object_id.to_s(16)} not yet loaded>" end end
# File lib/rack/session/abstract/id.rb, line 159 def keys @data.keys end
# File lib/rack/session/abstract/id.rb, line 150 def loaded? @loaded end
# File lib/rack/session/abstract/id.rb, line 77 def options @env[ENV_SESSION_OPTIONS_KEY] end
# File lib/rack/session/abstract/id.rb, line 126 def replace(hash) load_for_write! @data.replace(stringify_keys(hash)) end
# File lib/rack/session/abstract/id.rb, line 115 def to_hash load_for_read! @data.dup end
# File lib/rack/session/abstract/id.rb, line 120 def update(hash) load_for_write! @data.update(stringify_keys(hash)) end
# File lib/rack/session/abstract/id.rb, line 163 def values @data.values end
# File lib/rack/session/abstract/id.rb, line 177 def load! @id, session = @store.send(:load_session, @env) @data = stringify_keys(session) @loaded = true end
# File lib/rack/session/abstract/id.rb, line 169 def load_for_read! load! if !loaded? && exists? end
# File lib/rack/session/abstract/id.rb, line 173 def load_for_write! load! unless loaded? end
# File lib/rack/session/abstract/id.rb, line 183 def stringify_keys(other) hash = {} other.each do |key, value| hash[key.to_s] = value end hash end