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 27 |
# 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] ||= {} @jar[normal_domain][.path][.name] = cleanup end |
#clear! ⇒ Object
Clear the cookie jar
100 101 102 |
# File 'lib/mechanize/cookie_jar.rb', line 100 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 |
# File 'lib/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 { || ! .expired? } end |
#dump_cookiestxt(io) ⇒ Object
Write cookies to Mozilla cookies.txt-style IO stream
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/mechanize/cookie_jar.rb', line 141 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
49 50 51 |
# File 'lib/mechanize/cookie_jar.rb', line 49 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
86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/mechanize/cookie_jar.rb', line 86 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
105 106 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 |
# File 'lib/mechanize/cookie_jar.rb', line 105 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 = (expires_seconds == 0) ? nil : 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_seconds != 0) && (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
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/mechanize/cookie_jar.rb', line 68 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
53 54 55 56 57 58 59 60 61 |
# File 'lib/mechanize/cookie_jar.rb', line 53 def to_a = [] @jar.each do |domain, paths| paths.each do |path, names| << names.values end end .flatten end |