class Torba::RemoteSources::Zip

Represents remote zip archive.

Attributes

digest[R]
url[R]

Public Class Methods

new(url) click to toggle source
# File lib/torba/remote_sources/zip.rb, line 14
def initialize(url)
  @url = url
  @digest = "#{File.basename url, '.zip'}-#{Torba.digest(url)}"
end

Private Instance Methods

ensure_cached() click to toggle source
# File lib/torba/remote_sources/zip.rb, line 21
def ensure_cached
  unless Dir.exist?(cache_path)
    FileUtils.mkdir_p(cache_path)

    tempfile = GetFile.process(url)

    command = "unzip -oqq -d #{cache_path} #{tempfile.path}"
    system(command) || raise(Errors::ShellCommandFailed.new(command))

    get_rid_of_top_level_directory
  end
rescue
  FileUtils.rm_rf(cache_path)
  raise
end
get_rid_of_top_level_directory() click to toggle source
# File lib/torba/remote_sources/zip.rb, line 37
def get_rid_of_top_level_directory
  top_level_content = Dir.glob("#{cache_path}/*")
  if top_level_content.size == 1 && File.directory?(top_level_content.first)
    top_level_dir = top_level_content.first
    FileUtils.cp_r("#{top_level_dir}/.", cache_path)
    FileUtils.rm_rf(top_level_dir)
  end
end