extracter 1.2.32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +210 -0
- data/bin/extract +7 -0
- data/bin/extract_it +13 -0
- data/doc/README.gen +165 -0
- data/extracter.gemspec +109 -0
- data/lib/extracter/base/base.rb +178 -0
- data/lib/extracter/class/extract_this_archive.rb +289 -0
- data/lib/extracter/class/extracter.rb +1069 -0
- data/lib/extracter/constants/constants.rb +157 -0
- data/lib/extracter/extract_it/extract_it.rb +241 -0
- data/lib/extracter/requires/require_the_extracter_project.rb +8 -0
- data/lib/extracter/toplevel_methods/is_this_a_valid_archive.rb +41 -0
- data/lib/extracter/toplevel_methods/misc.rb +34 -0
- data/lib/extracter/version/version.rb +21 -0
- data/lib/extracter.rb +5 -0
- data/test/testing_class_extracter.rb +25 -0
- data/test/testing_class_method_extract_what_to.rb +9 -0
- metadata +106 -0
@@ -0,0 +1,157 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'extracter/constants/constants.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module Extracter
|
8
|
+
|
9
|
+
# ========================================================================= #
|
10
|
+
# === N
|
11
|
+
# ========================================================================= #
|
12
|
+
N = "\n"
|
13
|
+
|
14
|
+
# ========================================================================= #
|
15
|
+
# === Extracter::ARRAY_REGISTERED_ARCHIVES
|
16
|
+
#
|
17
|
+
# Archives that can be extracted, have to be registered in this Array.
|
18
|
+
#
|
19
|
+
# Sort alphabetically.
|
20
|
+
#
|
21
|
+
# The libreoffice format .odt is just like .zip.
|
22
|
+
# ========================================================================= #
|
23
|
+
ARRAY_REGISTERED_ARCHIVES = %w(
|
24
|
+
7z
|
25
|
+
apk
|
26
|
+
apkg
|
27
|
+
bin
|
28
|
+
bz2
|
29
|
+
deb
|
30
|
+
gem
|
31
|
+
gz
|
32
|
+
img
|
33
|
+
iso
|
34
|
+
jar
|
35
|
+
lz
|
36
|
+
lzma
|
37
|
+
odt
|
38
|
+
mp4
|
39
|
+
pdf
|
40
|
+
rar
|
41
|
+
rpm
|
42
|
+
squashfs
|
43
|
+
sxz
|
44
|
+
tar
|
45
|
+
taz
|
46
|
+
tbz
|
47
|
+
tgz
|
48
|
+
txz
|
49
|
+
xpi
|
50
|
+
xz
|
51
|
+
zip
|
52
|
+
Z
|
53
|
+
zst
|
54
|
+
)
|
55
|
+
|
56
|
+
# ========================================================================= #
|
57
|
+
# === LAST_UPDATED
|
58
|
+
#
|
59
|
+
# When this class was last updated/releasted. This is not a hugely
|
60
|
+
# important constat, so do not worry too much if this may be heavily
|
61
|
+
# outdated eventually.
|
62
|
+
# ========================================================================= #
|
63
|
+
LAST_UPDATED = '08.10.2021'
|
64
|
+
|
65
|
+
# ========================================================================= #
|
66
|
+
# === TEMP_DIR
|
67
|
+
#
|
68
|
+
# Set the temp dir here.
|
69
|
+
# ========================================================================= #
|
70
|
+
if ENV['MY_TEMP']
|
71
|
+
TEMP_DIR = ENV['MY_TEMP'].to_s+'/'
|
72
|
+
else
|
73
|
+
# ======================================================================= #
|
74
|
+
# If this environment variable is unavailable then use a conservative
|
75
|
+
# default value.
|
76
|
+
# ======================================================================= #
|
77
|
+
TEMP_DIR = '/tmp/'
|
78
|
+
end
|
79
|
+
|
80
|
+
# ========================================================================= #
|
81
|
+
# === GEM_UNPACK_COMMAND
|
82
|
+
#
|
83
|
+
# The command to use to unpack ruby .gems.
|
84
|
+
# We can pass the ---target=DIR syntax to extract to a specific location.
|
85
|
+
# ========================================================================= #
|
86
|
+
GEM_UNPACK_COMMAND = 'gem unpack'
|
87
|
+
|
88
|
+
# ========================================================================= #
|
89
|
+
# === UNPACK_COMMAND_TO_USE_ON_WINDOWS
|
90
|
+
#
|
91
|
+
# The full commandline will look like this:
|
92
|
+
#
|
93
|
+
# 7z x -so C:\home\x\src\htop\htop-3.0.5.tar.xz | 6z x -si -ttar
|
94
|
+
#
|
95
|
+
# ========================================================================= #
|
96
|
+
UNPACK_COMMAND_TO_USE_ON_WINDOWS = '7z x -so '
|
97
|
+
|
98
|
+
# ========================================================================= #
|
99
|
+
# === SECOND_UNPACK_COMMAND_TO_USE_ON_WINDOWS
|
100
|
+
# ========================================================================= #
|
101
|
+
SECOND_UNPACK_COMMAND_TO_USE_ON_WINDOWS = '7z x -si -ttar'
|
102
|
+
|
103
|
+
# ========================================================================= #
|
104
|
+
# === COMMAND_TO_EXTRACT_BSDTAR_ARCHIVES
|
105
|
+
#
|
106
|
+
# This command is to specifically extract rpm-archives.
|
107
|
+
# ========================================================================= #
|
108
|
+
COMMAND_TO_EXTRACT_BSDTAR_ARCHIVES = 'bsdtar xfv'
|
109
|
+
|
110
|
+
# ========================================================================= #
|
111
|
+
# === COMMAND_TO_EXTRACT_TAR_BZ2_FILES
|
112
|
+
# ========================================================================= #
|
113
|
+
COMMAND_TO_EXTRACT_TAR_BZ2_FILES = 'tar -xjvf'
|
114
|
+
|
115
|
+
# ========================================================================= #
|
116
|
+
# === COMMAND_TO_EXTRACT_JAR_ARCHIVES
|
117
|
+
# ========================================================================= #
|
118
|
+
COMMAND_TO_EXTRACT_JAR_ARCHIVES = 'jar xvf'
|
119
|
+
|
120
|
+
# ========================================================================= #
|
121
|
+
# === COMMAND_TO_EXTRACT_TGZ_FILES
|
122
|
+
#
|
123
|
+
# This is specifically for .tgz files.
|
124
|
+
# ========================================================================= #
|
125
|
+
COMMAND_TO_EXTRACT_TGZ_FILES = 'tar zxvf'
|
126
|
+
|
127
|
+
# ========================================================================= #
|
128
|
+
# === COMMAND_TO_EXTRACT_LZ_FILES
|
129
|
+
# ========================================================================= #
|
130
|
+
COMMAND_TO_EXTRACT_LZ_FILES = 'tar --lzip -xvf'
|
131
|
+
|
132
|
+
# ========================================================================= #
|
133
|
+
# === COMMAND_TO_EXTRACT_TAR_XZ_FILES
|
134
|
+
# ========================================================================= #
|
135
|
+
COMMAND_TO_EXTRACT_TAR_XZ_FILES = 'tar -xvf'
|
136
|
+
|
137
|
+
# ========================================================================= #
|
138
|
+
# === COMMAND_TO_EXTRACT_LZMA_FILES
|
139
|
+
# ========================================================================= #
|
140
|
+
COMMAND_TO_EXTRACT_LZMA_FILES = 'unlzma'
|
141
|
+
|
142
|
+
# ========================================================================= #
|
143
|
+
# === COMMAND_TO_EXTRACT_DEB_FILES
|
144
|
+
# ========================================================================= #
|
145
|
+
COMMAND_TO_EXTRACT_DEB_FILES = 'ar -x'
|
146
|
+
|
147
|
+
# ========================================================================= #
|
148
|
+
# === COMMAND_TO_EXTRACT_ZST_ARCHIVES
|
149
|
+
# ========================================================================= #
|
150
|
+
COMMAND_TO_EXTRACT_ZST_ARCHIVES = 'tar -I zstd -xvf'
|
151
|
+
|
152
|
+
# ========================================================================= #
|
153
|
+
# === COMMAND_TO_EXTRACT_TAR_FILES
|
154
|
+
# ========================================================================= #
|
155
|
+
COMMAND_TO_EXTRACT_TAR_FILES = 'tar -xvf'
|
156
|
+
|
157
|
+
end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === Extracter::ExtractIt
|
6
|
+
#
|
7
|
+
# If no input was provided to this class, but a .zip file exists in
|
8
|
+
# the current working directory, then that .zip file will be used.
|
9
|
+
#
|
10
|
+
# Usage example:
|
11
|
+
#
|
12
|
+
# Extracter::ExtractIt.new(ARGV)
|
13
|
+
#
|
14
|
+
# =========================================================================== #
|
15
|
+
# require 'extracter/extract_it/extract_it.rb'
|
16
|
+
# =========================================================================== #
|
17
|
+
require 'extracter/base/base.rb'
|
18
|
+
|
19
|
+
module Extracter
|
20
|
+
|
21
|
+
class ExtractIt < ::Extracter::Base # === Extracter::ExtractIt
|
22
|
+
|
23
|
+
require 'extracter/class/extracter.rb' # This file will pull in some other .rb files.
|
24
|
+
require 'extracter/constants/constants.rb'
|
25
|
+
require 'extracter/toplevel_methods/misc.rb'
|
26
|
+
|
27
|
+
# ========================================================================= #
|
28
|
+
# === ExtractIt::NAMESPACE
|
29
|
+
# ========================================================================= #
|
30
|
+
NAMESPACE = inspect
|
31
|
+
|
32
|
+
# ========================================================================= #
|
33
|
+
# === ExtractIt::ARRAY_ARCHIVE_TYPES
|
34
|
+
#
|
35
|
+
# Register the available (and handled) archive types here.
|
36
|
+
# ========================================================================= #
|
37
|
+
ARRAY_ARCHIVE_TYPES = ::Extracter::ARRAY_REGISTERED_ARCHIVES
|
38
|
+
|
39
|
+
# ========================================================================= #
|
40
|
+
# === initialize
|
41
|
+
# ========================================================================= #
|
42
|
+
def initialize(
|
43
|
+
optional_set_input = nil,
|
44
|
+
run_already = true
|
45
|
+
)
|
46
|
+
reset
|
47
|
+
set_input(optional_set_input)
|
48
|
+
run if run_already
|
49
|
+
end
|
50
|
+
|
51
|
+
# ========================================================================= #
|
52
|
+
# === reset (reset tag)
|
53
|
+
# ========================================================================= #
|
54
|
+
def reset
|
55
|
+
super()
|
56
|
+
# ======================================================================= #
|
57
|
+
# === @debug
|
58
|
+
# ======================================================================= #
|
59
|
+
@debug = false
|
60
|
+
end
|
61
|
+
|
62
|
+
# ========================================================================= #
|
63
|
+
# === show_help
|
64
|
+
# ========================================================================= #
|
65
|
+
def show_help
|
66
|
+
e 'We will show a little bit help, then exit.'
|
67
|
+
e
|
68
|
+
e 'To extract .tar.xz, do:'
|
69
|
+
e
|
70
|
+
efancy ' → tar -xJf *.tar.xz'
|
71
|
+
end
|
72
|
+
|
73
|
+
# ========================================================================= #
|
74
|
+
# === set_input
|
75
|
+
#
|
76
|
+
# We will work on an Array as value to @input, at the end of this
|
77
|
+
# method.
|
78
|
+
# ========================================================================= #
|
79
|
+
def set_input(i = N)
|
80
|
+
case i
|
81
|
+
# ======================================================================= #
|
82
|
+
# === extract_it --help
|
83
|
+
# ======================================================================= #
|
84
|
+
when /-?-?help$/i # Show some help stuff here.
|
85
|
+
show_help
|
86
|
+
exit
|
87
|
+
end
|
88
|
+
i = [i] if i.is_a? String # Need an Array.
|
89
|
+
if @debug
|
90
|
+
opn; e 'The input given to us is: `'+sfile(i)+'`'
|
91
|
+
end
|
92
|
+
if i.is_a?(Array) and i.empty?
|
93
|
+
# ===================================================================== #
|
94
|
+
# In this case, try to see if the current directory has a .zip
|
95
|
+
# file. We will use this in that case.
|
96
|
+
# ===================================================================== #
|
97
|
+
is_there_a_zip_file = Dir['*.zip']
|
98
|
+
unless is_there_a_zip_file.empty?
|
99
|
+
use_this_zip_file = is_there_a_zip_file.first
|
100
|
+
notify_the_user_that_no_input_was_given_but_this_file_was_found(use_this_zip_file)
|
101
|
+
i << use_this_zip_file
|
102
|
+
end
|
103
|
+
is_there_at_the_least_one_tar_xz_file = Dir['*.tar.xz']
|
104
|
+
unless is_there_at_the_least_one_tar_xz_file.empty?
|
105
|
+
i << is_there_at_the_least_one_tar_xz_file.first
|
106
|
+
end
|
107
|
+
end
|
108
|
+
@input = i # Should be an array, always.
|
109
|
+
end
|
110
|
+
|
111
|
+
# ========================================================================= #
|
112
|
+
# === be_silent
|
113
|
+
# ========================================================================= #
|
114
|
+
def be_silent
|
115
|
+
@be_silent = true
|
116
|
+
end
|
117
|
+
|
118
|
+
# ========================================================================= #
|
119
|
+
# === be_verbose
|
120
|
+
# ========================================================================= #
|
121
|
+
def be_verbose
|
122
|
+
@be_silent = false
|
123
|
+
end; alias show_commands_used be_verbose # === show_commands_used
|
124
|
+
|
125
|
+
# ========================================================================= #
|
126
|
+
# === notify_the_user_that_no_input_was_given_but_this_file_was_found
|
127
|
+
# ========================================================================= #
|
128
|
+
def notify_the_user_that_no_input_was_given_but_this_file_was_found(
|
129
|
+
this_file
|
130
|
+
)
|
131
|
+
opn; e "No input was given to #{sfancy(NAMESPACE)} but a "\
|
132
|
+
".zip file was"
|
133
|
+
opn; e 'found in this directory ('+sdir(Dir.pwd)+'): '+
|
134
|
+
sfancy(this_file)
|
135
|
+
opn; e 'We will use this zip file.'
|
136
|
+
end
|
137
|
+
|
138
|
+
# ========================================================================= #
|
139
|
+
# === try_to_glob_on
|
140
|
+
# ========================================================================= #
|
141
|
+
def try_to_glob_on(i)
|
142
|
+
result = Dir["#{i}*"]
|
143
|
+
# ======================================================================= #
|
144
|
+
# Next, sort this result to put archives on the beginning of the Array.
|
145
|
+
# ======================================================================= #
|
146
|
+
result = result.partition {|entry| is_archive?(entry) }
|
147
|
+
result.flatten!
|
148
|
+
unless result.empty?
|
149
|
+
# ===================================================================== #
|
150
|
+
# Ok, we grab the first entry next.
|
151
|
+
# ===================================================================== #
|
152
|
+
i = result.first
|
153
|
+
opn; e "#{rev}No result could be found for the given input, "\
|
154
|
+
"thus using #{sfancy(i)} #{rev}instead."
|
155
|
+
end
|
156
|
+
i
|
157
|
+
end
|
158
|
+
|
159
|
+
# ========================================================================= #
|
160
|
+
# === extract_input
|
161
|
+
# ========================================================================= #
|
162
|
+
def extract_input
|
163
|
+
pp @input if @debug
|
164
|
+
@input.each {|entry|
|
165
|
+
to_this_dir = Dir.pwd
|
166
|
+
to_this_dir << '/' unless to_this_dir.end_with? '/'
|
167
|
+
unless File.exist? entry
|
168
|
+
entry = try_to_glob_on(entry)
|
169
|
+
end
|
170
|
+
# ===================================================================== #
|
171
|
+
# Delegate to class Extracter next.
|
172
|
+
# ===================================================================== #
|
173
|
+
Extracter.extract_what_to(
|
174
|
+
entry,
|
175
|
+
to_this_dir
|
176
|
+
) {{ be_verbose: @be_silent }}
|
177
|
+
_ = ::Extracter.remove_file_suffix(entry)
|
178
|
+
if File.exist? entry
|
179
|
+
# =================================================================== #
|
180
|
+
# Must also check whether the extracted directory exists.
|
181
|
+
# =================================================================== #
|
182
|
+
name_of_the_extracted_archive = to_this_dir+_
|
183
|
+
ARRAY_ARCHIVE_TYPES.each {|extension_name|
|
184
|
+
if name_of_the_extracted_archive.include? extension_name
|
185
|
+
quoted = Regexp.quote(extension_name)
|
186
|
+
name_of_the_extracted_archive.sub!(/#{quoted}$/,'')
|
187
|
+
end
|
188
|
+
}
|
189
|
+
if File.exist?(name_of_the_extracted_archive) and
|
190
|
+
# ================================================================= #
|
191
|
+
# The following check ensures that we really have another name
|
192
|
+
# for the extracted directory.
|
193
|
+
# ================================================================= #
|
194
|
+
!(entry == name_of_the_extracted_archive)
|
195
|
+
opn; e "#{rev}Finished extracting "\
|
196
|
+
"#{sfile(_)}#{rev} to `#{sdir(to_this_dir)}#{rev}`."
|
197
|
+
else
|
198
|
+
opn; e "#{rev}No file called `#{sfile(name_of_the_extracted_archive)}"\
|
199
|
+
"#{rev}` appears to exist."
|
200
|
+
end
|
201
|
+
end
|
202
|
+
}
|
203
|
+
end
|
204
|
+
|
205
|
+
# ========================================================================= #
|
206
|
+
# === is_archive?
|
207
|
+
# ========================================================================= #
|
208
|
+
def is_archive?(i)
|
209
|
+
ARRAY_ARCHIVE_TYPES.include?(
|
210
|
+
File.extname(File.basename(i))
|
211
|
+
)
|
212
|
+
end
|
213
|
+
|
214
|
+
# ========================================================================= #
|
215
|
+
# === run (run tag)
|
216
|
+
# ========================================================================= #
|
217
|
+
def run
|
218
|
+
extract_input
|
219
|
+
end
|
220
|
+
|
221
|
+
# ========================================================================= #
|
222
|
+
# === Extracter::ExtractIt[]
|
223
|
+
# ========================================================================= #
|
224
|
+
def self.[](i = '')
|
225
|
+
new(i)
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
# =========================================================================== #
|
231
|
+
# === Extracter.extract_it
|
232
|
+
# =========================================================================== #
|
233
|
+
def self.extract_it(i = ARGV, run_already = true)
|
234
|
+
::Extracter::ExtractIt.new(i, run_already)
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
|
239
|
+
if __FILE__ == $PROGRAM_NAME
|
240
|
+
Extracter::ExtractIt.new(ARGV)
|
241
|
+
end # extractitrb
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'extracter/requires/require_the_extracter_project.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'extracter/class/extracter.rb'
|
8
|
+
require 'extracter/extract_it/extract_it.rb'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'extracter/toplevel_methods/is_this_a_valid_archive.rb'
|
6
|
+
# Extracter.is_this_a_valid_archive?
|
7
|
+
# =========================================================================== #
|
8
|
+
module Extracter
|
9
|
+
|
10
|
+
require 'extracter/constants/constants.rb'
|
11
|
+
|
12
|
+
# ========================================================================= #
|
13
|
+
# === Extracter.is_this_a_valid_archive?
|
14
|
+
#
|
15
|
+
# Query whether the input given to this method is a valid archive.
|
16
|
+
# This allows us to determine whether the Extracter project can
|
17
|
+
# deal with the given archive at hand or whether it can not.
|
18
|
+
#
|
19
|
+
# The registered formats are stored in the constant
|
20
|
+
# ARRAY_REGISTERED_ARCHIVES.
|
21
|
+
# ========================================================================= #
|
22
|
+
def self.is_this_a_valid_archive?(
|
23
|
+
i, # The given input, such as "foobar.zip".
|
24
|
+
array_registered_archives = ARRAY_REGISTERED_ARCHIVES
|
25
|
+
)
|
26
|
+
if i.is_a? Array
|
27
|
+
i = i.first
|
28
|
+
end
|
29
|
+
return_value = false
|
30
|
+
array_registered_archives.each {|entry|
|
31
|
+
return_value = true if i =~ /#{entry}$/i
|
32
|
+
}
|
33
|
+
return return_value
|
34
|
+
end; self.instance_eval { alias is_archive? is_this_a_valid_archive? } # === Extracter.is_archive?
|
35
|
+
self.instance_eval { alias is_this_a_valid_archive? is_this_a_valid_archive? } # === Extracter.is_this_a_valid_archive?
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
if __FILE__ == $PROGRAM_NAME
|
40
|
+
pp Extracter.is_this_a_valid_archive?(ARGV)
|
41
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# === require 'extracter/toplevel_methods/misc.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module Extracter
|
8
|
+
|
9
|
+
# ========================================================================= #
|
10
|
+
# === Extracter.remove_archive_type
|
11
|
+
# ========================================================================= #
|
12
|
+
def self.remove_archive_type(i)
|
13
|
+
return i.delete_suffix('.xz').
|
14
|
+
delete_suffix('.tgz').
|
15
|
+
delete_suffix('.bz2').
|
16
|
+
delete_suffix('.gz').
|
17
|
+
delete_suffix('.tar').
|
18
|
+
delete_suffix('.zip').
|
19
|
+
delete_suffix('.gem')
|
20
|
+
end; self.instance_eval { alias remove_file_suffix remove_archive_type } # === Extracter.remove_file_suffix
|
21
|
+
|
22
|
+
# ========================================================================= #
|
23
|
+
# === Extracter.are_we_on_windows?
|
24
|
+
# ========================================================================= #
|
25
|
+
def self.are_we_on_windows?
|
26
|
+
RUBY_PLATFORM.include?('win') or
|
27
|
+
RUBY_PLATFORM.include?('mingw')
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
if __FILE__ == $PROGRAM_NAME
|
33
|
+
puts Extracter.are_we_on_windows?
|
34
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'extracter/version/version.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module Extracter
|
8
|
+
|
9
|
+
# ========================================================================= #
|
10
|
+
# === VERSION
|
11
|
+
#
|
12
|
+
# Which specific version to use for class Extracter.
|
13
|
+
# ========================================================================= #
|
14
|
+
VERSION = '1.2.32'
|
15
|
+
|
16
|
+
# ========================================================================= #
|
17
|
+
# === LAST_UPDATE
|
18
|
+
# ========================================================================= #
|
19
|
+
LAST_UPATE = '19.03.2024'
|
20
|
+
|
21
|
+
end
|
data/lib/extracter.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
if __FILE__ == $PROGRAM_NAME
|
6
|
+
require 'fileutils'
|
7
|
+
require 'extracter'
|
8
|
+
require 'colours/colours_e_autoinclude.rb'
|
9
|
+
extract_to = '/home/Temp/'
|
10
|
+
e 'Now testing class Extracter - some will fail, do not worry:'
|
11
|
+
e
|
12
|
+
e Colours.orange('1) Testing Extracter.is_this_a_valid_archive?() functionality:')
|
13
|
+
e
|
14
|
+
e Extracter.is_this_a_valid_archive? 'foo.php'
|
15
|
+
# Extracter.new(ARGV)
|
16
|
+
FileUtils.cp('/home/x/src/recode/recode-3.7.1.tar.xz','/Depot/j')
|
17
|
+
Extracter.what_to '/Depot/j/recode-3.7.1.tar.xzg', '/Depot/jj' # This line is deliberately wrong.
|
18
|
+
Extracter.what_to '/Depot/j/recode-3.7.1.tar.xz', '/Depot/jj'
|
19
|
+
Extracter.what_to '/Depot/j/recode-3.7.1.gzip', '/Depot/jj'
|
20
|
+
e Colours.orange("2) Next testing "+sfancy("Extracter['/home/x/src/htop/']"))
|
21
|
+
Extracter['/home/x/src/htop/']
|
22
|
+
e Colours.orange("3) Next testing "+sfancy("Extracter['/home/x/src/libzip/']"))
|
23
|
+
Extracter['/home/x/src/libzip/', to: extract_to]
|
24
|
+
# Test the strip-components part next:
|
25
|
+
end # testextracter
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# This file will only test Extracter.extract_what_to().
|
6
|
+
# =========================================================================== #
|
7
|
+
require 'extracter/class/extracter.rb'
|
8
|
+
|
9
|
+
Extracter.extract_what_to('/home/x/src/php/php-8.1.5.tar.xz', '/home/Temp/')
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: extracter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.32
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Robert A. Heiler
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-03-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: opn
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: "\nThis fairly small project can be used to extract different\narchive
|
28
|
+
formats such as .tar.bz2 or .tbz - archives such\nas .gem and .lzma will also work.\n\nYou
|
29
|
+
can also extract audio, by making use of class ExtractAudio\n(part of the multimedia_paradise
|
30
|
+
gem. The latter is - and should\nbe - optional, though. If you have no such use
|
31
|
+
case then you \nwon't need to install the multimedia_paradise gem.\n\nUsage example:\n\n
|
32
|
+
\ require 'extracter'\n\n Extracter.new('/foo/bla-1.0.tar.bz2')\n\nThe second
|
33
|
+
argument that can be passed to the method new()\nspecifies where this should be
|
34
|
+
extract to.\n\nFor example:\n\n Extracter.new('/foo/bla-1.0.tar.bz2', '/opt')\n\nThis
|
35
|
+
would extract to the /opt directory.\n\nYou can query whether input is an archive
|
36
|
+
or not via:\n\n Extracter.is_archive? 'foo.tar.xz'\n\nAs of April 2014 we also
|
37
|
+
provide a bin/extract file, so that\nyou can simply extract something from the commandline.\n\nSince
|
38
|
+
as of November 2018, class Extracter can also \"extract\"\n.iso files. (The .iso
|
39
|
+
will be mounted to a directory that\nwill be created, actually.)\n\n"
|
40
|
+
email: shevy@inbox.lt
|
41
|
+
executables: []
|
42
|
+
extensions: []
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
45
|
+
- README.md
|
46
|
+
- bin/extract
|
47
|
+
- bin/extract_it
|
48
|
+
- doc/README.gen
|
49
|
+
- extracter.gemspec
|
50
|
+
- lib/extracter.rb
|
51
|
+
- lib/extracter/base/base.rb
|
52
|
+
- lib/extracter/class/extract_this_archive.rb
|
53
|
+
- lib/extracter/class/extracter.rb
|
54
|
+
- lib/extracter/constants/constants.rb
|
55
|
+
- lib/extracter/extract_it/extract_it.rb
|
56
|
+
- lib/extracter/requires/require_the_extracter_project.rb
|
57
|
+
- lib/extracter/toplevel_methods/is_this_a_valid_archive.rb
|
58
|
+
- lib/extracter/toplevel_methods/misc.rb
|
59
|
+
- lib/extracter/version/version.rb
|
60
|
+
- test/testing_class_extracter.rb
|
61
|
+
- test/testing_class_method_extract_what_to.rb
|
62
|
+
homepage: https://rubygems.org/gems/extracter
|
63
|
+
licenses:
|
64
|
+
- MIT
|
65
|
+
metadata: {}
|
66
|
+
post_install_message: "\n class Extracter can be used to extract archives, such as
|
67
|
+
.tar.gz or\n .zip.\n\n If you need some help, you can invoke bin/extract via:\n\n
|
68
|
+
\ extract --help\n\n In general, the syntax for extract is kept simple. Just
|
69
|
+
pass in the\n archive that has to be extracted as the first argument to \n extract
|
70
|
+
( bin/extract) , and class Extracter will try to extract\n it, if it is a registered
|
71
|
+
archive format.\n\n In ruby code, you may be able to use class Extracter in this
|
72
|
+
manner:\n\n require 'extracter'\n Extracter[file_path_here]\n\n or\n\n
|
73
|
+
\ require 'extracter'\n Extracter.new(file_path_here)\n\n Specific example:\n\n
|
74
|
+
\ require 'extracter'\n Extracter.new('htop-2.2.0.tar.xz')\n\n See the
|
75
|
+
--help option.\n\n"
|
76
|
+
rdoc_options: []
|
77
|
+
require_paths:
|
78
|
+
- lib
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 3.2.2
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 3.5.6
|
89
|
+
requirements: []
|
90
|
+
rubygems_version: 3.5.6
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: 'This fairly small project can be used to extract different archive formats
|
94
|
+
such as .tar.bz2 or .tbz - archives such as .gem and .lzma will also work. You
|
95
|
+
can also extract audio, by making use of class ExtractAudio (part of the multimedia_paradise
|
96
|
+
gem. The latter is - and should be - optional, though. If you have no such use case
|
97
|
+
then you won''t need to install the multimedia_paradise gem. Usage example: require
|
98
|
+
''extracter'' Extracter.new(''/foo/bla-1.0.tar.bz2'') The second argument that
|
99
|
+
can be passed to the method new() specifies where this should be extract to. For
|
100
|
+
example: Extracter.new(''/foo/bla-1.0.tar.bz2'', ''/opt'') This would extract
|
101
|
+
to the /opt directory. You can query whether input is an archive or not via: Extracter.is_archive?
|
102
|
+
''foo.tar.xz'' As of April 2014 we also provide a bin/extract file, so that you
|
103
|
+
can simply extract something from the commandline. Since as of November 2018, class
|
104
|
+
Extracter can also "extract" .iso files. (The .iso will be mounted to a directory
|
105
|
+
that will be created, actually.)'
|
106
|
+
test_files: []
|