Class: Mechanize::Download
- Inherits:
-
Object
- Object
- Mechanize::Download
- Includes:
- Parser
- Defined in:
- lib/mechanize/download.rb
Overview
Download is a pluggable parser for downloading files without loading them into memory first. You may subclass this class to handle content types you do not wish to load into memory first.
See Mechanize::PluggableParser for instructions on using this class.
Direct Known Subclasses
Constant Summary
Constants included from Parser
Instance Attribute Summary collapse
-
#body_io ⇒ Object
(also: #content)
readonly
Accessor for the IO-like that contains the body.
-
#filename ⇒ Object
The filename for this file based on the content-disposition of the response or the basename of the URL.
Attributes included from Parser
Instance Method Summary collapse
-
#body ⇒ Object
The body of this response as a String.
-
#initialize(uri = nil, response = nil, body_io = nil, code = nil) {|_self| ... } ⇒ Download
constructor
Creates a new download retrieved from the given
uri
andresponse
object. -
#save(filename = nil) ⇒ Object
(also: #save_as)
Saves a copy of the body_io to
filename
returns the filename. -
#save!(filename = nil) ⇒ Object
Use this method to save the content of body_io to
filename
.
Methods included from Parser
#extract_filename, #fill_header, #find_free_name
Constructor Details
#initialize(uri = nil, response = nil, body_io = nil, code = nil) {|_self| ... } ⇒ Download
Creates a new download retrieved from the given uri
and response
object. The body_io
is an IO-like containing the HTTP response body and code
is the HTTP status.
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/mechanize/download.rb', line 31 def initialize uri = nil, response = nil, body_io = nil, code = nil @uri = uri @body_io = body_io @code = code @full_path = false unless defined? @full_path fill_header response extract_filename yield self if block_given? end |
Instance Attribute Details
#body_io ⇒ Object (readonly) Also known as: content
Accessor for the IO-like that contains the body
22 23 24 |
# File 'lib/mechanize/download.rb', line 22 def body_io @body_io end |
#filename ⇒ Object
The filename for this file based on the content-disposition of the response or the basename of the URL
17 18 19 |
# File 'lib/mechanize/download.rb', line 17 def filename @filename end |
Instance Method Details
#body ⇒ Object
The body of this response as a String.
Take care, this may use lots of memory if the response body is large.
49 50 51 |
# File 'lib/mechanize/download.rb', line 49 def body @body_io.read.tap { @body_io.rewind } end |
#save(filename = nil) ⇒ Object Also known as: save_as
Saves a copy of the body_io to filename
returns the filename
57 58 59 60 |
# File 'lib/mechanize/download.rb', line 57 def save filename = nil filename = find_free_name filename save! filename end |
#save!(filename = nil) ⇒ Object
Use this method to save the content of body_io to filename
. This method will overwrite any existing filename that exists with the same name. returns the filename
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/mechanize/download.rb', line 70 def save! filename = nil filename ||= @filename dirname = File.dirname filename FileUtils.mkdir_p dirname ::File.open(filename, 'wb')do |io| until @body_io.eof? do io.write @body_io.read 16384 end end filename end |