module Mechanize::Parser
The parser module provides standard methods for accessing the headers and content of a response that are shared across pluggable parsers.
Constants
- SPECIAL_FILENAMES
Special filenames that must be escaped
Attributes
The HTTP response code
The Mechanize::Headers for this file
The Mechanize::Headers for this file
The URI this file was retrieved from
Public Instance Methods
Access HTTP header
by name
# File lib/mechanize/parser.rb, line 64 def_delegator :header, :[], :[]
Set HTTP header
to
value
# File lib/mechanize/parser.rb, line 74 def_delegator :header, :[]=, :[]=
Enumerate HTTP headers
# File lib/mechanize/parser.rb, line 91 def_delegator :header, :each, :each
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.
# File lib/mechanize/parser.rb, line 106 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'] then content_disposition = Mechanize::HTTP::ContentDispositionParser.parse disposition if content_disposition && content_disposition.filename && content_disposition.filename != '' then filename = content_disposition.filename filename = filename.split(/[\\/]/).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
Creates a Mechanize::Header from the Net::HTTPResponse
response
.
This allows the Net::HTTPResponse to be garbage collected sooner.
# File lib/mechanize/parser.rb, line 155 def fill_header response @response = Mechanize::Headers.new response.each { |k,v| @response[k] = v } if response @response end
Finds a free filename based on filename
, but is not race-free
# File lib/mechanize/parser.rb, line 168 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
Is the named header
present?
# File lib/mechanize/parser.rb, line 84 def_delegator :header, :key?, :key?