class Falkor::Extract::TarGz

Constants

Attributes

extraction_destination[R]
file_name[R]

Public Class Methods

new(file_name, has_root_dir: false) click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 13
def initialize(file_name, has_root_dir: false)
  @file_name = file_name
  @extraction_destination =
    if has_root_dir
      File.dirname(file_name)
    else
      source_destination
    end
end

Public Instance Methods

extract() click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 23
def extract
  return source_destination if Dir.exist? source_destination

  FileUtils.mkdir_p extraction_destination

  block = block_given? ? Proc.new : proc {}

  report_progress(:write_each_tarfile, open_file(&:count), &block)
  FileUtils.rm file_name
  source_destination
end

Private Instance Methods

directory?(file) click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 82
def directory?(file)
  file.directory? || file.full_name.end_with?("/")
end
file?(file) click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 86
def file?(file)
  file.file? || !file.full_name.end_with?("/")
end
open_file() { |tar| ... } click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 56
def open_file
  File.open(file_name, "rb") do |file|
    return_value = nil
    Zlib::GzipReader.wrap(file) do |gz|
      ::Gem::Package::TarReader.new(gz) do |tar|
        return_value = yield tar
      end
    end
    return_value
  end
end
source_destination() click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 39
def source_destination
  @source_destination ||= File.join(
    File.dirname(file_name), File.basename(file_name, ".tar.gz")
  )
end
write_directory(file, dest) click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 90
def write_directory(file, dest)
  File.delete dest if File.file? dest
  FileUtils.mkdir_p dest, mode: file.header.mode, verbose: false
end
write_each_tarfile() { |1| ... } click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 45
def write_each_tarfile
  open_file do |tar|
    current_destination = nil
    tar.each do |tarfile|
      current_destination =
        handle_longlink_or_write(tarfile, current_destination)
      yield(1)
    end
  end
end
write_file(file, dest) click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 95
def write_file(file, dest)
  if File.directory? dest
    FileUtils.rm_rf dest
  else
    FileUtils.mkdir_p(File.dirname(dest))
  end

  File.open dest, "wb" do |f|
    f.print file.read
  end
  FileUtils.chmod file.header.mode, dest, verbose: false
end
write_tarfile(tarfile, current_destination) click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 68
def write_tarfile(tarfile, current_destination)
  current_destination ||=
    File.join extraction_destination, tarfile.full_name

  if directory?(tarfile)
    write_directory(tarfile, current_destination)
  elsif file?(tarfile)
    write_file(tarfile, current_destination)
  elsif tarfile.header.typeflag == "2" # Symlink
    File.symlink tarfile.header.linkname, current_destination
  end
  nil
end