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.
Files changed (511) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +32 -0
  4. data/.rubocop_todo.yml +754 -0
  5. data/COPYING +502 -0
  6. data/Gemfile +17 -0
  7. data/LICENSE +12 -0
  8. data/README.adoc +1045 -0
  9. data/Rakefile +12 -0
  10. data/benchmark/README.md +260 -0
  11. data/benchmark/benchmark_suite.rb +125 -0
  12. data/benchmark/compression_bench.rb +181 -0
  13. data/benchmark/filter_bench.rb +180 -0
  14. data/benchmark/models/benchmark_result.rb +59 -0
  15. data/benchmark/models/comparison_result.rb +69 -0
  16. data/benchmark/profile_suite.rb +167 -0
  17. data/benchmark/reporter.rb +150 -0
  18. data/benchmark/run_benchmarks.rb +66 -0
  19. data/benchmark/test_data.rb +137 -0
  20. data/config/formats/rar3_spec.yml +91 -0
  21. data/config/formats/rar5_spec.yml +102 -0
  22. data/docs/.github/workflows/docs.yml +142 -0
  23. data/docs/.gitignore +21 -0
  24. data/docs/.lychee.toml +67 -0
  25. data/docs/Gemfile +13 -0
  26. data/docs/RAR_WRITE_SUPPORT.md +26 -0
  27. data/docs/README.md +101 -0
  28. data/docs/_config.yml +112 -0
  29. data/docs/assets/logo.svg +1 -0
  30. data/docs/assets/omnizip-logo.pdf +1540 -11
  31. data/docs/comparison/feature-matrix.adoc +694 -0
  32. data/docs/comparison/index.adoc +113 -0
  33. data/docs/comparison/vs-7zip.adoc +309 -0
  34. data/docs/comparison/vs-peazip.adoc +77 -0
  35. data/docs/comparison/vs-rubyzip.adoc +342 -0
  36. data/docs/comparison/vs-winrar.adoc +100 -0
  37. data/docs/compatibility.adoc +579 -0
  38. data/docs/concepts/index.adoc +129 -0
  39. data/docs/developer/architecture.adoc +256 -0
  40. data/docs/developer/contributing.adoc +158 -0
  41. data/docs/developer/index.adoc +25 -0
  42. data/docs/developer/testing.adoc +212 -0
  43. data/docs/getting-started/basic-usage.adoc +271 -0
  44. data/docs/getting-started/index.adoc +42 -0
  45. data/docs/getting-started/installation.adoc +138 -0
  46. data/docs/getting-started/quick-start.adoc +185 -0
  47. data/docs/getting-started/your-first-archive.adoc +218 -0
  48. data/docs/guides/advanced-features/encryption.adoc +300 -0
  49. data/docs/guides/advanced-features/index.adoc +49 -0
  50. data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
  51. data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
  52. data/docs/guides/advanced-features/streaming.adoc +212 -0
  53. data/docs/guides/archive-formats/gzip-format.adoc +107 -0
  54. data/docs/guides/archive-formats/index.adoc +130 -0
  55. data/docs/guides/archive-formats/rar-format.adoc +104 -0
  56. data/docs/guides/archive-formats/rar5.adoc +521 -0
  57. data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
  58. data/docs/guides/archive-formats/tar-format.adoc +106 -0
  59. data/docs/guides/archive-formats/xz-format.adoc +118 -0
  60. data/docs/guides/archive-formats/zip-format.adoc +35 -0
  61. data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
  62. data/docs/guides/compression-algorithms/deflate.adoc +319 -0
  63. data/docs/guides/compression-algorithms/index.adoc +190 -0
  64. data/docs/guides/compression-algorithms/lzma.adoc +398 -0
  65. data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
  66. data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
  67. data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
  68. data/docs/guides/creating-archives.adoc +354 -0
  69. data/docs/guides/extracting-archives.adoc +53 -0
  70. data/docs/guides/format-conversion.adoc +64 -0
  71. data/docs/guides/index.adoc +49 -0
  72. data/docs/guides/migration-rubyzip.adoc +217 -0
  73. data/docs/guides/parity-archives.adoc +605 -0
  74. data/docs/guides/performance-tuning.adoc +88 -0
  75. data/docs/index.adoc +218 -0
  76. data/docs/lychee.toml +67 -0
  77. data/docs/reference/api/overview.adoc +188 -0
  78. data/docs/reference/cli/compress-command.adoc +114 -0
  79. data/docs/reference/cli/overview.adoc +140 -0
  80. data/docs/reference/index.adoc +26 -0
  81. data/docs/resources/faq.adoc +185 -0
  82. data/docs/resources/quick-reference.adoc +222 -0
  83. data/docs/troubleshooting/index.adoc +208 -0
  84. data/examples/api_comparison.rb +205 -0
  85. data/examples/deflate64_example.rb +96 -0
  86. data/examples/par2_demo.rb +121 -0
  87. data/examples/quick_start_native.rb +150 -0
  88. data/examples/quick_start_rubyzip.rb +115 -0
  89. data/examples/rubyzip_compatibility_demo.rb +194 -0
  90. data/exe/omnizip +27 -0
  91. data/lib/omnizip/algorithm.rb +130 -0
  92. data/lib/omnizip/algorithm_registry.rb +86 -0
  93. data/lib/omnizip/algorithms/.keep +0 -0
  94. data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
  95. data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
  96. data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
  97. data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
  98. data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
  99. data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
  100. data/lib/omnizip/algorithms/bzip2.rb +130 -0
  101. data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
  102. data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
  103. data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
  104. data/lib/omnizip/algorithms/deflate.rb +128 -0
  105. data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
  106. data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
  107. data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
  108. data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
  109. data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
  110. data/lib/omnizip/algorithms/deflate64.rb +109 -0
  111. data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
  112. data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
  113. data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
  114. data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
  115. data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
  116. data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
  117. data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
  118. data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
  119. data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
  120. data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
  121. data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
  122. data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
  123. data/lib/omnizip/algorithms/lzma/match.rb +32 -0
  124. data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
  125. data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
  126. data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
  127. data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
  128. data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
  129. data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
  130. data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
  131. data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
  132. data/lib/omnizip/algorithms/lzma/state.rb +127 -0
  133. data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
  134. data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
  135. data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
  136. data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
  137. data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
  138. data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
  139. data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
  140. data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
  141. data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
  142. data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
  143. data/lib/omnizip/algorithms/lzma.rb +238 -0
  144. data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
  145. data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
  146. data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
  147. data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
  148. data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
  149. data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
  150. data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
  151. data/lib/omnizip/algorithms/lzma2.rb +141 -0
  152. data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
  153. data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
  154. data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
  155. data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
  156. data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
  157. data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
  158. data/lib/omnizip/algorithms/ppmd7.rb +116 -0
  159. data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
  160. data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
  161. data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
  162. data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
  163. data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
  164. data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
  165. data/lib/omnizip/algorithms/ppmd8.rb +82 -0
  166. data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
  167. data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
  168. data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
  169. data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
  170. data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
  171. data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
  172. data/lib/omnizip/algorithms/zstandard.rb +138 -0
  173. data/lib/omnizip/buffer/memory_archive.rb +251 -0
  174. data/lib/omnizip/buffer/memory_extractor.rb +224 -0
  175. data/lib/omnizip/buffer.rb +176 -0
  176. data/lib/omnizip/checksum_registry.rb +114 -0
  177. data/lib/omnizip/checksums/crc32.rb +100 -0
  178. data/lib/omnizip/checksums/crc64.rb +101 -0
  179. data/lib/omnizip/checksums/crc_base.rb +158 -0
  180. data/lib/omnizip/checksums/verifier.rb +131 -0
  181. data/lib/omnizip/chunked/memory_manager.rb +194 -0
  182. data/lib/omnizip/chunked/reader.rb +78 -0
  183. data/lib/omnizip/chunked/writer.rb +120 -0
  184. data/lib/omnizip/chunked.rb +129 -0
  185. data/lib/omnizip/cli/output_formatter.rb +104 -0
  186. data/lib/omnizip/cli.rb +572 -0
  187. data/lib/omnizip/commands/.keep +0 -0
  188. data/lib/omnizip/commands/archive_create_command.rb +427 -0
  189. data/lib/omnizip/commands/archive_extract_command.rb +272 -0
  190. data/lib/omnizip/commands/archive_list_command.rb +218 -0
  191. data/lib/omnizip/commands/archive_repair_command.rb +131 -0
  192. data/lib/omnizip/commands/archive_verify_command.rb +117 -0
  193. data/lib/omnizip/commands/compress_command.rb +117 -0
  194. data/lib/omnizip/commands/decompress_command.rb +120 -0
  195. data/lib/omnizip/commands/list_command.rb +53 -0
  196. data/lib/omnizip/commands/metadata_command.rb +153 -0
  197. data/lib/omnizip/commands/parity_create_command.rb +122 -0
  198. data/lib/omnizip/commands/parity_repair_command.rb +122 -0
  199. data/lib/omnizip/commands/parity_verify_command.rb +124 -0
  200. data/lib/omnizip/commands/profile_list_command.rb +56 -0
  201. data/lib/omnizip/commands/profile_show_command.rb +44 -0
  202. data/lib/omnizip/convenience.rb +359 -0
  203. data/lib/omnizip/converter/conversion_registry.rb +49 -0
  204. data/lib/omnizip/converter/conversion_strategy.rb +121 -0
  205. data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
  206. data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
  207. data/lib/omnizip/converter.rb +105 -0
  208. data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
  209. data/lib/omnizip/crypto/aes256/constants.rb +28 -0
  210. data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
  211. data/lib/omnizip/crypto/aes256.rb +102 -0
  212. data/lib/omnizip/error.rb +106 -0
  213. data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
  214. data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
  215. data/lib/omnizip/eta/rate_calculator.rb +104 -0
  216. data/lib/omnizip/eta/sample_history.rb +143 -0
  217. data/lib/omnizip/eta/time_estimator.rb +106 -0
  218. data/lib/omnizip/eta.rb +63 -0
  219. data/lib/omnizip/extraction/filter_chain.rb +177 -0
  220. data/lib/omnizip/extraction/glob_pattern.rb +140 -0
  221. data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
  222. data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
  223. data/lib/omnizip/extraction/regex_pattern.rb +50 -0
  224. data/lib/omnizip/extraction/selective_extractor.rb +240 -0
  225. data/lib/omnizip/extraction.rb +111 -0
  226. data/lib/omnizip/file_type/mime_classifier.rb +144 -0
  227. data/lib/omnizip/file_type.rb +113 -0
  228. data/lib/omnizip/filter.rb +139 -0
  229. data/lib/omnizip/filter_pipeline.rb +108 -0
  230. data/lib/omnizip/filter_registry.rb +166 -0
  231. data/lib/omnizip/filters/bcj.rb +279 -0
  232. data/lib/omnizip/filters/bcj2/constants.rb +53 -0
  233. data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
  234. data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
  235. data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
  236. data/lib/omnizip/filters/bcj2.rb +99 -0
  237. data/lib/omnizip/filters/bcj_arm.rb +176 -0
  238. data/lib/omnizip/filters/bcj_arm64.rb +244 -0
  239. data/lib/omnizip/filters/bcj_ia64.rb +196 -0
  240. data/lib/omnizip/filters/bcj_ppc.rb +190 -0
  241. data/lib/omnizip/filters/bcj_sparc.rb +176 -0
  242. data/lib/omnizip/filters/bcj_x86.rb +193 -0
  243. data/lib/omnizip/filters/delta.rb +196 -0
  244. data/lib/omnizip/filters/filter_base.rb +72 -0
  245. data/lib/omnizip/filters/registry.rb +123 -0
  246. data/lib/omnizip/filters/xz_delta.rb +258 -0
  247. data/lib/omnizip/format_detector.rb +162 -0
  248. data/lib/omnizip/format_registry.rb +59 -0
  249. data/lib/omnizip/formats/.keep +0 -0
  250. data/lib/omnizip/formats/bzip2_file.rb +172 -0
  251. data/lib/omnizip/formats/cpio/constants.rb +55 -0
  252. data/lib/omnizip/formats/cpio/entry.rb +385 -0
  253. data/lib/omnizip/formats/cpio/reader.rb +196 -0
  254. data/lib/omnizip/formats/cpio/writer.rb +234 -0
  255. data/lib/omnizip/formats/cpio.rb +140 -0
  256. data/lib/omnizip/formats/format_spec_loader.rb +230 -0
  257. data/lib/omnizip/formats/gzip.rb +238 -0
  258. data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
  259. data/lib/omnizip/formats/iso/directory_record.rb +152 -0
  260. data/lib/omnizip/formats/iso/joliet.rb +204 -0
  261. data/lib/omnizip/formats/iso/path_table.rb +125 -0
  262. data/lib/omnizip/formats/iso/reader.rb +197 -0
  263. data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
  264. data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
  265. data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
  266. data/lib/omnizip/formats/iso/writer.rb +530 -0
  267. data/lib/omnizip/formats/iso.rb +140 -0
  268. data/lib/omnizip/formats/lzip.rb +175 -0
  269. data/lib/omnizip/formats/lzma_alone.rb +171 -0
  270. data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
  271. data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
  272. data/lib/omnizip/formats/rar/block_parser.rb +243 -0
  273. data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
  274. data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
  275. data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
  276. data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
  277. data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
  278. data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
  279. data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
  280. data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
  281. data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
  282. data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
  283. data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
  284. data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
  285. data/lib/omnizip/formats/rar/constants.rb +82 -0
  286. data/lib/omnizip/formats/rar/decompressor.rb +238 -0
  287. data/lib/omnizip/formats/rar/external_writer.rb +312 -0
  288. data/lib/omnizip/formats/rar/header.rb +192 -0
  289. data/lib/omnizip/formats/rar/license_validator.rb +109 -0
  290. data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
  291. data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
  292. data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
  293. data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
  294. data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
  295. data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
  296. data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
  297. data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
  298. data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
  299. data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
  300. data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
  301. data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
  302. data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
  303. data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
  304. data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
  305. data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
  306. data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
  307. data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
  308. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
  309. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
  310. data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
  311. data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
  312. data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
  313. data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
  314. data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
  315. data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
  316. data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
  317. data/lib/omnizip/formats/rar/reader.rb +366 -0
  318. data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
  319. data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
  320. data/lib/omnizip/formats/rar/writer.rb +431 -0
  321. data/lib/omnizip/formats/rar.rb +205 -0
  322. data/lib/omnizip/formats/rar3/compressor.rb +73 -0
  323. data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
  324. data/lib/omnizip/formats/rar3/reader.rb +386 -0
  325. data/lib/omnizip/formats/rar3/writer.rb +219 -0
  326. data/lib/omnizip/formats/rar5/compressor.rb +73 -0
  327. data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
  328. data/lib/omnizip/formats/rar5/reader.rb +342 -0
  329. data/lib/omnizip/formats/rar5/writer.rb +214 -0
  330. data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
  331. data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
  332. data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
  333. data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
  334. data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
  335. data/lib/omnizip/formats/seven_zip/header.rb +106 -0
  336. data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
  337. data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
  338. data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
  339. data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
  340. data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
  341. data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
  342. data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
  343. data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
  344. data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
  345. data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
  346. data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
  347. data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
  348. data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
  349. data/lib/omnizip/formats/seven_zip.rb +93 -0
  350. data/lib/omnizip/formats/tar/constants.rb +73 -0
  351. data/lib/omnizip/formats/tar/entry.rb +94 -0
  352. data/lib/omnizip/formats/tar/header.rb +168 -0
  353. data/lib/omnizip/formats/tar/reader.rb +121 -0
  354. data/lib/omnizip/formats/tar/writer.rb +216 -0
  355. data/lib/omnizip/formats/tar.rb +84 -0
  356. data/lib/omnizip/formats/xz/reader.rb +116 -0
  357. data/lib/omnizip/formats/xz.rb +237 -0
  358. data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
  359. data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
  360. data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
  361. data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
  362. data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
  363. data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
  364. data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
  365. data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
  366. data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
  367. data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
  368. data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
  369. data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
  370. data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
  371. data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
  372. data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
  373. data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
  374. data/lib/omnizip/formats/zip/constants.rb +69 -0
  375. data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
  376. data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
  377. data/lib/omnizip/formats/zip/reader.rb +250 -0
  378. data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
  379. data/lib/omnizip/formats/zip/writer.rb +375 -0
  380. data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
  381. data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
  382. data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
  383. data/lib/omnizip/formats/zip.rb +50 -0
  384. data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
  385. data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
  386. data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
  387. data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
  388. data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
  389. data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
  390. data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
  391. data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
  392. data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
  393. data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
  394. data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
  395. data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
  396. data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
  397. data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
  398. data/lib/omnizip/io/buffered_input.rb +146 -0
  399. data/lib/omnizip/io/buffered_output.rb +105 -0
  400. data/lib/omnizip/io/stream_manager.rb +115 -0
  401. data/lib/omnizip/link_handler/hard_link.rb +79 -0
  402. data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
  403. data/lib/omnizip/link_handler.rb +124 -0
  404. data/lib/omnizip/metadata/archive_metadata.rb +114 -0
  405. data/lib/omnizip/metadata/entry_metadata.rb +146 -0
  406. data/lib/omnizip/metadata/metadata_editor.rb +171 -0
  407. data/lib/omnizip/metadata/metadata_registry.rb +64 -0
  408. data/lib/omnizip/metadata/metadata_validator.rb +99 -0
  409. data/lib/omnizip/metadata.rb +57 -0
  410. data/lib/omnizip/models/.keep +0 -0
  411. data/lib/omnizip/models/algorithm_metadata.rb +73 -0
  412. data/lib/omnizip/models/compression_options.rb +71 -0
  413. data/lib/omnizip/models/conversion_options.rb +87 -0
  414. data/lib/omnizip/models/conversion_result.rb +135 -0
  415. data/lib/omnizip/models/eta_result.rb +46 -0
  416. data/lib/omnizip/models/extraction_rule.rb +115 -0
  417. data/lib/omnizip/models/filter_chain.rb +144 -0
  418. data/lib/omnizip/models/filter_config.rb +183 -0
  419. data/lib/omnizip/models/match_result.rb +124 -0
  420. data/lib/omnizip/models/optimization_suggestion.rb +91 -0
  421. data/lib/omnizip/models/parallel_options.rb +104 -0
  422. data/lib/omnizip/models/performance_result.rb +79 -0
  423. data/lib/omnizip/models/profile_report.rb +82 -0
  424. data/lib/omnizip/models/progress_options.rb +38 -0
  425. data/lib/omnizip/models/split_options.rb +116 -0
  426. data/lib/omnizip/optimization_registry.rb +81 -0
  427. data/lib/omnizip/parallel/job_queue.rb +209 -0
  428. data/lib/omnizip/parallel/job_scheduler.rb +203 -0
  429. data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
  430. data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
  431. data/lib/omnizip/parallel/worker_pool.rb +223 -0
  432. data/lib/omnizip/parallel.rb +149 -0
  433. data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
  434. data/lib/omnizip/parity/galois16.rb +145 -0
  435. data/lib/omnizip/parity/models/creator_packet.rb +73 -0
  436. data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
  437. data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
  438. data/lib/omnizip/parity/models/main_packet.rb +128 -0
  439. data/lib/omnizip/parity/models/packet.rb +156 -0
  440. data/lib/omnizip/parity/models/packet_registry.rb +109 -0
  441. data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
  442. data/lib/omnizip/parity/par2_creator.rb +531 -0
  443. data/lib/omnizip/parity/par2_repairer.rb +407 -0
  444. data/lib/omnizip/parity/par2_verifier.rb +364 -0
  445. data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
  446. data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
  447. data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
  448. data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
  449. data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
  450. data/lib/omnizip/parity.rb +186 -0
  451. data/lib/omnizip/password/encryption_registry.rb +65 -0
  452. data/lib/omnizip/password/encryption_strategy.rb +96 -0
  453. data/lib/omnizip/password/password_validator.rb +129 -0
  454. data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
  455. data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
  456. data/lib/omnizip/password.rb +87 -0
  457. data/lib/omnizip/pipe/stream_compressor.rb +124 -0
  458. data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
  459. data/lib/omnizip/pipe.rb +121 -0
  460. data/lib/omnizip/platform/ntfs_streams.rb +201 -0
  461. data/lib/omnizip/platform.rb +189 -0
  462. data/lib/omnizip/profile/archive_profile.rb +39 -0
  463. data/lib/omnizip/profile/balanced_profile.rb +33 -0
  464. data/lib/omnizip/profile/binary_profile.rb +36 -0
  465. data/lib/omnizip/profile/compression_profile.rb +158 -0
  466. data/lib/omnizip/profile/custom_profile.rb +157 -0
  467. data/lib/omnizip/profile/fast_profile.rb +33 -0
  468. data/lib/omnizip/profile/maximum_profile.rb +33 -0
  469. data/lib/omnizip/profile/profile_detector.rb +110 -0
  470. data/lib/omnizip/profile/profile_registry.rb +161 -0
  471. data/lib/omnizip/profile/text_profile.rb +36 -0
  472. data/lib/omnizip/profile.rb +190 -0
  473. data/lib/omnizip/profiler/memory_profiler.rb +66 -0
  474. data/lib/omnizip/profiler/method_profiler.rb +49 -0
  475. data/lib/omnizip/profiler/report_generator.rb +169 -0
  476. data/lib/omnizip/profiler.rb +204 -0
  477. data/lib/omnizip/progress/callback_reporter.rb +36 -0
  478. data/lib/omnizip/progress/console_reporter.rb +62 -0
  479. data/lib/omnizip/progress/log_reporter.rb +91 -0
  480. data/lib/omnizip/progress/operation_progress.rb +118 -0
  481. data/lib/omnizip/progress/progress_bar.rb +156 -0
  482. data/lib/omnizip/progress/progress_reporter.rb +40 -0
  483. data/lib/omnizip/progress/progress_tracker.rb +190 -0
  484. data/lib/omnizip/progress/silent_reporter.rb +24 -0
  485. data/lib/omnizip/progress.rb +127 -0
  486. data/lib/omnizip/rubyzip_compat.rb +63 -0
  487. data/lib/omnizip/temp/safe_extract.rb +168 -0
  488. data/lib/omnizip/temp/temp_file.rb +124 -0
  489. data/lib/omnizip/temp/temp_file_pool.rb +109 -0
  490. data/lib/omnizip/temp.rb +181 -0
  491. data/lib/omnizip/version.rb +5 -0
  492. data/lib/omnizip/zip/entry.rb +156 -0
  493. data/lib/omnizip/zip/file.rb +485 -0
  494. data/lib/omnizip/zip/input_stream.rb +273 -0
  495. data/lib/omnizip/zip/output_stream.rb +324 -0
  496. data/lib/omnizip.rb +156 -0
  497. data/readme-docs/advanced-features.adoc +515 -0
  498. data/readme-docs/api-usage.adoc +444 -0
  499. data/readme-docs/architecture.adoc +449 -0
  500. data/readme-docs/archive-formats.adoc +479 -0
  501. data/readme-docs/cli-usage.adoc +222 -0
  502. data/readme-docs/compression-algorithms.adoc +442 -0
  503. data/readme-docs/compression-profiles.adoc +247 -0
  504. data/readme-docs/encryption-checksums.adoc +328 -0
  505. data/readme-docs/format-converter.adoc +325 -0
  506. data/readme-docs/installation.adoc +228 -0
  507. data/readme-docs/par2-archives.adoc +608 -0
  508. data/readme-docs/performance-profiler.adoc +389 -0
  509. data/readme-docs/preprocessing-filters.adoc +280 -0
  510. data/xz-file-format-1.2.1.txt +1174 -0
  511. 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