Parent

Class Index [+]

Quicksearch

Mechanize::CookieJar

This class is used to manage the Cookies that have been returned from any particular website.

Attributes

jar[R]

Public Class Methods

new() click to toggle source
    # File lib/mechanize/cookie_jar.rb, line 9
 9:     def initialize
10:       @jar = {}
11:     end

Private Class Methods

strip_port(host) click to toggle source
     # File lib/mechanize/cookie_jar.rb, line 182
182:     def self.strip_port(host)
183:       host.gsub(/:[0-9]+$/,'')
184:     end

Public Instance Methods

add(uri, cookie) click to toggle source

Add a cookie to the Jar.

    # File lib/mechanize/cookie_jar.rb, line 14
14:     def add(uri, cookie)
15:       return unless uri.host =~ /#{CookieJar.strip_port(cookie.domain)}$/
16: 
17:       normal_domain = cookie.domain.downcase
18: 
19:       unless @jar.has_key?(normal_domain)
20:         @jar[normal_domain] = Hash.new { |h,k| h[k] = {} }
21:       end
22: 
23:       @jar[normal_domain][cookie.path] ||= {}
24:       @jar[normal_domain][cookie.path][cookie.name] = cookie
25:       cleanup
26:       cookie
27:     end
clear!() click to toggle source

Clear the cookie jar

     # File lib/mechanize/cookie_jar.rb, line 100
100:     def clear!
101:       @jar = {}
102:     end
cookies(url) click to toggle source

Fetch the cookies that should be used for the URI object passed in.

    # File lib/mechanize/cookie_jar.rb, line 30
30:     def cookies(url)
31:       cleanup
32:       url.path = '/' if url.path.empty?
33: 
34:       domains = @jar.find_all { |domain, _|
35:         url.host =~ /#{CookieJar.strip_port(domain)}$/
36:       }
37: 
38:       return [] unless domains.length > 0
39: 
40:       cookies = domains.map { |_,paths|
41:         paths.find_all { |path, _|
42:           url.path =~ /^#{Regexp.escape(path)}/
43:         }.map { |_,cookie| cookie.values }
44:       }.flatten
45: 
46:       cookies.find_all { |cookie| ! cookie.expired? }
47:     end
dump_cookiestxt(io) click to toggle source

Write cookies to Mozilla cookies.txt-style IO stream

     # File lib/mechanize/cookie_jar.rb, line 141
141:     def dump_cookiestxt(io)
142:       to_a.each do |cookie|
143:         fields = []
144:         fields[0] = cookie.domain
145: 
146:         if cookie.domain =~ /^\./
147:           fields[1] = "TRUE"
148:         else
149:           fields[1] = "FALSE"
150:         end
151: 
152:         fields[2] = cookie.path
153: 
154:         if cookie.secure == true
155:           fields[3] = "TRUE"
156:         else
157:           fields[3] = "FALSE"
158:         end
159: 
160:         fields[4] = cookie.expires.to_i.to_s
161: 
162:         fields[5] = cookie.name
163:         fields[6] = cookie.value
164:         io.puts(fields.join("\t"))
165:       end
166:     end
empty?(url) click to toggle source
    # File lib/mechanize/cookie_jar.rb, line 49
49:     def empty?(url)
50:       cookies(url).length > 0 ? false : true
51:     end
load(file, format = :yaml) click to toggle source

Load cookie jar from a file in the format specified.

Available formats: :yaml <- YAML structure. :cookiestxt <- Mozilla’s cookies.txt format

    # File lib/mechanize/cookie_jar.rb, line 86
86:     def load(file, format = :yaml)
87:       @jar = ::File.open(file) { |f|
88:         case format
89:         when :yaml then
90:           YAML::load(f)
91:         when :cookiestxt then
92:           load_cookiestxt(f)
93:         else
94:           raise "Unknown cookie jar file format"
95:         end
96:       }
97:     end
load_cookiestxt(io) click to toggle source

Read cookies from Mozilla cookies.txt-style IO stream

     # File lib/mechanize/cookie_jar.rb, line 105
105:     def load_cookiestxt(io)
106:       now = Time.now
107:       fakeuri = Struct.new(:host)    # add_cookie wants something resembling a URI.
108: 
109:       io.each_line do |line|
110:         line.chomp!
111:         line.gsub!(/#.+/, '')
112:         fields = line.split("\t")
113: 
114:         next if fields.length != 7
115: 
116:         expires_seconds = fields[4].to_i
117:         begin
118:           expires = (expires_seconds == 0) ? nil : Time.at(expires_seconds)
119:         rescue
120:           next
121:           # Just in case we ever decide to support DateTime...
122:           # expires = DateTime.new(1970,1,1) + ((expires_seconds + 1) / (60*60*24.0))
123:         end
124:         next if (expires_seconds != 0) && (expires < now)
125: 
126:         c = Mechanize::Cookie.new(fields[5], fields[6])
127:         c.domain = fields[0]
128:         # Field 1 indicates whether the cookie can be read by other machines at the same domain.
129:         # This is computed by the cookie implementation, based on the domain value.
130:         c.path = fields[2]               # Path for which the cookie is relevant
131:         c.secure = (fields[3] == "TRUE") # Requires a secure connection
132:         c.expires = expires             # Time the cookie expires.
133:         c.version = 0                   # Conforms to Netscape cookie spec.
134: 
135:         add(fakeuri.new(c.domain), c)
136:       end
137:       @jar
138:     end
save_as(file, format = :yaml) click to toggle source

Save the cookie jar to a file in the format specified.

Available formats: :yaml <- YAML structure :cookiestxt <- Mozilla’s cookies.txt format

    # File lib/mechanize/cookie_jar.rb, line 68
68:     def save_as(file, format = :yaml)
69:       ::File.open(file, "w") { |f|
70:         case format
71:         when :yaml then
72:           YAML::dump(@jar, f)
73:         when :cookiestxt then
74:           dump_cookiestxt(f)
75:         else
76:           raise "Unknown cookie jar file format"
77:         end
78:       }
79:     end
to_a() click to toggle source
    # File lib/mechanize/cookie_jar.rb, line 53
53:     def to_a
54:       cookies = []
55:       @jar.each do |domain, paths|
56:         paths.each do |path, names|
57:           cookies << names.values
58:         end
59:       end
60:       cookies.flatten
61:     end

Private Instance Methods

cleanup() click to toggle source

Remove expired cookies

     # File lib/mechanize/cookie_jar.rb, line 170
170:     def cleanup
171:       @jar.each do |domain, paths|
172:         paths.each do |path, names|
173:           names.each do |cookie_name, cookie|
174:             if cookie.expired?
175:               paths[path].delete(cookie_name)
176:             end
177:           end
178:         end
179:       end
180:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.