Sha256: 67dc3779ff0de86ffc97c224fd630c18c34f94e4b35606580d23820869040996
Contents?: true
Size: 1.47 KB
Versions: 1
Compression:
Stored size: 1.47 KB
Contents
# -*- encoding : utf-8 -*- module Nyaa class Downloader attr_accessor :target, :destination, :retries attr_accessor :response, :filename def initialize(url, path, retries = 3) self.target = url self.destination = sane_dir(path) self.retries = retries self.response = request self.filename = name_from_disposition @fail = nil end def save unless @fail File.open("#{self.destination}/#{filename}", 'w') do |f| f.write(self.response.read) end end end def failed? @fail end private def request begin response = open(self.target) rescue StandardError => e if retries > 0 retries -= 1 sleep = 1 retry end @fail = true end @fail = false response end # Filename from Content Disposition Header Field # http://www.ietf.org/rfc/rfc2183.txt def name_from_disposition disp = self.response.meta['content-disposition'] disp_filename = disp.split(/;\s+/).select { |v| v =~ /filename\s*=/ }[0] re = /([""'])(?:(?=(\\?))\2.)*?\1/ if re.match(disp_filename) filename = re.match(disp_filename).to_s.gsub(/\A['"]+|['"]+\Z/, "") else nil end end def sane_dir(path) path = Dir.pwd if path.nil? || !File.writable?(path) FileUtils.mkdir_p path unless File.directory?(path) path end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
nyaa-1.0.3 | lib/nyaa/downloader.rb |