Class: ActionDispatch::Request::Session

Inherits:
Object
  • Object
show all
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

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

Instance Method Summary collapse

Constructor Details

#initialize(by, req) ⇒ Session

Returns a new instance of Session.



63
64
65
66
67
68
69
# File 'lib/action_dispatch/request/session.rb', line 63

def initialize(by, req)
  @by       = by
  @req      = req
  @delegate = {}
  @loaded   = false
  @exists   = nil # We haven't checked yet.
end

Class Method Details

.create(store, req, default_options) ⇒ Object

Creates a session hash, merging the properties of the previous session if any.



16
17
18
19
20
21
22
23
24
# File 'lib/action_dispatch/request/session.rb', line 16

def self.create(store, req, default_options)
  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, default_options))
  session
end

.find(req) ⇒ Object



26
27
28
# File 'lib/action_dispatch/request/session.rb', line 26

def self.find(req)
  req.get_header ENV_SESSION_KEY
end

.set(req, session) ⇒ Object



30
31
32
# File 'lib/action_dispatch/request/session.rb', line 30

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.



91
92
93
94
# File 'lib/action_dispatch/request/session.rb', line 91

def [](key)
  load_for_read!
  @delegate[key.to_s]
end

#[]=(key, value) ⇒ Object

Writes given value to given key of the session.



117
118
119
120
# File 'lib/action_dispatch/request/session.rb', line 117

def []=(key, value)
  load_for_write!
  @delegate[key.to_s] = value
end

#clearObject

Clears the session.



123
124
125
126
# File 'lib/action_dispatch/request/session.rb', line 123

def clear
  load_for_write!
  @delegate.clear
end

#delete(key) ⇒ Object

Deletes given key from the session.



151
152
153
154
# File 'lib/action_dispatch/request/session.rb', line 151

def delete(key)
  load_for_write!
  @delegate.delete key.to_s
end

#destroyObject



79
80
81
82
83
84
85
86
87
# File 'lib/action_dispatch/request/session.rb', line 79

def destroy
  clear
  options = self.options || {}
  @by.send(:delete_session, @req, options.id(@req), options)

  # Load the new sid to be written with the response.
  @loaded = false
  load_for_write!
end

#each(&block) ⇒ Object



206
207
208
# File 'lib/action_dispatch/request/session.rb', line 206

def each(&block)
  to_hash.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)


196
197
198
199
# File 'lib/action_dispatch/request/session.rb', line 196

def empty?
  load_for_read!
  @delegate.empty?
end

#exists?Boolean

Returns:

  • (Boolean)


187
188
189
190
# File 'lib/action_dispatch/request/session.rb', line 187

def exists?
  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


170
171
172
173
174
175
176
177
# File 'lib/action_dispatch/request/session.rb', line 170

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.

Returns:

  • (Boolean)


97
98
99
100
# File 'lib/action_dispatch/request/session.rb', line 97

def has_key?(key)
  load_for_read!
  @delegate.key?(key.to_s)
end

#idObject



71
72
73
# File 'lib/action_dispatch/request/session.rb', line 71

def id
  options.id(@req)
end

#inspectObject



179
180
181
182
183
184
185
# File 'lib/action_dispatch/request/session.rb', line 179

def inspect
  if loaded?
    super
  else
    "#<#{self.class}:0x#{(object_id << 1).to_s(16)} not yet loaded>"
  end
end

#keysObject

Returns keys of the session as Array.



105
106
107
108
# File 'lib/action_dispatch/request/session.rb', line 105

def keys
  load_for_read!
  @delegate.keys
end

#loaded?Boolean

Returns:

  • (Boolean)


192
193
194
# File 'lib/action_dispatch/request/session.rb', line 192

def loaded?
  @loaded
end

#merge!(other) ⇒ Object



201
202
203
204
# File 'lib/action_dispatch/request/session.rb', line 201

def merge!(other)
  load_for_write!
  @delegate.merge!(other)
end

#optionsObject



75
76
77
# File 'lib/action_dispatch/request/session.rb', line 75

def options
  Options.find @req
end

#to_hashObject Also known as: to_h

Returns the session as Hash.



129
130
131
132
# File 'lib/action_dispatch/request/session.rb', line 129

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


145
146
147
148
# File 'lib/action_dispatch/request/session.rb', line 145

def update(hash)
  load_for_write!
  @delegate.update stringify_keys(hash)
end

#valuesObject

Returns values of the session as Array.



111
112
113
114
# File 'lib/action_dispatch/request/session.rb', line 111

def values
  load_for_read!
  @delegate.values
end