Class: Mechanize::File

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/mechanize/file.rb

Overview

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

Direct Known Subclasses

FileSaver, Page

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri = nil, response = nil, body = nil, code = nil) {|_self| ... } ⇒ File

Returns a new instance of File.

Yields:

  • (_self)

Yield Parameters:



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/mechanize/file.rb', line 31

def initialize(uri=nil, response=nil, body=nil, code=nil)
  @uri = uri
  @body = body
  @code = 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

Instance Attribute Details

#bodyObject Also known as: content

Returns the value of attribute body.



21
22
23
# File 'lib/mechanize/file.rb', line 21

def body
  @body
end

#codeObject

Returns the value of attribute code.



21
22
23
# File 'lib/mechanize/file.rb', line 21

def code
  @code
end

#filenameObject

Returns the value of attribute filename.



21
22
23
# File 'lib/mechanize/file.rb', line 21

def filename
  @filename
end

#responseObject Also known as: header

Returns the value of attribute response.



21
22
23
# File 'lib/mechanize/file.rb', line 21

def response
  @response
end

#uriObject

Returns the value of attribute uri.



21
22
23
# File 'lib/mechanize/file.rb', line 21

def uri
  @uri
end

Instance Method Details

#save_as(filename = nil) ⇒ Object Also known as: save

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



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/mechanize/file.rb', line 63

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