class Falkor::Extract::TarGz
Constants
- TAR_LONGLINK
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
handle_longlink_or_write(tarfile, dest)
click to toggle source
# File lib/falkor/extract/tar_gz.rb, line 108 def handle_longlink_or_write(tarfile, dest) if tarfile.full_name == TAR_LONGLINK File.join extraction_destination, tarfile.read.strip else write_tarfile(tarfile, dest) end 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