omnizip 0.3.9 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/TODO.refactor/00-overview.md +67 -0
- data/TODO.refactor/01-registry-base-class.md +81 -0
- data/TODO.refactor/02-error-hierarchy.md +57 -0
- data/TODO.refactor/03-autoload-entry-point.md +69 -0
- data/TODO.refactor/04-filter-base-consolidation.md +49 -0
- data/TODO.refactor/05-send-private-methods.md +64 -0
- data/TODO.refactor/06-instance-variable-access.md +69 -0
- data/TODO.refactor/07-respond-to-replacement.md +91 -0
- data/TODO.refactor/08-spec-doubles.md +27 -0
- data/TODO.refactor/09-cli-shared-module.md +35 -0
- data/TODO.refactor/10-format-detector-ocp.md +34 -0
- data/TODO.refactor/11-convenience-decoupling.md +38 -0
- data/TODO.refactor/12-thread-safety.md +8 -0
- data/TODO.refactor/13-lutaml-model-migration.md +82 -0
- data/TODO.refactor/14-add-missing-specs.md +25 -0
- data/lib/omnizip/algorithm.rb +0 -2
- data/lib/omnizip/algorithm_registry.rb +29 -57
- data/lib/omnizip/algorithms/lzma/dictionary.rb +4 -3
- data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +2 -0
- data/lib/omnizip/algorithms/lzma/range_decoder.rb +1 -1
- data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +6 -5
- data/lib/omnizip/algorithms/lzma2/encoder.rb +0 -2
- data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +0 -2
- data/lib/omnizip/algorithms/lzma2/properties.rb +0 -2
- data/lib/omnizip/algorithms/ppmd7/model.rb +1 -1
- data/lib/omnizip/algorithms/ppmd8/context.rb +0 -2
- data/lib/omnizip/algorithms/ppmd8/model.rb +1 -1
- data/lib/omnizip/algorithms/ppmd8.rb +0 -2
- data/lib/omnizip/algorithms/ppmd_base.rb +0 -2
- data/lib/omnizip/algorithms/sevenzip_lzma2.rb +0 -5
- data/lib/omnizip/algorithms/xz_lzma2.rb +0 -5
- data/lib/omnizip/algorithms/zstandard/frame/header.rb +3 -5
- data/lib/omnizip/algorithms.rb +1 -0
- data/lib/omnizip/archive_handler.rb +75 -0
- data/lib/omnizip/archive_handlers/tar_handler.rb +51 -0
- data/lib/omnizip/archive_handlers/zip_handler.rb +73 -0
- data/lib/omnizip/archive_handlers.rb +11 -0
- data/lib/omnizip/checksum_registry.rb +23 -96
- data/lib/omnizip/cli/shared.rb +31 -0
- data/lib/omnizip/cli.rb +6 -43
- data/lib/omnizip/commands/archive_create_command.rb +0 -6
- data/lib/omnizip/commands/archive_extract_command.rb +0 -4
- data/lib/omnizip/commands/archive_list_command.rb +0 -4
- data/lib/omnizip/commands/archive_repair_command.rb +0 -2
- data/lib/omnizip/commands/archive_verify_command.rb +0 -2
- data/lib/omnizip/commands/compress_command.rb +0 -2
- data/lib/omnizip/commands/decompress_command.rb +0 -2
- data/lib/omnizip/commands/list_command.rb +0 -2
- data/lib/omnizip/commands/metadata_command.rb +0 -5
- data/lib/omnizip/commands/parity_create_command.rb +0 -2
- data/lib/omnizip/commands/parity_repair_command.rb +0 -2
- data/lib/omnizip/commands/parity_verify_command.rb +0 -2
- data/lib/omnizip/commands/profile_list_command.rb +0 -2
- data/lib/omnizip/commands/profile_show_command.rb +0 -2
- data/lib/omnizip/convenience.rb +111 -234
- data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +1 -1
- data/lib/omnizip/crypto/aes256/cipher.rb +6 -1
- data/lib/omnizip/error.rb +22 -18
- data/lib/omnizip/filter.rb +5 -3
- data/lib/omnizip/filter_registry.rb +74 -98
- data/lib/omnizip/filters/bcj2.rb +0 -2
- data/lib/omnizip/filters/bcj_x86.rb +0 -2
- data/lib/omnizip/filters/filter_base.rb +4 -70
- data/lib/omnizip/filters/registry.rb +0 -2
- data/lib/omnizip/format_detector.rb +21 -12
- data/lib/omnizip/format_registry.rb +69 -53
- data/lib/omnizip/formats/bzip2_file.rb +0 -4
- data/lib/omnizip/formats/cpio/entry.rb +0 -2
- data/lib/omnizip/formats/cpio/reader.rb +0 -1
- data/lib/omnizip/formats/cpio/writer.rb +0 -1
- data/lib/omnizip/formats/cpio.rb +0 -3
- data/lib/omnizip/formats/format_spec_loader.rb +1 -1
- data/lib/omnizip/formats/gzip.rb +0 -4
- data/lib/omnizip/formats/iso/directory_record.rb +6 -3
- data/lib/omnizip/formats/iso/reader.rb +2 -2
- data/lib/omnizip/formats/iso.rb +0 -1
- data/lib/omnizip/formats/lzip.rb +5 -27
- data/lib/omnizip/formats/lzma_alone.rb +7 -27
- data/lib/omnizip/formats/msi/reader.rb +1 -0
- data/lib/omnizip/formats/msi/string_pool.rb +2 -3
- data/lib/omnizip/formats/msi.rb +1 -6
- data/lib/omnizip/formats/ole/allocation_table.rb +0 -1
- data/lib/omnizip/formats/ole/dirent.rb +9 -4
- data/lib/omnizip/formats/ole/header.rb +0 -1
- data/lib/omnizip/formats/ole/ranges_io.rb +1 -1
- data/lib/omnizip/formats/ole/storage.rb +5 -6
- data/lib/omnizip/formats/ole.rb +0 -3
- data/lib/omnizip/formats/rar/block_parser.rb +0 -1
- data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +1 -1
- data/lib/omnizip/formats/rar/decompressor.rb +1 -0
- data/lib/omnizip/formats/rar/header.rb +0 -1
- data/lib/omnizip/formats/rar/rar5/writer.rb +0 -3
- data/lib/omnizip/formats/rar/reader.rb +2 -3
- data/lib/omnizip/formats/rar/writer.rb +0 -1
- data/lib/omnizip/formats/rar.rb +0 -4
- data/lib/omnizip/formats/rpm/entry.rb +0 -1
- data/lib/omnizip/formats/rpm/header.rb +1 -6
- data/lib/omnizip/formats/rpm/lead.rb +37 -26
- data/lib/omnizip/formats/rpm/tag.rb +0 -1
- data/lib/omnizip/formats/rpm/writer.rb +0 -1
- data/lib/omnizip/formats/seven_zip/bcj2_stream_decompressor.rb +0 -1
- data/lib/omnizip/formats/seven_zip/coder_chain.rb +1 -2
- data/lib/omnizip/formats/seven_zip/encoded_header.rb +0 -1
- data/lib/omnizip/formats/seven_zip/encrypted_header.rb +0 -1
- data/lib/omnizip/formats/seven_zip/header.rb +0 -1
- data/lib/omnizip/formats/seven_zip/header_encryptor.rb +0 -1
- data/lib/omnizip/formats/seven_zip/header_writer.rb +0 -1
- data/lib/omnizip/formats/seven_zip/models/file_entry.rb +1 -1
- data/lib/omnizip/formats/seven_zip/parser.rb +1 -2
- data/lib/omnizip/formats/seven_zip/reader.rb +13 -2
- data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +0 -1
- data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +0 -1
- data/lib/omnizip/formats/seven_zip/writer.rb +4 -6
- data/lib/omnizip/formats/seven_zip.rb +2 -5
- data/lib/omnizip/formats/tar/entry.rb +0 -2
- data/lib/omnizip/formats/tar/header.rb +0 -2
- data/lib/omnizip/formats/tar/reader.rb +0 -2
- data/lib/omnizip/formats/tar/writer.rb +0 -2
- data/lib/omnizip/formats/tar.rb +0 -3
- data/lib/omnizip/formats/xar/entry.rb +0 -1
- data/lib/omnizip/formats/xar/header.rb +0 -1
- data/lib/omnizip/formats/xar/reader.rb +0 -1
- data/lib/omnizip/formats/xar/toc.rb +1 -2
- data/lib/omnizip/formats/xar/writer.rb +11 -3
- data/lib/omnizip/formats/xar.rb +0 -3
- data/lib/omnizip/formats/xz/reader.rb +7 -3
- data/lib/omnizip/formats/xz.rb +3 -40
- data/lib/omnizip/formats/xz_impl/block_decoder.rb +4 -10
- data/lib/omnizip/formats/xz_impl/block_encoder.rb +0 -2
- data/lib/omnizip/formats/xz_impl/block_header_parser.rb +0 -2
- data/lib/omnizip/formats/xz_impl/index_decoder.rb +0 -1
- data/lib/omnizip/formats/xz_impl/index_encoder.rb +0 -1
- data/lib/omnizip/formats/xz_impl/stream_encoder.rb +1 -1
- data/lib/omnizip/formats/xz_impl/stream_footer.rb +0 -1
- data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +0 -1
- data/lib/omnizip/formats/xz_impl/stream_header.rb +0 -1
- data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +0 -2
- data/lib/omnizip/formats/zip/central_directory_header.rb +2 -3
- data/lib/omnizip/formats/zip/end_of_central_directory.rb +0 -2
- data/lib/omnizip/formats/zip/local_file_header.rb +0 -2
- data/lib/omnizip/formats/zip/reader.rb +12 -2
- data/lib/omnizip/formats/zip/writer.rb +73 -1
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +0 -2
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +0 -2
- data/lib/omnizip/formats/zip/zip64_extra_field.rb +0 -2
- data/lib/omnizip/formats/zip.rb +0 -3
- data/lib/omnizip/formats.rb +8 -24
- data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +2 -2
- data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +1 -1
- data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +0 -6
- data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +3 -4
- data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +0 -1
- data/lib/omnizip/io/source.rb +136 -0
- data/lib/omnizip/io.rb +2 -0
- data/lib/omnizip/link_handler.rb +7 -3
- data/lib/omnizip/metadata/metadata_editor.rb +1 -1
- data/lib/omnizip/models/algorithm_metadata.rb +33 -60
- data/lib/omnizip/models/compression_options.rb +40 -53
- data/lib/omnizip/models/conversion_options.rb +9 -18
- data/lib/omnizip/models/parallel_options.rb +25 -0
- data/lib/omnizip/optimization_registry.rb +8 -44
- data/lib/omnizip/parallel/job_scheduler.rb +26 -8
- data/lib/omnizip/parallel/parallel_compressor.rb +10 -20
- data/lib/omnizip/parallel/parallel_extractor.rb +20 -11
- data/lib/omnizip/parity/par2_repairer.rb +5 -5
- data/lib/omnizip/parity/par2_verifier.rb +27 -22
- data/lib/omnizip/parity.rb +4 -4
- data/lib/omnizip/password/encryption_registry.rb +11 -50
- data/lib/omnizip/password/zip_crypto_strategy.rb +1 -4
- data/lib/omnizip/pipe/stream_decompressor.rb +2 -3
- data/lib/omnizip/profile/archive_profile.rb +0 -2
- data/lib/omnizip/profile/binary_profile.rb +0 -2
- data/lib/omnizip/profile/compression_profile.rb +0 -1
- data/lib/omnizip/profile/profile_detector.rb +0 -2
- data/lib/omnizip/profile/text_profile.rb +0 -2
- data/lib/omnizip/profile.rb +0 -2
- data/lib/omnizip/registry.rb +112 -0
- data/lib/omnizip/version.rb +1 -1
- data/lib/omnizip/zip/file.rb +20 -9
- data/lib/omnizip.rb +26 -58
- metadata +24 -2
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Omnizip
|
|
4
|
+
# Generic, thread-safe registry base class.
|
|
5
|
+
#
|
|
6
|
+
# Subclasses override the hooks +#not_found_error_class+,
|
|
7
|
+
# +#normalize_key+, and +#label+ to specialize behavior. They may also
|
|
8
|
+
# override +#register+ / +#get+ to add domain-specific arguments
|
|
9
|
+
# (e.g., +#register_with_formats+ on FilterRegistry).
|
|
10
|
+
#
|
|
11
|
+
# The base class is intentionally minimal: it owns a Hash store and a
|
|
12
|
+
# Mutex, and exposes the canonical CRUD quintet (+register+, +get+,
|
|
13
|
+
# +registered?+, +available+, +reset!+). Backward-compat aliases are
|
|
14
|
+
# provided so existing call sites keep working.
|
|
15
|
+
class Registry
|
|
16
|
+
class << self
|
|
17
|
+
def not_found_error_class
|
|
18
|
+
Omnizip::Error
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def normalize_key(key)
|
|
22
|
+
key.to_sym
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def label
|
|
26
|
+
return "Item" unless name
|
|
27
|
+
|
|
28
|
+
name.gsub(/^Omnizip::/, "")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def register(key, value)
|
|
32
|
+
synchronize { storage[normalize_key(key)] = value }
|
|
33
|
+
value
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Register a lazy trigger for +key+. When +get(key)+ is called and
|
|
37
|
+
# the key isn't yet in storage, the block is invoked. The block is
|
|
38
|
+
# expected to trigger autoload of the implementation file (e.g., by
|
|
39
|
+
# referencing a constant), which then self-registers.
|
|
40
|
+
def register_lazy(key, &trigger)
|
|
41
|
+
lazy_triggers[normalize_key(key)] = trigger
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def get(key)
|
|
45
|
+
normalized = normalize_key(key)
|
|
46
|
+
value = storage[normalized]
|
|
47
|
+
return value if value
|
|
48
|
+
|
|
49
|
+
trigger = lazy_triggers[normalized]
|
|
50
|
+
if trigger
|
|
51
|
+
synchronize { lazy_triggers.delete(normalized) }
|
|
52
|
+
trigger.call
|
|
53
|
+
value = storage[normalized]
|
|
54
|
+
return value if value
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
raise not_found_error_class,
|
|
58
|
+
"#{label} not registered: #{key.inspect}. " \
|
|
59
|
+
"Available: #{available.join(', ')}"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def registered?(key)
|
|
63
|
+
normalized = normalize_key(key)
|
|
64
|
+
storage.key?(normalized) || lazy_triggers.key?(normalized)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def available
|
|
68
|
+
storage.keys
|
|
69
|
+
end
|
|
70
|
+
alias all available
|
|
71
|
+
alias strategies available
|
|
72
|
+
|
|
73
|
+
def reset!
|
|
74
|
+
# Clear stored entries but keep lazy triggers — the builtin
|
|
75
|
+
# autoload list should survive a reset so subsequent +get+ calls
|
|
76
|
+
# for builtins still trigger the autoload (which re-registers).
|
|
77
|
+
synchronize { storage.clear }
|
|
78
|
+
end
|
|
79
|
+
alias clear reset!
|
|
80
|
+
alias clear! reset!
|
|
81
|
+
alias reset reset!
|
|
82
|
+
|
|
83
|
+
def entries
|
|
84
|
+
synchronize { storage.dup }
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def each(&block)
|
|
88
|
+
return to_enum(:each) unless block
|
|
89
|
+
|
|
90
|
+
entries.each(&block)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
private
|
|
94
|
+
|
|
95
|
+
def storage
|
|
96
|
+
@storage ||= {}
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def lazy_triggers
|
|
100
|
+
@lazy_triggers ||= {}
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def synchronize(&block)
|
|
104
|
+
mutex.synchronize(&block)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def mutex
|
|
108
|
+
@mutex ||= Mutex.new
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
data/lib/omnizip/version.rb
CHANGED
data/lib/omnizip/zip/file.rb
CHANGED
|
@@ -50,7 +50,6 @@ module Omnizip
|
|
|
50
50
|
@modified = false
|
|
51
51
|
@reader = nil
|
|
52
52
|
@writer = nil
|
|
53
|
-
|
|
54
53
|
# Load existing archive if it exists
|
|
55
54
|
if ::File.exist?(file_path) && !create
|
|
56
55
|
load_archive
|
|
@@ -189,6 +188,18 @@ module Omnizip
|
|
|
189
188
|
end
|
|
190
189
|
alias_method :length, :size
|
|
191
190
|
|
|
191
|
+
# Mark this archive as having unsaved changes. The next +#commit+
|
|
192
|
+
# or +#close+ will write the archive to disk.
|
|
193
|
+
def modified!
|
|
194
|
+
@modified = true
|
|
195
|
+
self
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# True if there are unsaved changes.
|
|
199
|
+
def modified?
|
|
200
|
+
@modified
|
|
201
|
+
end
|
|
202
|
+
|
|
192
203
|
# Check if archive contains an entry
|
|
193
204
|
# @param entry_name [String] Entry name to check
|
|
194
205
|
# @return [Boolean] True if entry exists
|
|
@@ -374,8 +385,7 @@ module Omnizip
|
|
|
374
385
|
extra_field: "",
|
|
375
386
|
comment: "",
|
|
376
387
|
).tap do |header|
|
|
377
|
-
|
|
378
|
-
header.instance_variable_set(:@_original_data, data)
|
|
388
|
+
header.cached_original_data = data
|
|
379
389
|
end
|
|
380
390
|
end
|
|
381
391
|
|
|
@@ -384,7 +394,7 @@ module Omnizip
|
|
|
384
394
|
return "" if entry.directory?
|
|
385
395
|
|
|
386
396
|
# Check if we have cached data (for new entries not yet written)
|
|
387
|
-
cached_data = entry.header.
|
|
397
|
+
cached_data = entry.header.cached_original_data
|
|
388
398
|
return cached_data if cached_data
|
|
389
399
|
|
|
390
400
|
# Otherwise read from file
|
|
@@ -416,10 +426,11 @@ module Omnizip
|
|
|
416
426
|
return "" unless compressed_data
|
|
417
427
|
|
|
418
428
|
# Decompress
|
|
419
|
-
@reader.
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
429
|
+
@reader.decompress(
|
|
430
|
+
compressed_data,
|
|
431
|
+
reader_entry.compression_method,
|
|
432
|
+
reader_entry.uncompressed_size,
|
|
433
|
+
)
|
|
423
434
|
end
|
|
424
435
|
end
|
|
425
436
|
|
|
@@ -447,7 +458,7 @@ module Omnizip
|
|
|
447
458
|
next if entry.directory?
|
|
448
459
|
|
|
449
460
|
header = entry.header
|
|
450
|
-
cached = header.
|
|
461
|
+
cached = header.cached_original_data
|
|
451
462
|
entry_data[entry.name] = cached || read_entry_data(entry)
|
|
452
463
|
end
|
|
453
464
|
|
data/lib/omnizip.rb
CHANGED
|
@@ -17,27 +17,30 @@
|
|
|
17
17
|
#
|
|
18
18
|
|
|
19
19
|
module Omnizip
|
|
20
|
-
# Core version - autoloaded
|
|
21
20
|
autoload :VERSION, "omnizip/version"
|
|
22
21
|
|
|
23
|
-
# Error classes - autoloaded
|
|
24
22
|
autoload :Error, "omnizip/error"
|
|
25
23
|
autoload :CompressionError, "omnizip/error"
|
|
26
24
|
autoload :DecompressionError, "omnizip/error"
|
|
27
25
|
autoload :AlgorithmNotFoundError, "omnizip/error"
|
|
28
26
|
autoload :UnknownAlgorithmError, "omnizip/error"
|
|
27
|
+
autoload :UnknownChecksumError, "omnizip/error"
|
|
28
|
+
autoload :UnknownFilterError, "omnizip/error"
|
|
29
|
+
autoload :UnknownEncryptionStrategyError, "omnizip/error"
|
|
30
|
+
autoload :ConversionNotSupportedError, "omnizip/error"
|
|
29
31
|
autoload :UnsupportedFormatError, "omnizip/error"
|
|
30
32
|
autoload :FormatError, "omnizip/error"
|
|
31
33
|
autoload :InvalidArchiveError, "omnizip/error"
|
|
34
|
+
autoload :IOOperationError, "omnizip/error"
|
|
32
35
|
autoload :IOError, "omnizip/error"
|
|
33
36
|
autoload :ChecksumError, "omnizip/error"
|
|
34
|
-
autoload :
|
|
37
|
+
autoload :OptimizationNotFoundError, "omnizip/error"
|
|
35
38
|
autoload :ProgressError, "omnizip/error"
|
|
36
39
|
autoload :ETAError, "omnizip/error"
|
|
37
40
|
autoload :NotLicensedError, "omnizip/error"
|
|
38
41
|
autoload :RarNotAvailableError, "omnizip/error"
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
autoload :Registry, "omnizip/registry"
|
|
41
44
|
autoload :Algorithm, "omnizip/algorithm"
|
|
42
45
|
autoload :AlgorithmRegistry, "omnizip/algorithm_registry"
|
|
43
46
|
autoload :FormatRegistry, "omnizip/format_registry"
|
|
@@ -45,11 +48,9 @@ module Omnizip
|
|
|
45
48
|
autoload :ChecksumRegistry, "omnizip/checksum_registry"
|
|
46
49
|
autoload :FilterRegistry, "omnizip/filter_registry"
|
|
47
50
|
|
|
48
|
-
# Base classes
|
|
49
51
|
autoload :Filter, "omnizip/filter"
|
|
50
52
|
autoload :FilterPipeline, "omnizip/filter_pipeline"
|
|
51
53
|
|
|
52
|
-
# Feature modules
|
|
53
54
|
autoload :Buffer, "omnizip/buffer"
|
|
54
55
|
autoload :Pipe, "omnizip/pipe"
|
|
55
56
|
autoload :Chunked, "omnizip/chunked"
|
|
@@ -66,15 +67,25 @@ module Omnizip
|
|
|
66
67
|
autoload :Platform, "omnizip/platform"
|
|
67
68
|
autoload :Profiler, "omnizip/profiler"
|
|
68
69
|
autoload :Commands, "omnizip/commands"
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
autoload :CliOutputFormatter, "omnizip/cli/output_formatter"
|
|
71
|
+
|
|
72
|
+
# Implementation namespaces. Each namespace file declares autoloads
|
|
73
|
+
# for its concrete classes. The classes self-register with their
|
|
74
|
+
# registry on load (see lib/omnizip/algorithms/lzma.rb etc.).
|
|
75
|
+
autoload :Algorithms, "omnizip/algorithms"
|
|
76
|
+
autoload :Filters, "omnizip/filters"
|
|
77
|
+
autoload :Checksums, "omnizip/checksums"
|
|
71
78
|
autoload :IO, "omnizip/io"
|
|
72
79
|
autoload :Crypto, "omnizip/crypto"
|
|
73
80
|
autoload :Formats, "omnizip/formats"
|
|
74
81
|
autoload :Zip, "omnizip/zip"
|
|
82
|
+
autoload :Extraction, "omnizip/extraction"
|
|
83
|
+
autoload :Implementations, "omnizip/implementations"
|
|
84
|
+
autoload :ArchiveHandler, "omnizip/archive_handler"
|
|
85
|
+
autoload :ArchiveHandlers, "omnizip/archive_handlers"
|
|
86
|
+
autoload :Convenience, "omnizip/convenience"
|
|
75
87
|
end
|
|
76
88
|
|
|
77
|
-
# Models module with autoloaded classes
|
|
78
89
|
module Omnizip
|
|
79
90
|
module Models
|
|
80
91
|
autoload :AlgorithmMetadata, "omnizip/models/algorithm_metadata"
|
|
@@ -95,59 +106,15 @@ module Omnizip
|
|
|
95
106
|
end
|
|
96
107
|
end
|
|
97
108
|
|
|
98
|
-
# Algorithms (with registration - must be required explicitly)
|
|
99
|
-
require_relative "omnizip/algorithms/ppmd_base"
|
|
100
|
-
require_relative "omnizip/algorithms/lzma"
|
|
101
|
-
require_relative "omnizip/algorithms/lzma2"
|
|
102
|
-
require_relative "omnizip/algorithms/ppmd7"
|
|
103
|
-
require_relative "omnizip/algorithms/ppmd8"
|
|
104
|
-
require_relative "omnizip/algorithms/bzip2"
|
|
105
|
-
require_relative "omnizip/algorithms/deflate"
|
|
106
|
-
require_relative "omnizip/algorithms/deflate64"
|
|
107
|
-
require_relative "omnizip/algorithms/zstandard"
|
|
108
|
-
|
|
109
|
-
# Filters implementations (with registration)
|
|
110
|
-
require_relative "omnizip/filters/bcj"
|
|
111
|
-
require_relative "omnizip/filters/bcj_x86"
|
|
112
|
-
require_relative "omnizip/filters/bcj2"
|
|
113
|
-
require_relative "omnizip/filters/bcj_arm"
|
|
114
|
-
require_relative "omnizip/filters/bcj_arm64"
|
|
115
|
-
require_relative "omnizip/filters/bcj_ppc"
|
|
116
|
-
require_relative "omnizip/filters/bcj_sparc"
|
|
117
|
-
require_relative "omnizip/filters/bcj_ia64"
|
|
118
|
-
require_relative "omnizip/filters/delta"
|
|
119
|
-
require_relative "omnizip/filters/registry"
|
|
120
|
-
|
|
121
|
-
# Checksum implementations (with registration)
|
|
122
|
-
require_relative "omnizip/checksums/crc_base"
|
|
123
|
-
require_relative "omnizip/checksums/crc32"
|
|
124
|
-
require_relative "omnizip/checksums/crc64"
|
|
125
|
-
|
|
126
|
-
# Archive formats registry (with autoload declarations for lazy loading)
|
|
127
|
-
require_relative "omnizip/formats"
|
|
128
|
-
|
|
129
|
-
# Archive formats (with registration - must be required explicitly)
|
|
130
|
-
require_relative "omnizip/formats/seven_zip"
|
|
131
|
-
require_relative "omnizip/formats/zip"
|
|
132
|
-
require_relative "omnizip/formats/rar"
|
|
133
|
-
require_relative "omnizip/formats/tar"
|
|
134
|
-
require_relative "omnizip/formats/gzip"
|
|
135
|
-
require_relative "omnizip/formats/bzip2_file"
|
|
136
|
-
require_relative "omnizip/formats/xz"
|
|
137
|
-
|
|
138
|
-
# MSI format (must be loaded after OLE to override .msi registration)
|
|
139
|
-
require_relative "omnizip/formats/msi"
|
|
140
|
-
|
|
141
|
-
# Platform-specific features
|
|
142
109
|
module Omnizip
|
|
143
110
|
module Platform
|
|
144
111
|
autoload :NtfsStreams, "omnizip/platform/ntfs_streams"
|
|
145
112
|
end
|
|
146
113
|
|
|
147
|
-
# Implementations module with autoloaded classes
|
|
148
114
|
module Implementations
|
|
149
115
|
autoload :SevenZip, "omnizip/implementations/seven_zip"
|
|
150
116
|
autoload :XZUtils, "omnizip/implementations/xz_utils"
|
|
117
|
+
|
|
151
118
|
module SevenZip
|
|
152
119
|
module LZMA
|
|
153
120
|
autoload :StateMachine,
|
|
@@ -175,7 +142,8 @@ module Omnizip
|
|
|
175
142
|
end
|
|
176
143
|
end
|
|
177
144
|
|
|
178
|
-
#
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
#
|
|
145
|
+
# Trigger autoload of Convenience so its methods are available on the
|
|
146
|
+
# Omnizip module (it calls `extend Convenience` at the bottom of the
|
|
147
|
+
# file). Without this, Omnizip.compress_file and friends would not be
|
|
148
|
+
# defined until the first manual reference.
|
|
149
|
+
Omnizip::Convenience
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: omnizip
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-07-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|
|
@@ -120,6 +120,21 @@ files:
|
|
|
120
120
|
- LICENSE
|
|
121
121
|
- README.adoc
|
|
122
122
|
- Rakefile
|
|
123
|
+
- TODO.refactor/00-overview.md
|
|
124
|
+
- TODO.refactor/01-registry-base-class.md
|
|
125
|
+
- TODO.refactor/02-error-hierarchy.md
|
|
126
|
+
- TODO.refactor/03-autoload-entry-point.md
|
|
127
|
+
- TODO.refactor/04-filter-base-consolidation.md
|
|
128
|
+
- TODO.refactor/05-send-private-methods.md
|
|
129
|
+
- TODO.refactor/06-instance-variable-access.md
|
|
130
|
+
- TODO.refactor/07-respond-to-replacement.md
|
|
131
|
+
- TODO.refactor/08-spec-doubles.md
|
|
132
|
+
- TODO.refactor/09-cli-shared-module.md
|
|
133
|
+
- TODO.refactor/10-format-detector-ocp.md
|
|
134
|
+
- TODO.refactor/11-convenience-decoupling.md
|
|
135
|
+
- TODO.refactor/12-thread-safety.md
|
|
136
|
+
- TODO.refactor/13-lutaml-model-migration.md
|
|
137
|
+
- TODO.refactor/14-add-missing-specs.md
|
|
123
138
|
- benchmark/README.md
|
|
124
139
|
- benchmark/benchmark_suite.rb
|
|
125
140
|
- benchmark/compression_bench.rb
|
|
@@ -301,6 +316,10 @@ files:
|
|
|
301
316
|
- lib/omnizip/algorithms/zstandard/literals.rb
|
|
302
317
|
- lib/omnizip/algorithms/zstandard/literals_encoder.rb
|
|
303
318
|
- lib/omnizip/algorithms/zstandard/sequences.rb
|
|
319
|
+
- lib/omnizip/archive_handler.rb
|
|
320
|
+
- lib/omnizip/archive_handlers.rb
|
|
321
|
+
- lib/omnizip/archive_handlers/tar_handler.rb
|
|
322
|
+
- lib/omnizip/archive_handlers/zip_handler.rb
|
|
304
323
|
- lib/omnizip/buffer.rb
|
|
305
324
|
- lib/omnizip/buffer/memory_archive.rb
|
|
306
325
|
- lib/omnizip/buffer/memory_extractor.rb
|
|
@@ -317,6 +336,7 @@ files:
|
|
|
317
336
|
- lib/omnizip/chunked/writer.rb
|
|
318
337
|
- lib/omnizip/cli.rb
|
|
319
338
|
- lib/omnizip/cli/output_formatter.rb
|
|
339
|
+
- lib/omnizip/cli/shared.rb
|
|
320
340
|
- lib/omnizip/commands.rb
|
|
321
341
|
- lib/omnizip/commands/.keep
|
|
322
342
|
- lib/omnizip/commands/archive_create_command.rb
|
|
@@ -581,6 +601,7 @@ files:
|
|
|
581
601
|
- lib/omnizip/io.rb
|
|
582
602
|
- lib/omnizip/io/buffered_input.rb
|
|
583
603
|
- lib/omnizip/io/buffered_output.rb
|
|
604
|
+
- lib/omnizip/io/source.rb
|
|
584
605
|
- lib/omnizip/io/stream_manager.rb
|
|
585
606
|
- lib/omnizip/link_handler.rb
|
|
586
607
|
- lib/omnizip/link_handler/hard_link.rb
|
|
@@ -668,6 +689,7 @@ files:
|
|
|
668
689
|
- lib/omnizip/progress/progress_reporter.rb
|
|
669
690
|
- lib/omnizip/progress/progress_tracker.rb
|
|
670
691
|
- lib/omnizip/progress/silent_reporter.rb
|
|
692
|
+
- lib/omnizip/registry.rb
|
|
671
693
|
- lib/omnizip/rubyzip_compat.rb
|
|
672
694
|
- lib/omnizip/temp.rb
|
|
673
695
|
- lib/omnizip/temp/safe_extract.rb
|