class MiniPortile

def download_file(url, full_path, count = 3)

and adaptations of Wayne's RailsInstaller
Slighly modified from RubyInstaller uri_ext, Rubinius configure
def download_file(url, full_path, count = 3)
  return if File.exist?(full_path)
  uri = URI.parse(url)
  case uri.scheme.downcase
  when /ftp/
    download_file_ftp(uri, full_path)
  when /http|https/
    download_file_http(url, full_path, count)
  when /file/
    download_file_file(uri, full_path)
  else
    raise ArgumentError.new("Unsupported protocol for #{url}")
  end
rescue Exception => e
  File.unlink full_path if File.exist?(full_path)
  raise e
end