class Backupsss::Tar
The Tar
class is used for creating a tar archive.
Attributes
compress_archive[R]
dest[R]
src[R]
Public Class Methods
new(src, dest, compress_archive = true)
click to toggle source
# File lib/backupsss/tar.rb, line 8 def initialize(src, dest, compress_archive = true) @src = src @dest = dest @compress_archive = compress_archive end
Public Instance Methods
filename()
click to toggle source
# File lib/backupsss/tar.rb, line 53 def filename dest.split('/').last end
make()
click to toggle source
# File lib/backupsss/tar.rb, line 14 def make return unless valid_dest? && valid_src? _, err, status = Open3.capture3("#{tar_command} #{dest} #{src}") File.open(dest) if valid_exit?(status, err) && valid_file? end
messages()
click to toggle source
# File lib/backupsss/tar.rb, line 38 def messages { no_file: 'ERROR: Tar destination file does not exist.', zero_byte: 'ERROR: Tar destination file is 0 bytes.' } end
tar_command()
click to toggle source
# File lib/backupsss/tar.rb, line 57 def tar_command compress_archive ? 'tar -zcvf' : 'tar -cvf' end
valid_dest?()
click to toggle source
# File lib/backupsss/tar.rb, line 45 def valid_dest? dir_exists?(dest_dir) && dest_writable? end
valid_exit?(status, err)
click to toggle source
# File lib/backupsss/tar.rb, line 20 def valid_exit?(status, err) output = [] output << "command.......#{tar_command}" output << "stderr........#{err}" unless err.empty? output << "status........#{status}" output << "exit code.....#{status.to_i}" $stdout.puts output.join("\n") return true if success_cases(status.to_i, err) raise "ERROR: #{tar_command} exited #{status.to_i}" end
valid_file?()
click to toggle source
# File lib/backupsss/tar.rb, line 32 def valid_file? raise messages[:no_file] unless File.exist?(dest) raise messages[:zero_byte] if File.size(dest).zero? true end
valid_src?()
click to toggle source
# File lib/backupsss/tar.rb, line 49 def valid_src? dir_exists?(src) && src_readable? end
Private Instance Methods
clean_exit(status)
click to toggle source
# File lib/backupsss/tar.rb, line 63 def clean_exit(status) status.zero? end
dest_dir()
click to toggle source
# File lib/backupsss/tar.rb, line 67 def dest_dir File.dirname(dest) end
dest_writable?()
click to toggle source
# File lib/backupsss/tar.rb, line 71 def dest_writable? File.writable?(dest_dir) || raise_sys_err(dest_dir, Errno::EPERM::Errno) end
dir_exists?(dir)
click to toggle source
# File lib/backupsss/tar.rb, line 75 def dir_exists?(dir) File.exist?(File.open(dir)) || raise_sys_err(dir, Errno::ENOENT::Errno) end
file_changed?(err)
click to toggle source
# File lib/backupsss/tar.rb, line 79 def file_changed?(err) err.match(/file changed as we read it/) end
raise_sys_err(dir, err)
click to toggle source
# File lib/backupsss/tar.rb, line 91 def raise_sys_err(dir, err) raise SystemCallError.new(dir.to_s, err) end
src_readable?()
click to toggle source
# File lib/backupsss/tar.rb, line 83 def src_readable? File.readable?(src) || raise_sys_err(src, Errno::EPERM::Errno) end
success_cases(signal_int, err)
click to toggle source
# File lib/backupsss/tar.rb, line 87 def success_cases(signal_int, err) clean_exit(signal_int) || file_changed?(err) end