Module: Extracter

Defined in:
lib/extracter/base/base.rb,
lib/extracter/class/extracter.rb,
lib/extracter/version/version.rb,
lib/extracter/constants/constants.rb,
lib/extracter/toplevel_methods/toplevel_methods.rb

Overview

#

require ‘extracter/toplevel_methods/is_this_a_valid_archive.rb’ Extracter.is_this_a_valid_archive?

#

Defined Under Namespace

Classes: Base, Extracter

Constant Summary collapse

VERSION =
#

VERSION

Which specific version to use for class Extracter.

#
'1.3.6'
LAST_UPATE =
#

LAST_UPDATE

#
'26.03.2024'
N =
#

N

#
"\n"
ARRAY_REGISTERED_ARCHIVES =
#

Extracter::ARRAY_REGISTERED_ARCHIVES

Archives that can be extracted, have to be registered in this Array.

This Array has to be sorted alphabetically.

The libreoffice format .odt is just like .zip.

#
%w(
  7z
  apk
  apkg
  bin
  bz2
  deb
  gem
  gz
  img
  iso
  jar
  lz
  lzma
  odt
  mp4
  pdf
  rar
  rpm
  squashfs
  sxz
  tar
  taz
  tbz
  tgz
  txz
  xpi
  xz
  zip
  Z
  zst
)
TEMP_DIR =
#

If this environment variable is unavailable then use a conservative default value.

#
'/tmp/'
UNPACK_COMMAND_TO_USE_ON_WINDOWS =
#

UNPACK_COMMAND_TO_USE_ON_WINDOWS

The full commandline when on windows will look like this:

7z x -so C:\home\x\src\htop\htop-3.0.5.tar.xz | 7z x -si -ttar

This was used in the RBT project, in the past, e. g. via code such as:

cmd = '7z x "'.dup
cmd << i
cmd << '" -so | 7z x -aoa -si -ttar -o"'+program_name_and_program_version?.to_s+'"'
#
'7z x -so '
SECOND_UNPACK_COMMAND_TO_USE_ON_WINDOWS =
#

SECOND_UNPACK_COMMAND_TO_USE_ON_WINDOWS

#
'7z x -si -ttar'
COMMAND_TO_EXTRACT_TGZ_FILES =
#

COMMAND_TO_EXTRACT_TGZ_FILES

This is specifically for .tgz files.

#
'tar zxvf'
COMMAND_TO_EXTRACT_LZ_FILES =
#

COMMAND_TO_EXTRACT_LZ_FILES

#
'tar --lzip -xvf'
COMMAND_TO_EXTRACT_TAR_XZ_FILES =
#

COMMAND_TO_EXTRACT_TAR_XZ_FILES

#
'tar -xvf'
COMMAND_TO_EXTRACT_LZMA_FILES =
#

COMMAND_TO_EXTRACT_LZMA_FILES

#
'unlzma'
COMMAND_TO_EXTRACT_DEB_FILES =
#

COMMAND_TO_EXTRACT_DEB_FILES

#
'ar -x'
COMMAND_TO_EXTRACT_ZST_ARCHIVES =
#

COMMAND_TO_EXTRACT_ZST_ARCHIVES

#
'tar -I zstd -xvf'
COMMAND_TO_EXTRACT_TAR_FILES =
#

COMMAND_TO_EXTRACT_TAR_FILES

#
'tar -xvf'
GEM_UNPACK_COMMAND =
#

GEM_UNPACK_COMMAND

The command to use to unpack ruby .gems.

We can pass the —target=DIR syntax to extract to a specific location.

#
'gem unpack'
COMMAND_TO_EXTRACT_BSDTAR_ARCHIVES =
#

COMMAND_TO_EXTRACT_BSDTAR_ARCHIVES

This command is to specifically extract rpm-archives.

#
'bsdtar xfv'
COMMAND_TO_EXTRACT_TAR_BZ2_FILES =
#

COMMAND_TO_EXTRACT_TAR_BZ2_FILES

#
'tar -xjvf'
COMMAND_TO_EXTRACT_JAR_ARCHIVES =
#

COMMAND_TO_EXTRACT_JAR_ARCHIVES

#
'jar xvf'

Class Method Summary collapse

Class Method Details

.are_we_on_windows?Boolean

#

Extracter.are_we_on_windows?

This method can be used to determine whether we are on windows (as our primary platform) or whether we are not.

#

Returns:

  • (Boolean)


25
26
27
28
# File 'lib/extracter/toplevel_methods/toplevel_methods.rb', line 25

def self.are_we_on_windows?
  RUBY_PLATFORM.include?('win') or
  RUBY_PLATFORM.include?('mingw')
end

.esystem(i) ⇒ Object

#

Extracter.esystem

#


44
45
46
47
# File 'lib/extracter/toplevel_methods/toplevel_methods.rb', line 44

def self.esystem(i)
  puts i
  system(i)
end

.extract_what_to(what = ARGV, extract_to = :default, run_already = true, &block) ⇒ Object

#

Extracter.extract_what_to

Useage example goes like this:

Extracter.extract_what_to('foo-1.0.tar.xz', '/tmp')
Extracter.extract_what_to('/Depot/jjjj/tesseract-5.1.0.tar.xz', Dir.pwd+'/')
#


1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
# File 'lib/extracter/class/extracter.rb', line 1193

def self.extract_what_to(
    what        = ARGV,
    extract_to  = :default, # ← This can also be a Hash. It denotes where we want to extract to.
    run_already = true, # :do_not_run_yet,
    &block
  )
  _ = ::Extracter::Extracter.new(
        what,
        extract_to,
        run_already,
        &block
      )
  return _ # We must return the class, as other projects may depend on this.
end

.is_this_a_valid_archive?(i, array_registered_archives = ARRAY_REGISTERED_ARCHIVES) ⇒ Boolean

#

Extracter.is_this_a_valid_archive?

Query whether the input given to this method is a valid archive.

This allows us to determine whether the Extracter project can deal with the given archive at hand or whether it can not.

The registered formats are stored in the constant ARRAY_REGISTERED_ARCHIVES.

#

Returns:

  • (Boolean)


75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/extracter/toplevel_methods/toplevel_methods.rb', line 75

def self.is_this_a_valid_archive?(
    i, # The given input, such as "foobar.zip".
    array_registered_archives = ARRAY_REGISTERED_ARCHIVES
  )
  if i.is_a? Array
    i = i.first
  end
  return_value = false
  array_registered_archives.each {|entry|
    return_value = true if i =~ /#{entry}$/i
  }
  return return_value
end

.remove_archive_type(i) ⇒ Object

#

Extracter.remove_archive_type

This method will remove suffix-types from a given input String.

#


54
55
56
57
58
59
60
61
62
# File 'lib/extracter/toplevel_methods/toplevel_methods.rb', line 54

def self.remove_archive_type(i)
  return i.delete_suffix('.xz').
           delete_suffix('.tgz').
           delete_suffix('.bz2').
           delete_suffix('.gz').
           delete_suffix('.tar').
           delete_suffix('.zip').
           delete_suffix('.gem')
end

.return_pwdObject

#

Extracter.return_pwd

#


15
16
17
# File 'lib/extracter/toplevel_methods/toplevel_methods.rb', line 15

def self.return_pwd
  "#{Dir.pwd}/".squeeze('/')
end

.this_on_windows(i) ⇒ Object

#

Extracter.are_we_on_windows?

#


33
34
35
36
37
38
39
# File 'lib/extracter/toplevel_methods/toplevel_methods.rb', line 33

def self.this_on_windows(i)
  _ = UNPACK_COMMAND_TO_USE_ON_WINDOWS+' '+
      File.absolute_path(i)+
      ' | '+
      SECOND_UNPACK_COMMAND_TO_USE_ON_WINDOWS
  esystem _
end