Class: Merb::Cookies

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

Instance Method Summary (collapse)

Constructor Details

- (Cookies) initialize(constructor = {})

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

- (Object) []=(key, value)

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.



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

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

- (Object) delete(name, options = {})

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



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

- (Hash) extract_headers(controller_defaults = {})

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.



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.

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