class Mechanize::File

Synopsis

This is the default (and base) class for the Pluggable Parsers. If Mechanize cannot find an appropriate class to use for the content type, this class will be used. For example, if you download a JPG, Mechanize will not know how to parse it, so this class will be instantiated.

This is a good class to use as the base class for building your own pluggable parsers.

Example

require 'rubygems'
require 'mechanize'

agent = Mechanize.new
agent.get('http://example.com/foo.jpg').class  #=> Mechanize::File

Attributes

body[RW]
code[RW]
content[RW]
filename[RW]
header[RW]
response[RW]
uri[RW]

Public Class Methods

new(uri=nil, response=nil, body=nil, code=nil) { |self| ... } click to toggle source
# File lib/mechanize/file.rb, line 31
def initialize(uri=nil, response=nil, body=nil, code=nil)
  @uri, @body, @code = uri, body, code
  @response = Headers.new

  # Copy the headers in to a hash to prevent memory leaks
  if response
    response.each { |k,v|
      @response[k] = v
    }
  end

  @filename = 'index.html'

  # Set the filename
  if disposition = @response['content-disposition']
    disposition.split(/;\s*/).each do |pair|
      k,v = pair.split(/=/, 2)
      @filename = v if k && k.downcase == 'filename'
    end
  else
    if @uri
      @filename = @uri.path.split(/\//).last || 'index.html'
      @filename << ".html" unless @filename =~ /\./
    end
  end

  yield self if block_given?
end

Public Instance Methods

save(filename = nil)
Alias for: save_as
save_as(filename = nil) click to toggle source

Use this method to save the content of this object to filename

# File lib/mechanize/file.rb, line 61
def save_as(filename = nil)
  if filename.nil?
    filename = @filename
    number = 1
    while(::File.exists?(filename))
      filename = "#{@filename}.#{number}"
      number += 1
    end
  end

  ::File::open(filename, "wb") { |f|
    f.write body
  }
end
Also aliased as: save