Class: Merb::Test::CookieJar

Inherits:
Object
  • Object
show all
Defined in:
lib/merb-core/test/helpers/cookie_jar.rb

Instance Method Summary collapse

Constructor Details

#initializeCookieJar

:api: private


78
79
80
# File 'lib/merb-core/test/helpers/cookie_jar.rb', line 78

def initialize
  @jars = {}
end

Instance Method Details

#for(jar, uri) ⇒ Object

:api: private


105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/merb-core/test/helpers/cookie_jar.rb', line 105

def for(jar, uri)
  cookies = {}
  
  @jars[jar] ||= []
  # The cookies are sorted by most specific first. So, we loop through
  # all the cookies in order and add it to a hash by cookie name if
  # the cookie can be sent to the current URI. It's added to the hash
  # so that when we are done, the cookies will be unique by name and
  # we'll have grabbed the most specific to the URI.
  @jars[jar].each do |cookie|
    cookies[cookie.name] = cookie.raw if cookie.matches?(uri)
  end
  
  cookies.values.join(';')
end

#update(jar, uri, raw_cookies) ⇒ Object

:api: private


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/merb-core/test/helpers/cookie_jar.rb', line 83

def update(jar, uri, raw_cookies)
  return unless raw_cookies
  # Initialize all the the received cookies
  cookies = []
  raw_cookies.each do |raw|
    c = Cookie.new(raw, uri.host)
    cookies << c if c.valid?(uri)
  end
  
  @jars[jar] ||= []
  
  # Remove all the cookies that will be updated
  @jars[jar].delete_if do |existing|
    cookies.find { |c| [c.name, c.domain, c.path] == [existing.name, existing.domain, existing.path] }
  end
  
  @jars[jar].concat cookies
  
  @jars[jar].sort!
end