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 ‘nil` if the given key is not found in the session.
 - 
  
    
      #[]=(key, value)  ⇒ Object 
    
    
      (also: #store)
    
  
  
  
  
  
  
  
  
  
    
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 is `nil`.
 - #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
 - #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 Also known as: store
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.
      161 162 163 164  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 161 def clear load_for_delete! @delegate.clear end  | 
  
#delete(key) ⇒ Object
Deletes given key from the session.
      194 195 196 197  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 194 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
      245 246 247  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 245 def each(&block) to_hash.each(&block) end  | 
  
#empty? ⇒ Boolean
      240 241 242 243  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 240 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
      230 231 232 233 234  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 230 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
  
      213 214 215 216 217 218 219 220  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 213 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
      249 250 251 252  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 249 def id_was load_for_read! @id_was end  | 
  
#inspect ⇒ Object
      222 223 224 225 226 227 228  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 222 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
      236 237 238  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 236 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.
      167 168 169 170  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 167 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"}
  
      183 184 185 186 187 188 189 190  | 
    
      # File 'actionpack/lib/action_dispatch/request/session.rb', line 183 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  |