Sha256: 083a4d86a8a81d26cae6b3a27277df82e38a03a7ce5be0e5b353b99d323b48c8

Contents?: true

Size: 1014 Bytes

Versions: 2

Compression:

Stored size: 1014 Bytes

Contents

require 'open3'

module Backupsss
  # The Tar class is used for creating a tar archive.
  class Tar
    attr_reader :src, :dest

    def initialize(src, dest)
      @src = src
      @dest = dest
    end

    def make
      if valid_dest? && valid_src?
        Open3.capture3("tar -cvf #{dest} #{src}")
        File.open(dest)
      end
    end

    def valid_dest?
      dir_exists?(dest_dir) && dest_writable?
    end

    def valid_src?
      dir_exists?(src) && src_readable?
    end

    def filename
      dest.split('/').last
    end

    private

    def dest_dir
      File.dirname(dest)
    end

    def dest_writable?
      File.writable?(dest_dir) || raise_sys_err(dest_dir, Errno::EPERM::Errno)
    end

    def dir_exists?(dir)
      File.exist?(dir) || raise_sys_err(dir, Errno::ENOENT::Errno)
    end

    def src_readable?
      File.readable?(src) || raise_sys_err(src, Errno::EPERM::Errno)
    end

    def raise_sys_err(dir, err)
      raise SystemCallError.new(dir.to_s, err)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
backupsss-0.1.1 lib/backupsss/tar.rb
backupsss-0.1.0 lib/backupsss/tar.rb