Sha256: dff91fa4423c8e6253a0194f5e2211d287e6368620a3d5390a67039ca26d35a6
Contents?: true
Size: 1.28 KB
Versions: 1
Compression:
Stored size: 1.28 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, limit: nil) @uri = URI.parse(url) @dest_path = dest_path @limit = 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
tty-file-0.10.0 | lib/tty/file/download_file.rb |