class Flickrage::Service::Downloader
Public Instance Methods
run(image)
click to toggle source
# File lib/flickrage/service/downloader.rb, line 10 def run(image) uri = gen_uri(image.url) image.file_name = file_name(uri) unless image.file_name download_file(uri, image.local_path) check_image(image) rescue StandardError => e logger.debug(e) image end
Private Instance Methods
check_image(image)
click to toggle source
# File lib/flickrage/service/downloader.rb, line 61 def check_image(image) File.exist?(image.local_path) ? image.finish_download : image end
download_file(uri, path, mode = 'wb')
click to toggle source
# File lib/flickrage/service/downloader.rb, line 22 def download_file(uri, path, mode = 'wb') File.open(path, mode) do |file| file.flock(File::LOCK_EX) parse_file(uri, file) end ensure FileUtils.rm_f(path) if File.size(path).zero? end
file_name(uri)
click to toggle source
# File lib/flickrage/service/downloader.rb, line 57 def file_name(uri) File.basename(uri.path) end
gen_uri(url)
click to toggle source
# File lib/flickrage/service/downloader.rb, line 53 def gen_uri(url) URI.parse(url) end
parse_file(uri, file, limit = Flickrage.config.download_timeout)
click to toggle source
# File lib/flickrage/service/downloader.rb, line 31 def parse_file(uri, file, limit = Flickrage.config.download_timeout) raise Flickrage::DownloadError, 'Redirect limit arrived' if limit.zero? Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |conn| conn.request_get(uri.path) do |response| case response when Net::HTTPSuccess response.read_body do |seg| file << seg end when Net::HTTPRedirection download_file(gen_uri(response['location']), path, limit - 1) else response.error! end end end end