Class: ActionDispatch::Request::Session
- Inherits:
-
Object
- Object
- ActionDispatch::Request::Session
- Defined in:
- lib/action_dispatch/request/session.rb
Overview
Session is responsible for lazily loading the session from store.
Defined Under Namespace
Classes: Options
Constant Summary collapse
- DisabledSessionError =
:nodoc:
Class.new(StandardError)
- ENV_SESSION_KEY =
:nodoc:
Rack::RACK_SESSION
- ENV_SESSION_OPTIONS_KEY =
:nodoc:
Rack::RACK_SESSION_OPTIONS
- Unspecified =
Singleton object used to determine if an optional param wasn't specified.
Object.new
Class Method Summary collapse
-
.create(store, req, default_options) ⇒ Object
Creates a session hash, merging the properties of the previous session if any.
- .delete(req) ⇒ Object
- .disabled(req) ⇒ Object
- .find(req) ⇒ Object
- .set(req, session) ⇒ Object
Instance Method Summary collapse
-
#[](key) ⇒ Object
Returns value of the key stored in the session or
nil
if the given key is not found in the session. -
#[]=(key, value) ⇒ Object
Writes given value to given key of the session.
-
#clear ⇒ Object
Clears the session.
-
#delete(key) ⇒ Object
Deletes given key from the session.
- #destroy ⇒ Object
-
#dig(*keys) ⇒ Object
Returns the nested value specified by the sequence of keys, returning
nil
if any intermediate step isnil
. - #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #enabled? ⇒ Boolean
- #exists? ⇒ Boolean
-
#fetch(key, default = Unspecified, &block) ⇒ Object
Returns value of the given key from the session, or raises
KeyError
if can't find the given key and no default value is set. -
#has_key?(key) ⇒ Boolean
(also: #key?, #include?)
Returns true if the session has the given key or false.
- #id ⇒ Object
-
#initialize(by, req, enabled: true) ⇒ Session
constructor
A new instance of Session.
- #inspect ⇒ Object
-
#keys ⇒ Object
Returns keys of the session as Array.
- #loaded? ⇒ Boolean
- #merge!(other) ⇒ Object
- #options ⇒ Object
-
#to_hash ⇒ Object
(also: #to_h)
Returns the session as Hash.
-
#update(hash) ⇒ Object
Updates the session with given Hash.
-
#values ⇒ Object
Returns values of the session as Array.
Constructor Details
#initialize(by, req, enabled: true) ⇒ Session
Returns a new instance of Session.
74 75 76 77 78 79 80 81 |
# File 'lib/action_dispatch/request/session.rb', line 74 def initialize(by, req, enabled: true) @by = by @req = req @delegate = {} @loaded = false @exists = nil # We haven't checked yet. @enabled = enabled end |
Class Method Details
.create(store, req, default_options) ⇒ Object
Creates a session hash, merging the properties of the previous session if any.
17 18 19 20 21 22 23 24 25 |
# File 'lib/action_dispatch/request/session.rb', line 17 def self.create(store, req, ) session_was = find req session = Request::Session.new(store, req) session.merge! session_was if session_was set(req, session) Options.set(req, Request::Session::Options.new(store, )) session end |
.delete(req) ⇒ Object
41 42 43 |
# File 'lib/action_dispatch/request/session.rb', line 41 def self.delete(req) req.delete_header ENV_SESSION_KEY end |
.disabled(req) ⇒ Object
27 28 29 30 31 |
# File 'lib/action_dispatch/request/session.rb', line 27 def self.disabled(req) new(nil, req, enabled: false).tap do Session::Options.set(req, Session::Options.new(nil, { id: nil })) end end |
.find(req) ⇒ Object
33 34 35 |
# File 'lib/action_dispatch/request/session.rb', line 33 def self.find(req) req.get_header ENV_SESSION_KEY end |
.set(req, session) ⇒ Object
37 38 39 |
# File 'lib/action_dispatch/request/session.rb', line 37 def self.set(req, session) req.set_header ENV_SESSION_KEY, session end |
Instance Method Details
#[](key) ⇒ Object
Returns value of the key stored in the session or nil
if the given key is not found in the session.
110 111 112 113 114 115 116 117 118 119 |
# File 'lib/action_dispatch/request/session.rb', line 110 def [](key) load_for_read! key = key.to_s if key == "session_id" id&.public_id else @delegate[key] end end |
#[]=(key, value) ⇒ Object
Writes given value to given key of the session.
150 151 152 153 |
# File 'lib/action_dispatch/request/session.rb', line 150 def []=(key, value) load_for_write! @delegate[key.to_s] = value end |
#clear ⇒ Object
Clears the session.
156 157 158 159 |
# File 'lib/action_dispatch/request/session.rb', line 156 def clear load_for_delete! @delegate.clear end |
#delete(key) ⇒ Object
Deletes given key from the session.
184 185 186 187 |
# File 'lib/action_dispatch/request/session.rb', line 184 def delete(key) load_for_delete! @delegate.delete key.to_s end |
#destroy ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/action_dispatch/request/session.rb', line 95 def destroy clear if enabled? = self. || {} @by.send(:delete_session, @req, .id(@req), ) # Load the new sid to be written with the response. @loaded = false load_for_write! end end |
#dig(*keys) ⇒ Object
Returns the nested value specified by the sequence of keys, returning nil
if any intermediate step is nil
.
123 124 125 126 127 |
# File 'lib/action_dispatch/request/session.rb', line 123 def dig(*keys) load_for_read! keys = keys.map.with_index { |key, i| i.zero? ? key.to_s : key } @delegate.dig(*keys) end |
#each(&block) ⇒ Object
240 241 242 |
# File 'lib/action_dispatch/request/session.rb', line 240 def each(&block) to_hash.each(&block) end |
#empty? ⇒ Boolean
230 231 232 233 |
# File 'lib/action_dispatch/request/session.rb', line 230 def empty? load_for_read! @delegate.empty? end |
#enabled? ⇒ Boolean
87 88 89 |
# File 'lib/action_dispatch/request/session.rb', line 87 def enabled? @enabled end |
#exists? ⇒ Boolean
220 221 222 223 224 |
# File 'lib/action_dispatch/request/session.rb', line 220 def exists? return false unless enabled? return @exists unless @exists.nil? @exists = @by.send(:session_exists?, @req) end |
#fetch(key, default = Unspecified, &block) ⇒ Object
Returns value of the given key from the session, or raises KeyError
if can't find the given key and no default value is set. Returns default value if specified.
session.fetch(:foo)
# => KeyError: key not found: "foo"
session.fetch(:foo, :bar)
# => :bar
session.fetch(:foo) do
:bar
end
# => :bar
203 204 205 206 207 208 209 210 |
# File 'lib/action_dispatch/request/session.rb', line 203 def fetch(key, default = Unspecified, &block) load_for_read! if default == Unspecified @delegate.fetch(key.to_s, &block) else @delegate.fetch(key.to_s, default, &block) end end |
#has_key?(key) ⇒ Boolean Also known as: key?, include?
Returns true if the session has the given key or false.
130 131 132 133 |
# File 'lib/action_dispatch/request/session.rb', line 130 def has_key?(key) load_for_read! @delegate.key?(key.to_s) end |
#id ⇒ Object
83 84 85 |
# File 'lib/action_dispatch/request/session.rb', line 83 def id .id(@req) end |
#inspect ⇒ Object
212 213 214 215 216 217 218 |
# File 'lib/action_dispatch/request/session.rb', line 212 def inspect if loaded? super else "#<#{self.class}:0x#{(object_id << 1).to_s(16)} not yet loaded>" end end |
#keys ⇒ Object
Returns keys of the session as Array.
138 139 140 141 |
# File 'lib/action_dispatch/request/session.rb', line 138 def keys load_for_read! @delegate.keys end |
#loaded? ⇒ Boolean
226 227 228 |
# File 'lib/action_dispatch/request/session.rb', line 226 def loaded? @loaded end |
#merge!(other) ⇒ Object
235 236 237 238 |
# File 'lib/action_dispatch/request/session.rb', line 235 def merge!(other) load_for_write! @delegate.merge!(other) end |
#options ⇒ Object
91 92 93 |
# File 'lib/action_dispatch/request/session.rb', line 91 def Options.find @req end |
#to_hash ⇒ Object Also known as: to_h
Returns the session as Hash.
162 163 164 165 |
# File 'lib/action_dispatch/request/session.rb', line 162 def to_hash load_for_read! @delegate.dup.delete_if { |_, v| v.nil? } end |
#update(hash) ⇒ Object
Updates the session with given Hash.
session.to_hash
# => {"session_id"=>"e29b9ea315edf98aad94cc78c34cc9b2"}
session.update({ "foo" => "bar" })
# => {"session_id"=>"e29b9ea315edf98aad94cc78c34cc9b2", "foo" => "bar"}
session.to_hash
# => {"session_id"=>"e29b9ea315edf98aad94cc78c34cc9b2", "foo" => "bar"}
178 179 180 181 |
# File 'lib/action_dispatch/request/session.rb', line 178 def update(hash) load_for_write! @delegate.update hash.stringify_keys end |
#values ⇒ Object
Returns values of the session as Array.
144 145 146 147 |
# File 'lib/action_dispatch/request/session.rb', line 144 def values load_for_read! @delegate.values end |