Module: Mechanize::Parser
Overview
The parser module provides standard methods for accessing the headers and content of a response that are shared across pluggable parsers.
Constant Summary collapse
- SPECIAL_FILENAMES =
Special filenames that must be escaped
/\A#{special_filenames}/i
Instance Attribute Summary collapse
-
#code ⇒ Object
The HTTP response code.
-
#response ⇒ Object
(also: #header)
The Mechanize::Headers for this file.
-
#uri ⇒ Object
The URI this file was retrieved from.
Instance Method Summary collapse
-
#extract_filename(full_path = @full_path) ⇒ Object
Extracts the filename from a Content-Disposition header in the #response or from the URI.
-
#fill_header(response) ⇒ Object
Creates a Mechanize::Header from the Net::HTTPResponse
response
. -
#find_free_name(filename) ⇒ Object
Finds a free filename based on
filename
, but is not race-free.
Instance Attribute Details
#code ⇒ Object
The HTTP response code
55 56 57 |
# File 'lib/mechanize/parser.rb', line 55 def code @code end |
#response ⇒ Object Also known as: header
The Mechanize::Headers for this file
48 49 50 |
# File 'lib/mechanize/parser.rb', line 48 def response @response end |
#uri ⇒ Object
The URI this file was retrieved from
43 44 45 |
# File 'lib/mechanize/parser.rb', line 43 def uri @uri end |
Instance Method Details
#extract_filename(full_path = @full_path) ⇒ Object
Extracts the filename from a Content-Disposition header in the #response or from the URI. If full_path
is true the filename will include the host name and path to the resource, otherwise a filename in the current directory is given.
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 141 142 143 144 145 146 147 148 149 |
# File 'lib/mechanize/parser.rb', line 107 def extract_filename full_path = @full_path handled = false if @uri then uri = @uri uri += 'index.html' if uri.path.end_with? '/' path = uri.path.split(/\//) filename = path.pop || 'index.html' else path = [] filename = 'index.html' end # Set the filename if (disposition = @response['content-disposition']) content_disposition = Mechanize::HTTP::ContentDispositionParser.parse disposition if content_disposition && content_disposition.filename && content_disposition.filename != '' filename = content_disposition.filename filename = filename.rpartition(/[\\\/]/).last handled = true end end if not handled and @uri then filename << '.html' unless filename =~ /\./ filename << "?#{@uri.query}" if @uri.query end if SPECIAL_FILENAMES =~ filename then filename = "_#{filename}" end filename = filename.tr "\x00-\x20<>:\"/\\|?*", '_' @filename = if full_path then File.join @uri.host, path, filename else filename end end |
#fill_header(response) ⇒ Object
Creates a Mechanize::Header from the Net::HTTPResponse response
.
This allows the Net::HTTPResponse to be garbage collected sooner.
156 157 158 159 160 161 162 163 164 |
# File 'lib/mechanize/parser.rb', line 156 def fill_header response @response = Mechanize::Headers.new response.each { |k,v| @response[k] = v } if response @response end |
#find_free_name(filename) ⇒ Object
Finds a free filename based on filename
, but is not race-free
169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/mechanize/parser.rb', line 169 def find_free_name filename base_filename = filename ||= @filename number = 1 while File.exist? filename do filename = "#{base_filename}.#{number}" number += 1 end filename end |