Class: CGI::Cookie

Inherits:
Array show all
Defined in:
lib/action_controller/cgi_ext/cookie.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = '', *value) ⇒ Cookie

Create a new CGI::Cookie object.

The contents of the cookie can be specified as a name and one or more value arguments. Alternatively, the contents can be specified as a single hash argument. The possible keywords of this hash are as follows:

name

the name of the cookie. Required.

value

the cookie’s value or list of values.

path

the path for which this cookie applies. Defaults to the base directory of the CGI script.

domain

the domain for which this cookie applies.

expires

the time at which this cookie expires, as a Time object.

secure

whether this cookie is a secure cookie or not (default to false). Secure cookies are only transmitted to HTTPS servers.

http_only

whether this cookie can be accessed by client side scripts (e.g. document.cookie) or only over HTTP More details: msdn2.microsoft.com/en-us/library/system.web.httpcookie.httponly.aspx Defaults to false.

These keywords correspond to attributes of the cookie object.

Raises:

  • (ArgumentError)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/action_controller/cgi_ext/cookie.rb', line 29

def initialize(name = '', *value)
  if name.kind_of?(String)
    @name = name
    @value = Array(value)
    @domain = nil
    @expires = nil
    @secure = false
    @http_only = false
    @path = nil
  else
    @name = name['name']
    @value = Array(name['value'])
    @domain = name['domain']
    @expires = name['expires']
    @secure = name['secure'] || false
    @http_only = name['http_only'] || false
    @path = name['path']
  end

  raise ArgumentError, "`name' required" unless @name

  # simple support for IE
  unless @path
    %r|^(.*/)|.match(ENV['SCRIPT_NAME'])
    @path = ($1 or '')
  end

  super(@value)
end

Instance Attribute Details

#domainObject

Returns the value of attribute domain.



6
7
8
# File 'lib/action_controller/cgi_ext/cookie.rb', line 6

def domain
  @domain
end

#expiresObject

Returns the value of attribute expires.



6
7
8
# File 'lib/action_controller/cgi_ext/cookie.rb', line 6

def expires
  @expires
end

#http_onlyObject

Returns the value of attribute http_only.



7
8
9
# File 'lib/action_controller/cgi_ext/cookie.rb', line 7

def http_only
  @http_only
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/action_controller/cgi_ext/cookie.rb', line 6

def name
  @name
end

#pathObject

Returns the value of attribute path.



6
7
8
# File 'lib/action_controller/cgi_ext/cookie.rb', line 6

def path
  @path
end

#secureObject

Returns the value of attribute secure.



7
8
9
# File 'lib/action_controller/cgi_ext/cookie.rb', line 7

def secure
  @secure
end

#valueObject

Returns the value of attribute value.



6
7
8
# File 'lib/action_controller/cgi_ext/cookie.rb', line 6

def value
  @value
end

Class Method Details

.parse(raw_cookie) ⇒ Object

Parse a raw cookie string into a hash of cookie-name=>Cookie pairs.

cookies = CGI::Cookie::parse("raw_cookie_string")
  # { "name1" => cookie1, "name2" => cookie2, ... }


88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/action_controller/cgi_ext/cookie.rb', line 88

def self.parse(raw_cookie)
  cookies = Hash.new([])

  if raw_cookie
    raw_cookie.split(/[;,]\s?/).each do |pairs|
      name, values = pairs.split('=',2)
      next unless name and values
      name = CGI::unescape(name)
      values = values.split('&').collect!{|v| CGI::unescape(v) }
      unless cookies.has_key?(name)
        cookies[name] = new(name, *values)
      end
    end
  end

  cookies
end

Instance Method Details

#to_sObject

Convert the Cookie to its string representation.



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/action_controller/cgi_ext/cookie.rb', line 70

def to_s
  buf = ''
  buf << @name << '='
  buf << (@value.kind_of?(String) ? CGI::escape(@value) : @value.collect{|v| CGI::escape(v) }.join("&"))
  buf << '; domain=' << @domain if @domain
  buf << '; path=' << @path if @path
  buf << '; expires=' << CGI::rfc1123_date(@expires) if @expires
  buf << '; secure' if @secure
  buf << '; HttpOnly' if @http_only
  buf
end