Sha256: 211025c326a6c030751496b6a279cdc0dcaaed185011acce97c483ee447b0c92
Contents?: true
Size: 1.28 KB
Versions: 6
Compression:
Stored size: 1.28 KB
Contents
# encoding: utf-8 require 'uri' require 'net/http' module TTY module File DownloadError = Class.new(StandardError) class DownloadFile attr_reader :uri, :dest_path, :limit DEFAULT_REDIRECTS = 3 # @options # def initialize(url, dest_path, options = {}) @uri = URI.parse(url) @dest_path = dest_path @limit = options.fetch(:limit) { DEFAULT_REDIRECTS } end # Download a file # # @api public def call download(uri, dest_path, limit) end private # @api private def download(uri, path, limit) raise DownloadError, 'Redirect limit reached!' if limit.zero? content = '' Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| http.request_get(uri.path) do |response| case response when Net::HTTPSuccess response.read_body do |seg| content << seg end when Net::HTTPRedirection download(URI.parse(response['location']), path, limit - 1) else response.error! end end end content end end # DownloadFile end # File end # TTY
Version data entries
6 entries across 6 versions & 1 rubygems