class ESMDl::Download

Public Class Methods

new(release, with_doc = true, with_metadata = false) click to toggle source
# File lib/esmdl/download.rb, line 7
def initialize(release, with_doc = true, with_metadata = false)
  @release = release
  fetch download_url(@release['rlsArtifactsPath'], @release['rlsArtifactsFile']), @release['rlsArtifactsFile']
  fetch download_url(@release['rlsDocPath'], @release['rlsDocFile']), @release['rlsDocFile'] if with_doc
  fetch download_url(@release['rlsMetadataPath'], @release['rlsMetadataFile']), @release['rlsMetadataFile'] if with_metadata
end

Public Instance Methods

download_url(filepath, filename) click to toggle source
# File lib/esmdl/download.rb, line 14
def download_url(filepath, filename)
  url = "#{ESMDl.config.base_url}/releaseservices/Release?"
  url << "login=#{ESMDl.config.username}&"
  url << "productid=#{@release['productId']}&"
  url << "rlsversion=#{@release['version']}&"
  url << "esmversion=#{ESMDl.config.esmversion}&"
  url << "filepath=#{URI.encode(filepath)}&"
  url << "filename=#{filename}&"
end
fetch(url, filename) click to toggle source
# File lib/esmdl/download.rb, line 24
def fetch(url, filename)
  return if filename == "null"
  full_path = "#{ESMDl.config.stage_dir}#{filename}"
  print "Starting download of #{full_path}..."

  uri = URI(url)
  Net::HTTP.start(uri.host, uri.port, use_ssl: true, ciphers: "TLSv1.2:!aNULL:!eNULL", ssl_version: "TLSv1_2") do |http|
    request = Net::HTTP::Get.new uri.request_uri
    request.basic_auth ESMDl.config.username, ESMDl.config.password
    http.request request do |response|
      open full_path, 'w' do |io|
        response.read_body do |chunk|
          io.write chunk
        end
      end
    end
  end

  filesize = File::size(full_path)
  puts "done! (#{ Filesize.from("#{filesize} B").pretty})"
end