Sha256: 2bf89bb540ae31428a91bbbe3e08aa3567c47fbcb8b97b86bfc03d58554bbb63

Contents?: true

Size: 1.23 KB

Versions: 5

Compression:

Stored size: 1.23 KB

Contents

require "net/http"

module DNN

  class DNN_DownloadError < DNN_Error; end

  class Downloader
    def self.download(url, dir_path = nil)
      unless dir_path
        Dir.mkdir("#{__dir__}/downloads") unless Dir.exist?("#{__dir__}/downloads")
        dir_path = "#{__dir__}/downloads"
      end
      Downloader.new(url).download(dir_path)
    rescue => e
      raise DNN_DownloadError.new(e.message)
    end

    def initialize(url)
      @url = url
      *, @fqdn, @path = *url.match(%r`https?://(.+?)(/.+)`)
    end

    def download(dir_path)
      puts %`download "#{@url}"`
      buf = ""
      Net::HTTP.start(@fqdn) do |http|
        content_length = http.head(@path).content_length
        http.get(@path) do |body_segment|
          buf << body_segment
          log = "\r"
          40.times do |i|
            if i < buf.size * 40 / content_length
              log << "="
            elsif i == buf.size * 40 / content_length
              log << ">"
            else
              log << "_"
            end
          end
          log << "  #{buf.size}/#{content_length}"
          print log
        end
        puts ""
      end
      file_name = @path.match(%r`.*/(.+)`)[1]
      File.binwrite("#{dir_path}/#{file_name}", buf)
    end
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ruby-dnn-0.13.3 lib/dnn/datasets/downloader.rb
ruby-dnn-0.13.2 lib/dnn/datasets/downloader.rb
ruby-dnn-0.13.1 lib/dnn/datasets/downloader.rb
ruby-dnn-0.13.0 lib/dnn/datasets/downloader.rb
ruby-dnn-0.12.4 lib/dnn/downloader.rb