Class: Mechanize::CookieJar
- Inherits:
-
Object
- Object
- Mechanize::CookieJar
- Defined in:
- lib/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.
9 10 11 |
# File 'lib/mechanize/cookie_jar.rb', line 9 def initialize @jar = {} end |
Instance Attribute Details
#jar ⇒ Object (readonly)
Returns the value of attribute jar.
7 8 9 |
# File 'lib/mechanize/cookie_jar.rb', line 7 def jar @jar end |
Instance Method Details
#add(uri, cookie) ⇒ Object
Add a cookie to the Jar.
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/mechanize/cookie_jar.rb', line 14 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
101 102 103 |
# File 'lib/mechanize/cookie_jar.rb', line 101 def clear! @jar = {} end |
#cookies(url) ⇒ Object
Fetch the cookies that should be used for the URI object passed in.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mechanize/cookie_jar.rb', line 29 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
143 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 |
# File 'lib/mechanize/cookie_jar.rb', line 143 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
50 51 52 |
# File 'lib/mechanize/cookie_jar.rb', line 50 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
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/mechanize/cookie_jar.rb', line 87 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
107 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 |
# File 'lib/mechanize/cookie_jar.rb', line 107 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 = 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
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/mechanize/cookie_jar.rb', line 69 def save_as(file, format = :yaml) ::File.open(file, "wb") { |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
54 55 56 57 58 59 60 61 62 |
# File 'lib/mechanize/cookie_jar.rb', line 54 def to_a = [] @jar.each do |domain, paths| paths.each do |path, names| << names.values end end .flatten end |