Class: WWW::Mechanize::CookieJar
- Inherits:
-
Object
- Object
- WWW::Mechanize::CookieJar
- Defined in:
- lib/www/mechanize/cookie_jar.rb
Overview
This class is used to manage the Cookies that have been returned from any particular website.
Instance Attribute Summary collapse
-
#jar ⇒ Object
readonly
Returns the value of attribute jar.
Instance Method Summary collapse
-
#add(uri, cookie) ⇒ Object
Add a cookie to the Jar.
-
#clear! ⇒ Object
Clear the cookie jar.
-
#cookies(url) ⇒ Object
Fetch the cookies that should be used for the URI object passed in.
-
#dump_cookiestxt(io) ⇒ Object
Write cookies to Mozilla cookies.txt-style IO stream.
- #empty?(url) ⇒ Boolean
-
#initialize ⇒ CookieJar
constructor
A new instance of CookieJar.
-
#load(file, format = :yaml) ⇒ Object
Load cookie jar from a file in the format specified.
-
#load_cookiestxt(io) ⇒ Object
Read cookies from Mozilla cookies.txt-style IO stream.
-
#save_as(file, format = :yaml) ⇒ Object
Save the cookie jar to a file in the format specified.
- #to_a ⇒ Object
Constructor Details
#initialize ⇒ CookieJar
Returns a new instance of CookieJar.
10 11 12 |
# File 'lib/www/mechanize/cookie_jar.rb', line 10 def initialize @jar = {} end |
Instance Attribute Details
#jar ⇒ Object (readonly)
Returns the value of attribute jar.
8 9 10 |
# File 'lib/www/mechanize/cookie_jar.rb', line 8 def jar @jar end |
Instance Method Details
#add(uri, cookie) ⇒ Object
Add a cookie to the Jar.
15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/www/mechanize/cookie_jar.rb', line 15 def add(uri, ) return unless uri.host =~ /#{CookieJar.strip_port(.domain)}$/i normal_domain = .domain.downcase unless @jar.has_key?(normal_domain) @jar[normal_domain] = Hash.new { |h,k| h[k] = {} } end @jar[normal_domain][.path][.name] = cleanup end |
#clear! ⇒ Object
Clear the cookie jar
102 103 104 |
# File 'lib/www/mechanize/cookie_jar.rb', line 102 def clear! @jar = {} end |
#cookies(url) ⇒ Object
Fetch the cookies that should be used for the URI object passed in.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/www/mechanize/cookie_jar.rb', line 30 def (url) cleanup url.path = '/' if url.path.empty? domains = @jar.find_all { |domain, _| url.host =~ /#{CookieJar.strip_port(domain)}$/i } return [] unless domains.length > 0 = domains.map { |_,paths| paths.find_all { |path, _| url.path =~ /^#{Regexp.escape(path)}/ }.map { |_,| .values } }.flatten .find_all { || !.expires || Time.now < .expires } end |
#dump_cookiestxt(io) ⇒ Object
Write cookies to Mozilla cookies.txt-style IO stream
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/www/mechanize/cookie_jar.rb', line 144 def (io) to_a.each do || fields = [] fields[0] = .domain if .domain =~ /^\./ fields[1] = "TRUE" else fields[1] = "FALSE" end fields[2] = .path if .secure == true fields[3] = "TRUE" else fields[3] = "FALSE" end fields[4] = .expires.to_i.to_s fields[5] = .name fields[6] = .value io.puts(fields.join("\t")) end end |
#empty?(url) ⇒ Boolean
51 52 53 |
# File 'lib/www/mechanize/cookie_jar.rb', line 51 def empty?(url) (url).length > 0 ? false : true end |
#load(file, format = :yaml) ⇒ Object
Load cookie jar from a file in the format specified.
Available formats: :yaml <- YAML structure. :cookiestxt <- Mozilla’s cookies.txt format
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/www/mechanize/cookie_jar.rb', line 88 def load(file, format = :yaml) @jar = ::File.open(file) { |f| case format when :yaml then YAML::load(f) when :cookiestxt then (f) else raise "Unknown cookie jar file format" end } end |
#load_cookiestxt(io) ⇒ Object
Read cookies from Mozilla cookies.txt-style IO stream
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/www/mechanize/cookie_jar.rb', line 108 def (io) now = Time.now fakeuri = Struct.new(:host) # add_cookie wants something resembling a URI. io.each_line do |line| line.chomp! line.gsub!(/#.+/, '') fields = line.split("\t") next if fields.length != 7 expires_seconds = fields[4].to_i begin expires = Time.at(expires_seconds) rescue next # Just in case we ever decide to support DateTime... # expires = DateTime.new(1970,1,1) + ((expires_seconds + 1) / (60*60*24.0)) end next if expires < now c = WWW::Mechanize::Cookie.new(fields[5], fields[6]) c.domain = fields[0] # Field 1 indicates whether the cookie can be read by other machines at the same domain. # This is computed by the cookie implementation, based on the domain value. c.path = fields[2] # Path for which the cookie is relevant c.secure = (fields[3] == "TRUE") # Requires a secure connection c.expires = expires # Time the cookie expires. c.version = 0 # Conforms to Netscape cookie spec. add(fakeuri.new(c.domain), c) end @jar end |
#save_as(file, format = :yaml) ⇒ Object
Save the cookie jar to a file in the format specified.
Available formats: :yaml <- YAML structure :cookiestxt <- Mozilla’s cookies.txt format
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/www/mechanize/cookie_jar.rb', line 70 def save_as(file, format = :yaml) ::File.open(file, "w") { |f| case format when :yaml then YAML::dump(@jar, f) when :cookiestxt then (f) else raise "Unknown cookie jar file format" end } end |
#to_a ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/www/mechanize/cookie_jar.rb', line 55 def to_a = [] @jar.each do |domain, paths| paths.each do |path, names| << names.values end end .flatten end |