class Mechanize::DirectorySaver

Unlike Mechanize::FileSaver, the directory saver places all downloaded files in a single pre-specified directory.

You must register the directory to save to before using the directory saver:

agent.pluggable_parser['image'] = \
  Mechanize::DirectorySaver.save_to 'images'

Public Class Methods

decode_filename?() click to toggle source

True if downloaded files should have their names decoded before saving.

# File lib/mechanize/directory_saver.rb, line 40
def self.decode_filename?
  @options[:decode_filename]
end
directory() click to toggle source

The directory downloaded files will be saved to.

# File lib/mechanize/directory_saver.rb, line 33
def self.directory
  @directory
end
new(uri = nil, response = nil, body_io = nil, code = nil) click to toggle source

Saves the body_io into the directory specified for this DirectorySaver by save_to. The filename is chosen by Mechanize::Parser#extract_filename.

Calls superclass method Mechanize::Download.new
# File lib/mechanize/directory_saver.rb, line 48
def initialize uri = nil, response = nil, body_io = nil, code = nil
  directory = self.class.directory

  raise Mechanize::Error,
    'no save directory specified - '        'use Mechanize::DirectorySaver.save_to '        'and register the resulting class' unless directory

  super

  @filename = CGI.unescape(@filename) if self.class.decode_filename?
  path = File.join directory, @filename

  save path
end
save_to(directory, options = {}) click to toggle source

Creates a DirectorySaver subclass that will save responses to the given directory. If options includes a decode_filename value set to true then the downloaded filename will be ran through CGI.unescape before being saved.

# File lib/mechanize/directory_saver.rb, line 21
def self.save_to directory, options = {}
  directory = File.expand_path directory

  Class.new self do |klass|
    klass.instance_variable_set :@directory, directory
    klass.instance_variable_set :@options, options
  end
end