Class: Merb::Cookies

Inherits:
Mash show all
Defined in:
merb-core/lib/merb-core/dispatch/cookies.rb

Instance Method Summary collapse

Constructor Details

#initialize(constructor = {}) ⇒ Cookies

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Cookies



6
7
8
9
10
# File 'merb-core/lib/merb-core/dispatch/cookies.rb', line 6

def initialize(constructor = {})
  @_options_lookup  = Mash.new
  @_cookie_defaults = { "domain" => Merb::Controller._default_cookie_domain, "path" => '/' }
  super constructor
end

Instance Method Details

#[]=(key, value) ⇒ Object

Implicit assignment of cookie key and value.

By using this method, a cookie key is marked for being included in the Set-Cookie response header.

Parameters:

  • name (#to_s)

    Name of the cookie.

  • value (#to_s)

    Value of the cookie.



21
22
23
24
# File 'merb-core/lib/merb-core/dispatch/cookies.rb', line 21

def []=(key, value)
  @_options_lookup[key] ||= {}
  super
end

#delete(name, options = {}) ⇒ Object

Removes the cookie on the client machine by setting the value to an empty string and setting its expiration date into the past.

Parameters:

  • name (#to_s)

    Name of the cookie to delete.

  • options (Hash) (defaults to: {})

    Additional options to pass to #set_cookie.



57
58
59
# File 'merb-core/lib/merb-core/dispatch/cookies.rb', line 57

def delete(name, options = {})
  set_cookie(name, "", options.merge("expires" => Time.at(0)))
end

#extract_headers(controller_defaults = {}) ⇒ Hash

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Generate any necessary headers.

Returns:

  • (Hash)

    The headers to set, or an empty array if no cookies are set.



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'merb-core/lib/merb-core/dispatch/cookies.rb', line 67

def extract_headers(controller_defaults = {})
  defaults = @_cookie_defaults.merge(controller_defaults)
  cookies = []
  self.each do |name, value|
    # Only set cookies that marked for inclusion in the response header. 
    next unless @_options_lookup[name]
    options = defaults.merge(@_options_lookup[name])
    if (expiry = options["expires"]).respond_to?(:gmtime)
      options["expires"] = expiry.gmtime.strftime(Merb::Const::COOKIE_EXPIRATION_FORMAT)
    end
    secure  = options.delete("secure")
    http_only = options.delete("http_only")
    kookie  = "#{name}=#{Merb::Parse.escape(value)}; "
    # WebKit in particular doens't like empty cookie options - skip them.
    options.each { |k, v| kookie << "#{k}=#{v}; " unless v.blank? }
    kookie  << 'secure; ' if secure
    kookie  << 'HttpOnly; ' if http_only
    cookies << kookie.rstrip
  end
  cookies.empty? ? {} : { 'Set-Cookie' => cookies.join(Merb::Const::NEWLINE) }
end

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Explicit assignment of cookie key, value and options

By using this method, a cookie key is marked for being included in the Set-Cookie response header.

Parameters:

  • options (Hash) (defaults to: {})

    Additional options for the cookie

  • name (#to_s)

    Name of the cookie.

  • value (#to_s)

    Value of the cookie.

Options Hash (options):

  • :path (String) — default: "/"

    The path for which this cookie applies.

  • :expires (Time)

    Cookie expiry date.

  • :domain (String)

    The domain for which this cookie applies.

  • :secure (Boolean)

    Security flag.

  • :http_only (Boolean)

    HttpOnly cookies



45
46
47
48
# File 'merb-core/lib/merb-core/dispatch/cookies.rb', line 45

def set_cookie(name, value, options = {})
  @_options_lookup[name] = options
  self[name] = value
end