omnizip 0.3.1
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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +32 -0
- data/.rubocop_todo.yml +754 -0
- data/COPYING +502 -0
- data/Gemfile +17 -0
- data/LICENSE +12 -0
- data/README.adoc +1045 -0
- data/Rakefile +12 -0
- data/benchmark/README.md +260 -0
- data/benchmark/benchmark_suite.rb +125 -0
- data/benchmark/compression_bench.rb +181 -0
- data/benchmark/filter_bench.rb +180 -0
- data/benchmark/models/benchmark_result.rb +59 -0
- data/benchmark/models/comparison_result.rb +69 -0
- data/benchmark/profile_suite.rb +167 -0
- data/benchmark/reporter.rb +150 -0
- data/benchmark/run_benchmarks.rb +66 -0
- data/benchmark/test_data.rb +137 -0
- data/config/formats/rar3_spec.yml +91 -0
- data/config/formats/rar5_spec.yml +102 -0
- data/docs/.github/workflows/docs.yml +142 -0
- data/docs/.gitignore +21 -0
- data/docs/.lychee.toml +67 -0
- data/docs/Gemfile +13 -0
- data/docs/RAR_WRITE_SUPPORT.md +26 -0
- data/docs/README.md +101 -0
- data/docs/_config.yml +112 -0
- data/docs/assets/logo.svg +1 -0
- data/docs/assets/omnizip-logo.pdf +1540 -11
- data/docs/comparison/feature-matrix.adoc +694 -0
- data/docs/comparison/index.adoc +113 -0
- data/docs/comparison/vs-7zip.adoc +309 -0
- data/docs/comparison/vs-peazip.adoc +77 -0
- data/docs/comparison/vs-rubyzip.adoc +342 -0
- data/docs/comparison/vs-winrar.adoc +100 -0
- data/docs/compatibility.adoc +579 -0
- data/docs/concepts/index.adoc +129 -0
- data/docs/developer/architecture.adoc +256 -0
- data/docs/developer/contributing.adoc +158 -0
- data/docs/developer/index.adoc +25 -0
- data/docs/developer/testing.adoc +212 -0
- data/docs/getting-started/basic-usage.adoc +271 -0
- data/docs/getting-started/index.adoc +42 -0
- data/docs/getting-started/installation.adoc +138 -0
- data/docs/getting-started/quick-start.adoc +185 -0
- data/docs/getting-started/your-first-archive.adoc +218 -0
- data/docs/guides/advanced-features/encryption.adoc +300 -0
- data/docs/guides/advanced-features/index.adoc +49 -0
- data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
- data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
- data/docs/guides/advanced-features/streaming.adoc +212 -0
- data/docs/guides/archive-formats/gzip-format.adoc +107 -0
- data/docs/guides/archive-formats/index.adoc +130 -0
- data/docs/guides/archive-formats/rar-format.adoc +104 -0
- data/docs/guides/archive-formats/rar5.adoc +521 -0
- data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
- data/docs/guides/archive-formats/tar-format.adoc +106 -0
- data/docs/guides/archive-formats/xz-format.adoc +118 -0
- data/docs/guides/archive-formats/zip-format.adoc +35 -0
- data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
- data/docs/guides/compression-algorithms/deflate.adoc +319 -0
- data/docs/guides/compression-algorithms/index.adoc +190 -0
- data/docs/guides/compression-algorithms/lzma.adoc +398 -0
- data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
- data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
- data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
- data/docs/guides/creating-archives.adoc +354 -0
- data/docs/guides/extracting-archives.adoc +53 -0
- data/docs/guides/format-conversion.adoc +64 -0
- data/docs/guides/index.adoc +49 -0
- data/docs/guides/migration-rubyzip.adoc +217 -0
- data/docs/guides/parity-archives.adoc +605 -0
- data/docs/guides/performance-tuning.adoc +88 -0
- data/docs/index.adoc +218 -0
- data/docs/lychee.toml +67 -0
- data/docs/reference/api/overview.adoc +188 -0
- data/docs/reference/cli/compress-command.adoc +114 -0
- data/docs/reference/cli/overview.adoc +140 -0
- data/docs/reference/index.adoc +26 -0
- data/docs/resources/faq.adoc +185 -0
- data/docs/resources/quick-reference.adoc +222 -0
- data/docs/troubleshooting/index.adoc +208 -0
- data/examples/api_comparison.rb +205 -0
- data/examples/deflate64_example.rb +96 -0
- data/examples/par2_demo.rb +121 -0
- data/examples/quick_start_native.rb +150 -0
- data/examples/quick_start_rubyzip.rb +115 -0
- data/examples/rubyzip_compatibility_demo.rb +194 -0
- data/exe/omnizip +27 -0
- data/lib/omnizip/algorithm.rb +130 -0
- data/lib/omnizip/algorithm_registry.rb +86 -0
- data/lib/omnizip/algorithms/.keep +0 -0
- data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
- data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
- data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
- data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
- data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
- data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
- data/lib/omnizip/algorithms/bzip2.rb +130 -0
- data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
- data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
- data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
- data/lib/omnizip/algorithms/deflate.rb +128 -0
- data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
- data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
- data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
- data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
- data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
- data/lib/omnizip/algorithms/deflate64.rb +109 -0
- data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
- data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
- data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
- data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
- data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
- data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
- data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
- data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
- data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
- data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
- data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
- data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
- data/lib/omnizip/algorithms/lzma/match.rb +32 -0
- data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
- data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
- data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
- data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
- data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
- data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
- data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
- data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
- data/lib/omnizip/algorithms/lzma/state.rb +127 -0
- data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
- data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
- data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
- data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
- data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
- data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
- data/lib/omnizip/algorithms/lzma.rb +238 -0
- data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
- data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
- data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
- data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
- data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
- data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
- data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
- data/lib/omnizip/algorithms/lzma2.rb +141 -0
- data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
- data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
- data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
- data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
- data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
- data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
- data/lib/omnizip/algorithms/ppmd7.rb +116 -0
- data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
- data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
- data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
- data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
- data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
- data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
- data/lib/omnizip/algorithms/ppmd8.rb +82 -0
- data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
- data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
- data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
- data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
- data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
- data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
- data/lib/omnizip/algorithms/zstandard.rb +138 -0
- data/lib/omnizip/buffer/memory_archive.rb +251 -0
- data/lib/omnizip/buffer/memory_extractor.rb +224 -0
- data/lib/omnizip/buffer.rb +176 -0
- data/lib/omnizip/checksum_registry.rb +114 -0
- data/lib/omnizip/checksums/crc32.rb +100 -0
- data/lib/omnizip/checksums/crc64.rb +101 -0
- data/lib/omnizip/checksums/crc_base.rb +158 -0
- data/lib/omnizip/checksums/verifier.rb +131 -0
- data/lib/omnizip/chunked/memory_manager.rb +194 -0
- data/lib/omnizip/chunked/reader.rb +78 -0
- data/lib/omnizip/chunked/writer.rb +120 -0
- data/lib/omnizip/chunked.rb +129 -0
- data/lib/omnizip/cli/output_formatter.rb +104 -0
- data/lib/omnizip/cli.rb +572 -0
- data/lib/omnizip/commands/.keep +0 -0
- data/lib/omnizip/commands/archive_create_command.rb +427 -0
- data/lib/omnizip/commands/archive_extract_command.rb +272 -0
- data/lib/omnizip/commands/archive_list_command.rb +218 -0
- data/lib/omnizip/commands/archive_repair_command.rb +131 -0
- data/lib/omnizip/commands/archive_verify_command.rb +117 -0
- data/lib/omnizip/commands/compress_command.rb +117 -0
- data/lib/omnizip/commands/decompress_command.rb +120 -0
- data/lib/omnizip/commands/list_command.rb +53 -0
- data/lib/omnizip/commands/metadata_command.rb +153 -0
- data/lib/omnizip/commands/parity_create_command.rb +122 -0
- data/lib/omnizip/commands/parity_repair_command.rb +122 -0
- data/lib/omnizip/commands/parity_verify_command.rb +124 -0
- data/lib/omnizip/commands/profile_list_command.rb +56 -0
- data/lib/omnizip/commands/profile_show_command.rb +44 -0
- data/lib/omnizip/convenience.rb +359 -0
- data/lib/omnizip/converter/conversion_registry.rb +49 -0
- data/lib/omnizip/converter/conversion_strategy.rb +121 -0
- data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
- data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
- data/lib/omnizip/converter.rb +105 -0
- data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
- data/lib/omnizip/crypto/aes256/constants.rb +28 -0
- data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
- data/lib/omnizip/crypto/aes256.rb +102 -0
- data/lib/omnizip/error.rb +106 -0
- data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
- data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
- data/lib/omnizip/eta/rate_calculator.rb +104 -0
- data/lib/omnizip/eta/sample_history.rb +143 -0
- data/lib/omnizip/eta/time_estimator.rb +106 -0
- data/lib/omnizip/eta.rb +63 -0
- data/lib/omnizip/extraction/filter_chain.rb +177 -0
- data/lib/omnizip/extraction/glob_pattern.rb +140 -0
- data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
- data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
- data/lib/omnizip/extraction/regex_pattern.rb +50 -0
- data/lib/omnizip/extraction/selective_extractor.rb +240 -0
- data/lib/omnizip/extraction.rb +111 -0
- data/lib/omnizip/file_type/mime_classifier.rb +144 -0
- data/lib/omnizip/file_type.rb +113 -0
- data/lib/omnizip/filter.rb +139 -0
- data/lib/omnizip/filter_pipeline.rb +108 -0
- data/lib/omnizip/filter_registry.rb +166 -0
- data/lib/omnizip/filters/bcj.rb +279 -0
- data/lib/omnizip/filters/bcj2/constants.rb +53 -0
- data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
- data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
- data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
- data/lib/omnizip/filters/bcj2.rb +99 -0
- data/lib/omnizip/filters/bcj_arm.rb +176 -0
- data/lib/omnizip/filters/bcj_arm64.rb +244 -0
- data/lib/omnizip/filters/bcj_ia64.rb +196 -0
- data/lib/omnizip/filters/bcj_ppc.rb +190 -0
- data/lib/omnizip/filters/bcj_sparc.rb +176 -0
- data/lib/omnizip/filters/bcj_x86.rb +193 -0
- data/lib/omnizip/filters/delta.rb +196 -0
- data/lib/omnizip/filters/filter_base.rb +72 -0
- data/lib/omnizip/filters/registry.rb +123 -0
- data/lib/omnizip/filters/xz_delta.rb +258 -0
- data/lib/omnizip/format_detector.rb +162 -0
- data/lib/omnizip/format_registry.rb +59 -0
- data/lib/omnizip/formats/.keep +0 -0
- data/lib/omnizip/formats/bzip2_file.rb +172 -0
- data/lib/omnizip/formats/cpio/constants.rb +55 -0
- data/lib/omnizip/formats/cpio/entry.rb +385 -0
- data/lib/omnizip/formats/cpio/reader.rb +196 -0
- data/lib/omnizip/formats/cpio/writer.rb +234 -0
- data/lib/omnizip/formats/cpio.rb +140 -0
- data/lib/omnizip/formats/format_spec_loader.rb +230 -0
- data/lib/omnizip/formats/gzip.rb +238 -0
- data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
- data/lib/omnizip/formats/iso/directory_record.rb +152 -0
- data/lib/omnizip/formats/iso/joliet.rb +204 -0
- data/lib/omnizip/formats/iso/path_table.rb +125 -0
- data/lib/omnizip/formats/iso/reader.rb +197 -0
- data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
- data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
- data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
- data/lib/omnizip/formats/iso/writer.rb +530 -0
- data/lib/omnizip/formats/iso.rb +140 -0
- data/lib/omnizip/formats/lzip.rb +175 -0
- data/lib/omnizip/formats/lzma_alone.rb +171 -0
- data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
- data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
- data/lib/omnizip/formats/rar/block_parser.rb +243 -0
- data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
- data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
- data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
- data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
- data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
- data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
- data/lib/omnizip/formats/rar/constants.rb +82 -0
- data/lib/omnizip/formats/rar/decompressor.rb +238 -0
- data/lib/omnizip/formats/rar/external_writer.rb +312 -0
- data/lib/omnizip/formats/rar/header.rb +192 -0
- data/lib/omnizip/formats/rar/license_validator.rb +109 -0
- data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
- data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
- data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
- data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
- data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
- data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
- data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
- data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
- data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
- data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
- data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
- data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
- data/lib/omnizip/formats/rar/reader.rb +366 -0
- data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
- data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
- data/lib/omnizip/formats/rar/writer.rb +431 -0
- data/lib/omnizip/formats/rar.rb +205 -0
- data/lib/omnizip/formats/rar3/compressor.rb +73 -0
- data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar3/reader.rb +386 -0
- data/lib/omnizip/formats/rar3/writer.rb +219 -0
- data/lib/omnizip/formats/rar5/compressor.rb +73 -0
- data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar5/reader.rb +342 -0
- data/lib/omnizip/formats/rar5/writer.rb +214 -0
- data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
- data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
- data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
- data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
- data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
- data/lib/omnizip/formats/seven_zip/header.rb +106 -0
- data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
- data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
- data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
- data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
- data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
- data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
- data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
- data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
- data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
- data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
- data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
- data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
- data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
- data/lib/omnizip/formats/seven_zip.rb +93 -0
- data/lib/omnizip/formats/tar/constants.rb +73 -0
- data/lib/omnizip/formats/tar/entry.rb +94 -0
- data/lib/omnizip/formats/tar/header.rb +168 -0
- data/lib/omnizip/formats/tar/reader.rb +121 -0
- data/lib/omnizip/formats/tar/writer.rb +216 -0
- data/lib/omnizip/formats/tar.rb +84 -0
- data/lib/omnizip/formats/xz/reader.rb +116 -0
- data/lib/omnizip/formats/xz.rb +237 -0
- data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
- data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
- data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
- data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
- data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
- data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
- data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
- data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
- data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
- data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
- data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
- data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
- data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
- data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
- data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
- data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
- data/lib/omnizip/formats/zip/constants.rb +69 -0
- data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
- data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
- data/lib/omnizip/formats/zip/reader.rb +250 -0
- data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
- data/lib/omnizip/formats/zip/writer.rb +375 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
- data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
- data/lib/omnizip/formats/zip.rb +50 -0
- data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
- data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
- data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
- data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
- data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
- data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
- data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
- data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
- data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
- data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
- data/lib/omnizip/io/buffered_input.rb +146 -0
- data/lib/omnizip/io/buffered_output.rb +105 -0
- data/lib/omnizip/io/stream_manager.rb +115 -0
- data/lib/omnizip/link_handler/hard_link.rb +79 -0
- data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
- data/lib/omnizip/link_handler.rb +124 -0
- data/lib/omnizip/metadata/archive_metadata.rb +114 -0
- data/lib/omnizip/metadata/entry_metadata.rb +146 -0
- data/lib/omnizip/metadata/metadata_editor.rb +171 -0
- data/lib/omnizip/metadata/metadata_registry.rb +64 -0
- data/lib/omnizip/metadata/metadata_validator.rb +99 -0
- data/lib/omnizip/metadata.rb +57 -0
- data/lib/omnizip/models/.keep +0 -0
- data/lib/omnizip/models/algorithm_metadata.rb +73 -0
- data/lib/omnizip/models/compression_options.rb +71 -0
- data/lib/omnizip/models/conversion_options.rb +87 -0
- data/lib/omnizip/models/conversion_result.rb +135 -0
- data/lib/omnizip/models/eta_result.rb +46 -0
- data/lib/omnizip/models/extraction_rule.rb +115 -0
- data/lib/omnizip/models/filter_chain.rb +144 -0
- data/lib/omnizip/models/filter_config.rb +183 -0
- data/lib/omnizip/models/match_result.rb +124 -0
- data/lib/omnizip/models/optimization_suggestion.rb +91 -0
- data/lib/omnizip/models/parallel_options.rb +104 -0
- data/lib/omnizip/models/performance_result.rb +79 -0
- data/lib/omnizip/models/profile_report.rb +82 -0
- data/lib/omnizip/models/progress_options.rb +38 -0
- data/lib/omnizip/models/split_options.rb +116 -0
- data/lib/omnizip/optimization_registry.rb +81 -0
- data/lib/omnizip/parallel/job_queue.rb +209 -0
- data/lib/omnizip/parallel/job_scheduler.rb +203 -0
- data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
- data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
- data/lib/omnizip/parallel/worker_pool.rb +223 -0
- data/lib/omnizip/parallel.rb +149 -0
- data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
- data/lib/omnizip/parity/galois16.rb +145 -0
- data/lib/omnizip/parity/models/creator_packet.rb +73 -0
- data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
- data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
- data/lib/omnizip/parity/models/main_packet.rb +128 -0
- data/lib/omnizip/parity/models/packet.rb +156 -0
- data/lib/omnizip/parity/models/packet_registry.rb +109 -0
- data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
- data/lib/omnizip/parity/par2_creator.rb +531 -0
- data/lib/omnizip/parity/par2_repairer.rb +407 -0
- data/lib/omnizip/parity/par2_verifier.rb +364 -0
- data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
- data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
- data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
- data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
- data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
- data/lib/omnizip/parity.rb +186 -0
- data/lib/omnizip/password/encryption_registry.rb +65 -0
- data/lib/omnizip/password/encryption_strategy.rb +96 -0
- data/lib/omnizip/password/password_validator.rb +129 -0
- data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
- data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
- data/lib/omnizip/password.rb +87 -0
- data/lib/omnizip/pipe/stream_compressor.rb +124 -0
- data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
- data/lib/omnizip/pipe.rb +121 -0
- data/lib/omnizip/platform/ntfs_streams.rb +201 -0
- data/lib/omnizip/platform.rb +189 -0
- data/lib/omnizip/profile/archive_profile.rb +39 -0
- data/lib/omnizip/profile/balanced_profile.rb +33 -0
- data/lib/omnizip/profile/binary_profile.rb +36 -0
- data/lib/omnizip/profile/compression_profile.rb +158 -0
- data/lib/omnizip/profile/custom_profile.rb +157 -0
- data/lib/omnizip/profile/fast_profile.rb +33 -0
- data/lib/omnizip/profile/maximum_profile.rb +33 -0
- data/lib/omnizip/profile/profile_detector.rb +110 -0
- data/lib/omnizip/profile/profile_registry.rb +161 -0
- data/lib/omnizip/profile/text_profile.rb +36 -0
- data/lib/omnizip/profile.rb +190 -0
- data/lib/omnizip/profiler/memory_profiler.rb +66 -0
- data/lib/omnizip/profiler/method_profiler.rb +49 -0
- data/lib/omnizip/profiler/report_generator.rb +169 -0
- data/lib/omnizip/profiler.rb +204 -0
- data/lib/omnizip/progress/callback_reporter.rb +36 -0
- data/lib/omnizip/progress/console_reporter.rb +62 -0
- data/lib/omnizip/progress/log_reporter.rb +91 -0
- data/lib/omnizip/progress/operation_progress.rb +118 -0
- data/lib/omnizip/progress/progress_bar.rb +156 -0
- data/lib/omnizip/progress/progress_reporter.rb +40 -0
- data/lib/omnizip/progress/progress_tracker.rb +190 -0
- data/lib/omnizip/progress/silent_reporter.rb +24 -0
- data/lib/omnizip/progress.rb +127 -0
- data/lib/omnizip/rubyzip_compat.rb +63 -0
- data/lib/omnizip/temp/safe_extract.rb +168 -0
- data/lib/omnizip/temp/temp_file.rb +124 -0
- data/lib/omnizip/temp/temp_file_pool.rb +109 -0
- data/lib/omnizip/temp.rb +181 -0
- data/lib/omnizip/version.rb +5 -0
- data/lib/omnizip/zip/entry.rb +156 -0
- data/lib/omnizip/zip/file.rb +485 -0
- data/lib/omnizip/zip/input_stream.rb +273 -0
- data/lib/omnizip/zip/output_stream.rb +324 -0
- data/lib/omnizip.rb +156 -0
- data/readme-docs/advanced-features.adoc +515 -0
- data/readme-docs/api-usage.adoc +444 -0
- data/readme-docs/architecture.adoc +449 -0
- data/readme-docs/archive-formats.adoc +479 -0
- data/readme-docs/cli-usage.adoc +222 -0
- data/readme-docs/compression-algorithms.adoc +442 -0
- data/readme-docs/compression-profiles.adoc +247 -0
- data/readme-docs/encryption-checksums.adoc +328 -0
- data/readme-docs/format-converter.adoc +325 -0
- data/readme-docs/installation.adoc +228 -0
- data/readme-docs/par2-archives.adoc +608 -0
- data/readme-docs/performance-profiler.adoc +389 -0
- data/readme-docs/preprocessing-filters.adoc +280 -0
- data/xz-file-format-1.2.1.txt +1174 -0
- metadata +617 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Basic Usage
|
|
3
|
+
nav_order: 3
|
|
4
|
+
parent: Getting Started
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Basic Usage
|
|
8
|
+
|
|
9
|
+
This guide covers common usage patterns and operations with Omnizip.
|
|
10
|
+
|
|
11
|
+
== File Compression
|
|
12
|
+
|
|
13
|
+
=== Compressing Files
|
|
14
|
+
|
|
15
|
+
[source,ruby]
|
|
16
|
+
----
|
|
17
|
+
require 'omnizip'
|
|
18
|
+
|
|
19
|
+
# Basic compression
|
|
20
|
+
Omnizip.compress_file('input.txt', 'output.lzma')
|
|
21
|
+
|
|
22
|
+
# With specific algorithm
|
|
23
|
+
Omnizip.compress_file('input.txt', 'output.bz2', algorithm: :bzip2)
|
|
24
|
+
|
|
25
|
+
# With compression level (1-9)
|
|
26
|
+
Omnizip.compress_file('input.txt', 'output.lzma', level: 9)
|
|
27
|
+
----
|
|
28
|
+
|
|
29
|
+
=== Decompressing Files
|
|
30
|
+
|
|
31
|
+
[source,ruby]
|
|
32
|
+
----
|
|
33
|
+
require 'omnizip'
|
|
34
|
+
|
|
35
|
+
# Auto-detect algorithm
|
|
36
|
+
Omnizip.decompress_file('compressed.lzma', 'restored.txt')
|
|
37
|
+
|
|
38
|
+
# Specify algorithm explicitly
|
|
39
|
+
Omnizip.decompress_file('compressed.bz2', 'restored.txt', algorithm: :bzip2)
|
|
40
|
+
----
|
|
41
|
+
|
|
42
|
+
== Archive Operations
|
|
43
|
+
|
|
44
|
+
=== Creating Archives
|
|
45
|
+
|
|
46
|
+
[source,ruby]
|
|
47
|
+
----
|
|
48
|
+
require 'omnizip'
|
|
49
|
+
|
|
50
|
+
# Create ZIP from directory
|
|
51
|
+
Omnizip.compress_directory('my_folder/', 'backup.zip')
|
|
52
|
+
|
|
53
|
+
# Create 7z archive
|
|
54
|
+
Omnizip.compress_directory('my_folder/', 'backup.7z', format: :seven_zip)
|
|
55
|
+
|
|
56
|
+
# Add individual files
|
|
57
|
+
Omnizip::Archive.create('custom.zip') do |archive|
|
|
58
|
+
archive.add_file('file1.txt')
|
|
59
|
+
archive.add_file('file2.txt')
|
|
60
|
+
archive.add_directory('folder/')
|
|
61
|
+
end
|
|
62
|
+
----
|
|
63
|
+
|
|
64
|
+
=== Extracting Archives
|
|
65
|
+
|
|
66
|
+
[source,ruby]
|
|
67
|
+
----
|
|
68
|
+
require 'omnizip'
|
|
69
|
+
|
|
70
|
+
# Extract entire archive
|
|
71
|
+
Omnizip.extract_archive('backup.zip', 'output/')
|
|
72
|
+
|
|
73
|
+
# Extract with pattern matching
|
|
74
|
+
Omnizip::Archive.open('backup.zip') do |archive|
|
|
75
|
+
archive.extract_matching('*.txt', 'output/')
|
|
76
|
+
end
|
|
77
|
+
----
|
|
78
|
+
|
|
79
|
+
=== Reading Archive Contents
|
|
80
|
+
|
|
81
|
+
[source,ruby]
|
|
82
|
+
----
|
|
83
|
+
require 'omnizip'
|
|
84
|
+
|
|
85
|
+
# List all entries
|
|
86
|
+
entries = Omnizip.list_archive('backup.zip')
|
|
87
|
+
entries.each do |entry|
|
|
88
|
+
puts "#{entry.name}: #{entry.size} bytes"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Read specific file without extraction
|
|
92
|
+
content = Omnizip.read_from_archive('backup.zip', 'config.json')
|
|
93
|
+
puts content
|
|
94
|
+
----
|
|
95
|
+
|
|
96
|
+
== Stream Processing
|
|
97
|
+
|
|
98
|
+
=== In-Memory Compression
|
|
99
|
+
|
|
100
|
+
[source,ruby]
|
|
101
|
+
----
|
|
102
|
+
require 'omnizip'
|
|
103
|
+
require 'stringio'
|
|
104
|
+
|
|
105
|
+
# Compress string data
|
|
106
|
+
data = "Hello, World!" * 1000
|
|
107
|
+
input = StringIO.new(data)
|
|
108
|
+
output = StringIO.new
|
|
109
|
+
|
|
110
|
+
algorithm = Omnizip::AlgorithmRegistry.get(:lzma).new(level: 5)
|
|
111
|
+
algorithm.compress(input, output)
|
|
112
|
+
|
|
113
|
+
compressed_data = output.string
|
|
114
|
+
puts "Compressed: #{data.bytesize} → #{compressed_data.bytesize} bytes"
|
|
115
|
+
----
|
|
116
|
+
|
|
117
|
+
=== Streaming Large Files
|
|
118
|
+
|
|
119
|
+
[source,ruby]
|
|
120
|
+
----
|
|
121
|
+
require 'omnizip'
|
|
122
|
+
|
|
123
|
+
# Stream compression for large files
|
|
124
|
+
File.open('large_input.txt', 'rb') do |input|
|
|
125
|
+
File.open('large_output.lzma', 'wb') do |output|
|
|
126
|
+
algorithm = Omnizip::AlgorithmRegistry.get(:lzma).new
|
|
127
|
+
algorithm.compress(input, output)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
----
|
|
131
|
+
|
|
132
|
+
== Algorithm Selection
|
|
133
|
+
|
|
134
|
+
=== Available Algorithms
|
|
135
|
+
|
|
136
|
+
[source,ruby]
|
|
137
|
+
----
|
|
138
|
+
require 'omnizip'
|
|
139
|
+
|
|
140
|
+
# List available algorithms
|
|
141
|
+
puts Omnizip::AlgorithmRegistry.available.inspect
|
|
142
|
+
# => [:lzma, :lzma2, :bzip2, :ppmd7, :ppmd8, :deflate, :deflate64, :zstd]
|
|
143
|
+
|
|
144
|
+
# Get algorithm metadata
|
|
145
|
+
lzma = Omnizip::AlgorithmRegistry.get(:lzma)
|
|
146
|
+
metadata = lzma.metadata
|
|
147
|
+
puts "#{metadata.name}: #{metadata.description}"
|
|
148
|
+
----
|
|
149
|
+
|
|
150
|
+
=== Algorithm Characteristics
|
|
151
|
+
|
|
152
|
+
**LZMA/LZMA2**::
|
|
153
|
+
Best compression ratio, slower speed. Use for maximum compression.
|
|
154
|
+
|
|
155
|
+
**BZip2**::
|
|
156
|
+
Good compression, moderate speed. Excellent for text files.
|
|
157
|
+
|
|
158
|
+
**PPMd7/PPMd8**::
|
|
159
|
+
Excellent for text compression. Statistical modeling.
|
|
160
|
+
|
|
161
|
+
**Deflate/Deflate64**::
|
|
162
|
+
ZIP-compatible. Fast compression, good for general use.
|
|
163
|
+
|
|
164
|
+
**Zstandard**::
|
|
165
|
+
Modern algorithm. Fast compression and decompression.
|
|
166
|
+
|
|
167
|
+
== Error Handling
|
|
168
|
+
|
|
169
|
+
=== Handling Compression Errors
|
|
170
|
+
|
|
171
|
+
[source,ruby]
|
|
172
|
+
----
|
|
173
|
+
require 'omnizip'
|
|
174
|
+
|
|
175
|
+
begin
|
|
176
|
+
Omnizip.compress_file('input.txt', 'output.lzma')
|
|
177
|
+
rescue Omnizip::Error => e
|
|
178
|
+
puts "Compression failed: #{e.message}"
|
|
179
|
+
rescue Errno::ENOENT => e
|
|
180
|
+
puts "File not found: #{e.message}"
|
|
181
|
+
end
|
|
182
|
+
----
|
|
183
|
+
|
|
184
|
+
=== Verifying Archives
|
|
185
|
+
|
|
186
|
+
[source,ruby]
|
|
187
|
+
----
|
|
188
|
+
require 'omnizip'
|
|
189
|
+
|
|
190
|
+
# Verify archive integrity
|
|
191
|
+
begin
|
|
192
|
+
Omnizip::Archive.open('archive.zip') do |archive|
|
|
193
|
+
archive.verify
|
|
194
|
+
end
|
|
195
|
+
puts "Archive is valid"
|
|
196
|
+
rescue Omnizip::CorruptArchiveError => e
|
|
197
|
+
puts "Archive is corrupted: #{e.message}"
|
|
198
|
+
end
|
|
199
|
+
----
|
|
200
|
+
|
|
201
|
+
== Performance Tips
|
|
202
|
+
|
|
203
|
+
=== Choosing Compression Level
|
|
204
|
+
|
|
205
|
+
[source,ruby]
|
|
206
|
+
----
|
|
207
|
+
# Fast compression (level 1-3)
|
|
208
|
+
Omnizip.compress_file('file.txt', 'fast.lzma', level: 1)
|
|
209
|
+
|
|
210
|
+
# Balanced (level 4-6) - Default: 5
|
|
211
|
+
Omnizip.compress_file('file.txt', 'balanced.lzma', level: 5)
|
|
212
|
+
|
|
213
|
+
# Maximum compression (level 7-9)
|
|
214
|
+
Omnizip.compress_file('file.txt', 'best.lzma', level: 9)
|
|
215
|
+
----
|
|
216
|
+
|
|
217
|
+
=== Memory-Efficient Processing
|
|
218
|
+
|
|
219
|
+
[source,ruby]
|
|
220
|
+
----
|
|
221
|
+
# Use streaming for large files
|
|
222
|
+
File.open('huge_file.txt', 'rb') do |input|
|
|
223
|
+
File.open('huge_file.lzma', 'wb') do |output|
|
|
224
|
+
algorithm = Omnizip::AlgorithmRegistry.get(:lzma).new
|
|
225
|
+
algorithm.compress(input, output)
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
# File is processed in chunks, not loaded entirely into memory
|
|
229
|
+
----
|
|
230
|
+
|
|
231
|
+
== Common Patterns
|
|
232
|
+
|
|
233
|
+
=== Batch Compression
|
|
234
|
+
|
|
235
|
+
[source,ruby]
|
|
236
|
+
----
|
|
237
|
+
require 'omnizip'
|
|
238
|
+
|
|
239
|
+
# Compress multiple files
|
|
240
|
+
Dir.glob('*.txt').each do |file|
|
|
241
|
+
output = "#{file}.lzma"
|
|
242
|
+
Omnizip.compress_file(file, output, level: 7)
|
|
243
|
+
puts "Compressed: #{file} → #{output}"
|
|
244
|
+
end
|
|
245
|
+
----
|
|
246
|
+
|
|
247
|
+
=== Temporary Archives
|
|
248
|
+
|
|
249
|
+
[source,ruby]
|
|
250
|
+
----
|
|
251
|
+
require 'omnizip'
|
|
252
|
+
require 'tempfile'
|
|
253
|
+
|
|
254
|
+
# Create temporary archive
|
|
255
|
+
Tempfile.create(['backup', '.zip']) do |tmpfile|
|
|
256
|
+
Omnizip::Archive.create(tmpfile.path) do |archive|
|
|
257
|
+
archive.add_directory('data/')
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Use archive...
|
|
261
|
+
puts "Temporary archive: #{tmpfile.path}"
|
|
262
|
+
end
|
|
263
|
+
# Archive is automatically deleted
|
|
264
|
+
----
|
|
265
|
+
|
|
266
|
+
== See Also
|
|
267
|
+
|
|
268
|
+
* link:../guides/creating-archives.html[Creating Archives Guide]
|
|
269
|
+
* link:../guides/extracting-archives.html[Extracting Archives Guide]
|
|
270
|
+
* link:../guides/performance-tuning.html[Performance Tuning]
|
|
271
|
+
* link:../reference/api/overview.html[Ruby API Reference]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Getting Started
|
|
3
|
+
nav_order: 2
|
|
4
|
+
has_children: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Getting Started with Omnizip
|
|
8
|
+
|
|
9
|
+
Welcome to Omnizip! This section will help you get up and running quickly with Omnizip's compression and archiving features.
|
|
10
|
+
|
|
11
|
+
== What You'll Learn
|
|
12
|
+
|
|
13
|
+
This section covers:
|
|
14
|
+
|
|
15
|
+
* **Installation** - How to install Omnizip in your environment
|
|
16
|
+
* **Quick Start** - Your first compression operations in minutes
|
|
17
|
+
* **Basic Usage** - Common operations and workflows
|
|
18
|
+
|
|
19
|
+
== Prerequisites
|
|
20
|
+
|
|
21
|
+
* Ruby 3.0 or later
|
|
22
|
+
* Bundler (for project integration)
|
|
23
|
+
* Basic familiarity with Ruby
|
|
24
|
+
|
|
25
|
+
== Topics
|
|
26
|
+
|
|
27
|
+
link:installation.html[**Installation**]::
|
|
28
|
+
Install Omnizip via RubyGems or Bundler
|
|
29
|
+
|
|
30
|
+
link:quick-start.html[**Quick Start**]::
|
|
31
|
+
5-minute tutorial to get started with compression
|
|
32
|
+
|
|
33
|
+
link:basic-usage.html[**Basic Usage**]::
|
|
34
|
+
Common operations and usage patterns
|
|
35
|
+
|
|
36
|
+
== Next Steps
|
|
37
|
+
|
|
38
|
+
After completing the Getting Started guide, explore:
|
|
39
|
+
|
|
40
|
+
* link:../guides/[How-To Guides] for specific tasks
|
|
41
|
+
* link:../reference/[API Reference] for detailed documentation
|
|
42
|
+
* link:../comparison/[Comparison] to see how Omnizip compares to other tools
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Installation
|
|
3
|
+
nav_order: 1
|
|
4
|
+
parent: Getting Started
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Installation
|
|
8
|
+
|
|
9
|
+
=== General
|
|
10
|
+
|
|
11
|
+
Install Omnizip to start working with compression algorithms and archive formats in Ruby.
|
|
12
|
+
|
|
13
|
+
=== Requirements
|
|
14
|
+
|
|
15
|
+
==== Ruby Version
|
|
16
|
+
|
|
17
|
+
Omnizip requires Ruby 3.0 or higher:
|
|
18
|
+
|
|
19
|
+
* MRI (Matz's Ruby Interpreter) 3.0+
|
|
20
|
+
* JRuby 9.4+
|
|
21
|
+
* TruffleRuby 22+
|
|
22
|
+
|
|
23
|
+
Check your Ruby version:
|
|
24
|
+
|
|
25
|
+
[source,bash]
|
|
26
|
+
----
|
|
27
|
+
ruby --version
|
|
28
|
+
----
|
|
29
|
+
|
|
30
|
+
==== Runtime Dependencies
|
|
31
|
+
|
|
32
|
+
Omnizip has minimal dependencies:
|
|
33
|
+
|
|
34
|
+
* `lutaml-model` (~> 0.7) - Model serialization
|
|
35
|
+
* `marcel` (~> 1.0) - MIME type detection
|
|
36
|
+
|
|
37
|
+
These are automatically installed with the gem.
|
|
38
|
+
|
|
39
|
+
=== Installing via Bundler
|
|
40
|
+
|
|
41
|
+
Add Omnizip to your Gemfile:
|
|
42
|
+
|
|
43
|
+
[source,ruby]
|
|
44
|
+
----
|
|
45
|
+
# Gemfile
|
|
46
|
+
gem 'omnizip'
|
|
47
|
+
----
|
|
48
|
+
|
|
49
|
+
Then install:
|
|
50
|
+
|
|
51
|
+
[source,bash]
|
|
52
|
+
----
|
|
53
|
+
bundle install
|
|
54
|
+
----
|
|
55
|
+
|
|
56
|
+
=== Installing via RubyGems
|
|
57
|
+
|
|
58
|
+
Install the gem directly:
|
|
59
|
+
|
|
60
|
+
[source,bash]
|
|
61
|
+
----
|
|
62
|
+
gem install omnizip
|
|
63
|
+
----
|
|
64
|
+
|
|
65
|
+
=== Verifying Installation
|
|
66
|
+
|
|
67
|
+
Verify that Omnizip is installed correctly:
|
|
68
|
+
|
|
69
|
+
[source,bash]
|
|
70
|
+
----
|
|
71
|
+
# Check the gem is installed
|
|
72
|
+
gem list omnizip
|
|
73
|
+
|
|
74
|
+
# Check the version
|
|
75
|
+
omnizip version
|
|
76
|
+
|
|
77
|
+
# List available algorithms
|
|
78
|
+
omnizip list
|
|
79
|
+
----
|
|
80
|
+
|
|
81
|
+
[source,ruby]
|
|
82
|
+
----
|
|
83
|
+
require 'omnizip'
|
|
84
|
+
|
|
85
|
+
# Check version
|
|
86
|
+
puts Omnizip::VERSION
|
|
87
|
+
|
|
88
|
+
# List algorithms
|
|
89
|
+
Omnizip::AlgorithmRegistry.registered.each do |name|
|
|
90
|
+
puts "Algorithm: #{name}"
|
|
91
|
+
end
|
|
92
|
+
----
|
|
93
|
+
|
|
94
|
+
=== Installing from Source
|
|
95
|
+
|
|
96
|
+
To install from the source repository:
|
|
97
|
+
|
|
98
|
+
[source,bash]
|
|
99
|
+
----
|
|
100
|
+
git clone https://github.com/metanorma/omnizip.git
|
|
101
|
+
cd omnizip
|
|
102
|
+
bundle install
|
|
103
|
+
rake install
|
|
104
|
+
----
|
|
105
|
+
|
|
106
|
+
=== Development Installation
|
|
107
|
+
|
|
108
|
+
For development or contributing:
|
|
109
|
+
|
|
110
|
+
[source,bash]
|
|
111
|
+
----
|
|
112
|
+
git clone https://github.com/metanorma/omnizip.git
|
|
113
|
+
cd omnizip
|
|
114
|
+
bundle install
|
|
115
|
+
bundle exec rake
|
|
116
|
+
----
|
|
117
|
+
|
|
118
|
+
=== Platform-Specific Notes
|
|
119
|
+
|
|
120
|
+
==== Linux
|
|
121
|
+
|
|
122
|
+
No special requirements. Works with system Ruby or rbenv/rvm-managed Ruby.
|
|
123
|
+
|
|
124
|
+
==== macOS
|
|
125
|
+
|
|
126
|
+
No special requirements. Works with system Ruby or rbenv/rvm-managed Ruby.
|
|
127
|
+
|
|
128
|
+
==== Windows
|
|
129
|
+
|
|
130
|
+
Works with Ruby for Windows or RubyInstaller. Some file operations may have path handling differences.
|
|
131
|
+
|
|
132
|
+
=== Next Steps
|
|
133
|
+
|
|
134
|
+
After installation:
|
|
135
|
+
|
|
136
|
+
* link:quick-start[Quick Start Guide] - Get started in 5 minutes
|
|
137
|
+
* link:your-first-archive[Create Your First Archive] - Build a practical example
|
|
138
|
+
* link:../guides/basic-usage[Basic Usage Guide] - Learn common operations
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Quick Start
|
|
3
|
+
nav_order: 2
|
|
4
|
+
parent: Getting Started
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Quick Start
|
|
8
|
+
|
|
9
|
+
=== General
|
|
10
|
+
|
|
11
|
+
Get started with Omnizip in 5 minutes. This guide covers the most common operations.
|
|
12
|
+
|
|
13
|
+
=== Installing Omnizip
|
|
14
|
+
|
|
15
|
+
First, install the gem:
|
|
16
|
+
|
|
17
|
+
[source,bash]
|
|
18
|
+
----
|
|
19
|
+
gem install omnizip
|
|
20
|
+
----
|
|
21
|
+
|
|
22
|
+
Or add to your Gemfile:
|
|
23
|
+
|
|
24
|
+
[source,ruby]
|
|
25
|
+
----
|
|
26
|
+
gem 'omnizip'
|
|
27
|
+
----
|
|
28
|
+
|
|
29
|
+
Then run `bundle install`.
|
|
30
|
+
|
|
31
|
+
=== Compressing a File
|
|
32
|
+
|
|
33
|
+
==== Command Line
|
|
34
|
+
|
|
35
|
+
[source,bash]
|
|
36
|
+
----
|
|
37
|
+
omnizip compress input.txt output.lzma --level 9
|
|
38
|
+
----
|
|
39
|
+
|
|
40
|
+
==== Ruby API
|
|
41
|
+
|
|
42
|
+
[source,ruby]
|
|
43
|
+
----
|
|
44
|
+
require 'omnizip'
|
|
45
|
+
|
|
46
|
+
Omnizip.compress_file('input.txt', 'output.lzma', level: 9)
|
|
47
|
+
----
|
|
48
|
+
|
|
49
|
+
=== Creating an Archive
|
|
50
|
+
|
|
51
|
+
==== Command Line
|
|
52
|
+
|
|
53
|
+
[source,bash]
|
|
54
|
+
----
|
|
55
|
+
omnizip archive create backup.7z documents/ photos/
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
==== Ruby API
|
|
59
|
+
|
|
60
|
+
[source,ruby]
|
|
61
|
+
----
|
|
62
|
+
require 'omnizip'
|
|
63
|
+
|
|
64
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z')
|
|
65
|
+
writer.add_directory('documents/')
|
|
66
|
+
writer.add_directory('photos/')
|
|
67
|
+
writer.close
|
|
68
|
+
----
|
|
69
|
+
|
|
70
|
+
=== Extracting an Archive
|
|
71
|
+
|
|
72
|
+
==== Command Line
|
|
73
|
+
|
|
74
|
+
[source,bash]
|
|
75
|
+
----
|
|
76
|
+
omnizip archive extract backup.7z output/
|
|
77
|
+
----
|
|
78
|
+
|
|
79
|
+
==== Ruby API
|
|
80
|
+
|
|
81
|
+
[source,ruby]
|
|
82
|
+
----
|
|
83
|
+
require 'omnizip'
|
|
84
|
+
|
|
85
|
+
reader = Omnizip::Formats::SevenZip::Reader.new('backup.7z')
|
|
86
|
+
reader.extract_all('output/')
|
|
87
|
+
reader.close
|
|
88
|
+
----
|
|
89
|
+
|
|
90
|
+
=== Listing Archive Contents
|
|
91
|
+
|
|
92
|
+
==== Command Line
|
|
93
|
+
|
|
94
|
+
[source,bash]
|
|
95
|
+
----
|
|
96
|
+
omnizip archive list backup.7z
|
|
97
|
+
----
|
|
98
|
+
|
|
99
|
+
==== Ruby API
|
|
100
|
+
|
|
101
|
+
[source,ruby]
|
|
102
|
+
----
|
|
103
|
+
require 'omnizip'
|
|
104
|
+
|
|
105
|
+
reader = Omnizip::Formats::SevenZip::Reader.new('backup.7z')
|
|
106
|
+
reader.open
|
|
107
|
+
reader.each_file do |entry|
|
|
108
|
+
puts "#{entry.name}: #{entry.size} bytes"
|
|
109
|
+
end
|
|
110
|
+
reader.close
|
|
111
|
+
----
|
|
112
|
+
|
|
113
|
+
=== Using Different Compression Algorithms
|
|
114
|
+
|
|
115
|
+
==== LZMA (High Compression)
|
|
116
|
+
|
|
117
|
+
[source,bash]
|
|
118
|
+
----
|
|
119
|
+
omnizip compress input.txt output.lzma --algorithm lzma --level 9
|
|
120
|
+
----
|
|
121
|
+
|
|
122
|
+
[source,ruby]
|
|
123
|
+
----
|
|
124
|
+
Omnizip.compress_file('input.txt', 'output.lzma',
|
|
125
|
+
algorithm: :lzma,
|
|
126
|
+
level: 9
|
|
127
|
+
)
|
|
128
|
+
----
|
|
129
|
+
|
|
130
|
+
==== BZip2 (Text Files)
|
|
131
|
+
|
|
132
|
+
[source,bash]
|
|
133
|
+
----
|
|
134
|
+
omnizip compress input.txt output.bz2 --algorithm bzip2 --level 9
|
|
135
|
+
----
|
|
136
|
+
|
|
137
|
+
[source,ruby]
|
|
138
|
+
----
|
|
139
|
+
Omnizip.compress_file('input.txt', 'output.bz2',
|
|
140
|
+
algorithm: :bzip2,
|
|
141
|
+
level: 9
|
|
142
|
+
)
|
|
143
|
+
----
|
|
144
|
+
|
|
145
|
+
==== Zstandard (Fast)
|
|
146
|
+
|
|
147
|
+
[source,bash]
|
|
148
|
+
----
|
|
149
|
+
omnizip compress input.txt output.zst --algorithm zstandard --level 3
|
|
150
|
+
----
|
|
151
|
+
|
|
152
|
+
[source,ruby]
|
|
153
|
+
----
|
|
154
|
+
Omnizip.compress_file('input.txt', 'output.zst',
|
|
155
|
+
algorithm: :zstandard,
|
|
156
|
+
level: 3
|
|
157
|
+
)
|
|
158
|
+
----
|
|
159
|
+
|
|
160
|
+
=== Common Compression Levels
|
|
161
|
+
|
|
162
|
+
[cols="1,2,2"]
|
|
163
|
+
|===
|
|
164
|
+
|Level |Speed |Ratio
|
|
165
|
+
|
|
166
|
+
|0-1
|
|
167
|
+
|Fastest
|
|
168
|
+
|Low (2-3x)
|
|
169
|
+
|
|
170
|
+
|3-5
|
|
171
|
+
|Fast
|
|
172
|
+
|Medium (3-5x)
|
|
173
|
+
|
|
174
|
+
|7-9
|
|
175
|
+
|Slow
|
|
176
|
+
|High (5-10x)
|
|
177
|
+
|===
|
|
178
|
+
|
|
179
|
+
=== Next Steps
|
|
180
|
+
|
|
181
|
+
* link:your-first-archive[Create Your First Archive] - More detailed examples
|
|
182
|
+
* link:../guides/basic-usage[Basic Usage Guide] - Comprehensive operations guide
|
|
183
|
+
* link:../guides/compression-algorithms/[Compression Algorithms] - Algorithm details
|
|
184
|
+
* link:../reference/cli[CLI Reference] - Complete command documentation
|
|
185
|
+
* link:../reference/api[API Reference] - Complete Ruby API documentation
|