Class: ActionDispatch::Cookies::CookieJar
- Inherits:
-
Object
- Object
- ActionDispatch::Cookies::CookieJar
- Includes:
- ChainedCookieJars, Enumerable
- Defined in:
- lib/action_dispatch/middleware/cookies.rb
Overview
:nodoc:
Direct Known Subclasses
ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullCookieJar
Constant Summary collapse
- DOMAIN_REGEXP =
This regular expression is used to split the levels of a domain. The top level domain can be any string without a period or *.*, **.* style TLDs like co.uk or com.au
www.example.co.uk gives: $& => example.co.uk
example.com gives: $& => example.com
lots.of.subdomains.example.local gives: $& => example.local
/[^.]*\.([^.]*|..\...|...\...)$/
Instance Attribute Summary collapse
-
#request ⇒ Object
readonly
Returns the value of attribute request.
Class Method Summary collapse
Instance Method Summary collapse
-
#[](name) ⇒ Object
Returns the value of the cookie by
name
, ornil
if no such cookie exists. -
#[]=(name, options) ⇒ Object
Sets the cookie named
name
. -
#clear(options = {}) ⇒ Object
Removes all cookies on the client machine by calling
delete
for each cookie. - #commit! ⇒ Object
- #committed? ⇒ Boolean
-
#delete(name, options = {}) ⇒ Object
Removes the cookie on the client machine by setting the value to an empty string and the expiration date in the past.
-
#deleted?(name, options = {}) ⇒ Boolean
Whether the given cookie is to be deleted by this CookieJar.
- #each(&block) ⇒ Object
- #fetch(name, *args, &block) ⇒ Object
-
#initialize(request) ⇒ CookieJar
constructor
A new instance of CookieJar.
- #key?(name) ⇒ Boolean (also: #has_key?)
- #to_header ⇒ Object
- #update(other_hash) ⇒ Object
- #update_cookies_from_jar ⇒ Object
- #write(headers) ⇒ Object
Methods included from ChainedCookieJars
#encrypted, #permanent, #signed, #signed_or_encrypted
Constructor Details
#initialize(request) ⇒ CookieJar
Returns a new instance of CookieJar.
316 317 318 319 320 321 322 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 316 def initialize(request) @set_cookies = {} @delete_cookies = {} @request = request @cookies = {} @committed = false end |
Instance Attribute Details
#request ⇒ Object (readonly)
Returns the value of attribute request.
314 315 316 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 314 def request @request end |
Class Method Details
.build(req, cookies) ⇒ Object
308 309 310 311 312 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 308 def self.build(req, ) jar = new(req) jar.update() jar end |
Instance Method Details
#[](name) ⇒ Object
Returns the value of the cookie by name
, or nil
if no such cookie exists.
337 338 339 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 337 def [](name) @cookies[name.to_s] end |
#[]=(name, options) ⇒ Object
Sets the cookie named name
. The second argument may be the cookie's value or a hash of options as documented above.
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 371 def []=(name, ) if .is_a?(Hash) .symbolize_keys! value = [:value] else value = = { value: value } end () if @cookies[name.to_s] != value || [:expires] @cookies[name.to_s] = value @set_cookies[name.to_s] = @delete_cookies.delete(name.to_s) end value end |
#clear(options = {}) ⇒ Object
Removes all cookies on the client machine by calling delete
for each cookie.
415 416 417 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 415 def clear( = {}) @cookies.each_key { |k| delete(k, ) } end |
#commit! ⇒ Object
326 327 328 329 330 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 326 def commit! @committed = true @set_cookies.freeze @delete_cookies.freeze end |
#committed? ⇒ Boolean
324 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 324 def committed?; @committed; end |
#delete(name, options = {}) ⇒ Object
Removes the cookie on the client machine by setting the value to an empty string and the expiration date in the past. Like []=
, you can pass in an options hash to delete cookies with extra data such as a :path
.
394 395 396 397 398 399 400 401 402 403 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 394 def delete(name, = {}) return unless @cookies.has_key? name.to_s .symbolize_keys! () value = @cookies.delete(name.to_s) @delete_cookies[name.to_s] = value end |
#deleted?(name, options = {}) ⇒ Boolean
Whether the given cookie is to be deleted by this CookieJar. Like []=
, you can pass in an options hash to test if a deletion applies to a specific :path
, :domain
etc.
408 409 410 411 412 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 408 def deleted?(name, = {}) .symbolize_keys! () @delete_cookies[name.to_s] == end |
#each(&block) ⇒ Object
332 333 334 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 332 def each(&block) @cookies.each(&block) end |
#fetch(name, *args, &block) ⇒ Object
341 342 343 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 341 def fetch(name, *args, &block) @cookies.fetch(name.to_s, *args, &block) end |
#key?(name) ⇒ Boolean Also known as: has_key?
345 346 347 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 345 def key?(name) @cookies.key?(name.to_s) end |
#to_header ⇒ Object
365 366 367 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 365 def to_header @cookies.map { |k, v| "#{escape(k)}=#{escape(v)}" }.join "; " end |
#update(other_hash) ⇒ Object
353 354 355 356 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 353 def update(other_hash) @cookies.update other_hash.stringify_keys self end |
#update_cookies_from_jar ⇒ Object
358 359 360 361 362 363 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 358 def request_jar = @request..instance_variable_get(:@cookies) = request_jar.reject { |k, _| @delete_cookies.key?(k) || @set_cookies.key?(k) } @cookies.update if end |
#write(headers) ⇒ Object
419 420 421 422 423 |
# File 'lib/action_dispatch/middleware/cookies.rb', line 419 def write(headers) if header = (headers[HTTP_HEADER]) headers[HTTP_HEADER] = header end end |