module Kosmos::PackageDownloads
Public Class Methods
download_and_unzip_package(package, opts = {})
click to toggle source
Downloads and unzips a package. This will call download! on its own, and will return the location where the package was downloaded to as a Pathname.
# File lib/kosmos/package_downloads.rb, line 6 def self.download_and_unzip_package(package, opts = {}) download_file = download_package(package, opts) Util.log "Unzipping ..." output_path = Pathname.new(download_file.path).parent.to_s Zip::File.open(download_file.path) do |zip_file| zip_file.each do |entry| destination = File.join(output_path, entry.name) parent_dir = File.expand_path('..', destination) FileUtils.mkdir_p(parent_dir) unless File.exists?(parent_dir) entry.extract(destination) end end File.delete(File.absolute_path(download_file)) output_path end
download_package(package, opts = {})
click to toggle source
Downloads the zipfile for a package using its URL, unless a cached version is found first. Uses DownloadUrl
to intelligently resolve download URLs.
Returns the file downloaded, which is created in a temp directory.
# File lib/kosmos/package_downloads.rb, line 33 def self.download_package(package, opts = {}) cached_download = download_from_cache(package) downloaded_file = if cached_download Util.log "Use a cached version of #{package.title} ..." cached_download else Util.log "The package is found at #{package.url}. "\ "Finding the download URL ..." download_url = DownloadUrl.new(package.url).resolve_download_url Util.log "Found it. Downloading from #{download_url} ..." HTTParty.get(download_url) end save_to_cache(package, downloaded_file) if opts[:cache_after_download] tmpdir = Dir.mktmpdir download_file = File.new(File.join(tmpdir, 'download'), 'wb+') download_file.write(downloaded_file) download_file.close download_file end
Private Class Methods
download_from_cache(package)
click to toggle source
# File lib/kosmos/package_downloads.rb, line 60 def self.download_from_cache(package) cache_dir = Kosmos.cache_dir if cache_dir cached_download = File.join(cache_dir, "#{package.title}.zip") File.read(cached_download) if File.file?(cached_download) end end
save_to_cache(package, downloaded_file)
click to toggle source
# File lib/kosmos/package_downloads.rb, line 69 def self.save_to_cache(package, downloaded_file) Util.log "Saving #{package.title} to cache ..." cache_dir = Kosmos.cache_dir if cache_dir File.open(File.join(cache_dir, "#{package.title}.zip"), 'wb+') do |file| file.write(downloaded_file) end end end