Class: ActionDispatch::Request::Session
- Defined in:
- actionpack/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
nilif 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
nilif 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
KeyErrorif 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
- #id_was ⇒ 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
- #options ⇒ Object
-
#to_hash ⇒ Object
(also: #to_h)
Returns the session as Hash.
-
#update(hash) ⇒ Object
(also: #merge!)
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.
76 77 78 79 80 81 82 83 84 85 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 76 def initialize(by, req, enabled: true) @by = by @req = req @delegate = {} @loaded = false @exists = nil # We haven't checked yet. @enabled = enabled @id_was = nil @id_was_initialized = false end |
Class Method Details
.create(store, req, default_options) ⇒ Object
Creates a session hash, merging the properties of the previous session if any.
19 20 21 22 23 24 25 26 27 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 19 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
43 44 45 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 43 def self.delete(req) req.delete_header ENV_SESSION_KEY end |
.disabled(req) ⇒ Object
29 30 31 32 33 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 29 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
35 36 37 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 35 def self.find(req) req.get_header ENV_SESSION_KEY end |
.set(req, session) ⇒ Object
39 40 41 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 39 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.
114 115 116 117 118 119 120 121 122 123 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 114 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.
154 155 156 157 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 154 def []=(key, value) load_for_write! @delegate[key.to_s] = value end |
#clear ⇒ Object
Clears the session.
160 161 162 163 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 160 def clear load_for_delete! @delegate.clear end |
#delete(key) ⇒ Object
Deletes given key from the session.
193 194 195 196 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 193 def delete(key) load_for_delete! @delegate.delete key.to_s end |
#destroy ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 99 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.
127 128 129 130 131 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 127 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
244 245 246 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 244 def each(&block) to_hash.each(&block) end |
#empty? ⇒ Boolean
239 240 241 242 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 239 def empty? load_for_read! @delegate.empty? end |
#enabled? ⇒ Boolean
91 92 93 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 91 def enabled? @enabled end |
#exists? ⇒ Boolean
229 230 231 232 233 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 229 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
212 213 214 215 216 217 218 219 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 212 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.
134 135 136 137 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 134 def has_key?(key) load_for_read! @delegate.key?(key.to_s) end |
#id ⇒ Object
87 88 89 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 87 def id .id(@req) end |
#id_was ⇒ Object
248 249 250 251 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 248 def id_was load_for_read! @id_was end |
#inspect ⇒ Object
221 222 223 224 225 226 227 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 221 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.
142 143 144 145 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 142 def keys load_for_read! @delegate.keys end |
#loaded? ⇒ Boolean
235 236 237 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 235 def loaded? @loaded end |
#options ⇒ Object
95 96 97 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 95 def Options.find @req end |
#to_hash ⇒ Object Also known as: to_h
Returns the session as Hash.
166 167 168 169 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 166 def to_hash load_for_read! @delegate.dup.delete_if { |_, v| v.nil? } end |
#update(hash) ⇒ Object Also known as: merge!
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"}
182 183 184 185 186 187 188 189 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 182 def update(hash) unless hash.respond_to?(:to_hash) raise TypeError, "no implicit conversion of #{hash.class.name} into Hash" end load_for_write! @delegate.update hash.to_hash.stringify_keys end |
#values ⇒ Object
Returns values of the session as Array.
148 149 150 151 |
# File 'actionpack/lib/action_dispatch/request/session.rb', line 148 def values load_for_read! @delegate.values end |