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

Creates 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 (defaults 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 in 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)


28
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
# File 'lib/action_controller/cgi_ext/cookie.rb', line 28

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 = (name['value'].kind_of?(String) ? [name['value']] : Array(name['value'])).delete_if(&:blank?)
    @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

Parses a raw cookie string into a hash of cookie-name => cookie-object pairs.

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


93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/action_controller/cgi_ext/cookie.rb', line 93

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

  if raw_cookie
    raw_cookie.split(/;\s?/).each do |pairs|
      name, value = pairs.split('=',2)
      next unless name and value
      name = CGI::unescape(name)
      unless cookies.has_key?(name)
        cookies[name] = new(name, CGI::unescape(value))
      end
    end
  end

  cookies
end

Instance Method Details

#respond_to?(method, include_private = false) ⇒ Boolean

FIXME: work around broken 1.8.7 DelegateClass#respond_to?

Returns:

  • (Boolean)


82
83
84
85
# File 'lib/action_controller/cgi_ext/cookie.rb', line 82

def respond_to?(method, include_private = false)
  return true if super(method)
  return __getobj__.respond_to?(method, include_private)
end

#to_sObject

Converts the Cookie to its string representation.



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

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