Sha256: 88c6fb3ff6746d61768abcdfdd48c6988d764201cb566458c96b6ce2cc213da3
Contents?: true
Size: 1.3 KB
Versions: 3
Compression:
Stored size: 1.3 KB
Contents
# frozen_string_literal: true 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.request_uri) 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.join end end # DownloadFile end # File end # TTY
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
tty-file-0.8.0 | lib/tty/file/download_file.rb |
tty-file-0.7.1 | lib/tty/file/download_file.rb |
tty-file-0.7.0 | lib/tty/file/download_file.rb |