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
data/docs/index.adoc ADDED
@@ -0,0 +1,218 @@
1
+ ---
2
+ title: Home
3
+ nav_order: 0
4
+ ---
5
+
6
+ == Omnizip: Pure Ruby compression library
7
+
8
+ === Purpose
9
+
10
+ Omnizip is a comprehensive pure Ruby implementation of compression algorithms and archive formats. Built on an extensible, registry-based architecture with clean object-oriented design, Omnizip provides full-featured compression capabilities without external dependencies.
11
+
12
+ This implementation supports multiple compression algorithms (LZMA, LZMA2, BZip2, PPMd7/8, Deflate, Deflate64, Zstandard), preprocessing filters (BCJ variants, Delta), encryption (AES-256), and complete support for multiple archive formats (.7z, ZIP, RAR, TAR, ISO, CPIO, GZIP, XZ, BZIP2).
13
+
14
+ It provides both a command-line interface and a programmatic Ruby API, making it ideal for applications requiring portable, dependency-free compression without relying on system-level libraries or external binaries.
15
+
16
+ **Pure Ruby Implementation:** Works on all Ruby platforms (MRI, JRuby, TruffleRuby) with zero external dependencies. Performance is 10-60x slower than native implementations, which is an acceptable trade-off for maximum portability.
17
+
18
+ === Quick Start
19
+
20
+ Get started with Omnizip in minutes:
21
+
22
+ * link:getting-started/installation.html[Install the gem and dependencies]
23
+ * link:getting-started/quick-start.html[Compress your first file in 5 minutes]
24
+ * link:getting-started/your-first-archive.html[Create your first archive]
25
+
26
+ === Documentation Map
27
+
28
+ ==== New to Omnizip?
29
+
30
+ Follow this learning path:
31
+
32
+ . Install Omnizip
33
+ ** link:getting-started/installation.html[Installation Guide]
34
+
35
+ . Quick Start (5 minutes)
36
+ ** link:getting-started/quick-start.html[Quick Start Guide]
37
+
38
+ . Create Your First Archive
39
+ ** link:getting-started/your-first-archive.html[Create Your First Archive]
40
+
41
+ . Learn Basic Operations
42
+ ** link:guides/creating-archives.html[Create archives]
43
+ ** link:guides/extracting-archives.html[Extract from archives]
44
+
45
+ ==== Looking for Something Specific?
46
+
47
+ **Working with Files**
48
+
49
+ * link:guides/creating-archives.html[Create new archives]
50
+ * link:guides/extracting-archives.html[Extract from archives]
51
+ * link:guides/format-conversion.html[Convert between formats]
52
+
53
+ **Compression Algorithms**
54
+
55
+ * link:guides/compression-algorithms/lzma.html[LZMA/LZMA2 compression]
56
+ * link:guides/compression-algorithms/bzip2.html[BZip2 compression]
57
+ * link:guides/compression-algorithms/ppmd.html[PPMd7/PPMd8 compression]
58
+ * link:guides/compression-algorithms/deflate.html[Deflate/Deflate64 compression]
59
+ * link:guides/compression-algorithms/zstandard.html[Zstandard compression]
60
+
61
+ **Archive Formats**
62
+
63
+ * link:guides/archive-formats/seven-zip-format.html[7z archives]
64
+ * link:guides/archive-formats/zip-format.html[ZIP archives]
65
+ * link:guides/archive-formats/rar-format.html[RAR4/RAR5 archives]
66
+ * link:guides/archive-formats/tar-format.html[TAR archives]
67
+ * link:guides/archive-formats/gzip-format.html[GZIP files]
68
+ * link:guides/archive-formats/xz-format.html[XZ files]
69
+
70
+ **Advanced Features**
71
+
72
+ * link:guides/advanced-features/streaming.html[Streaming operations]
73
+ * link:guides/advanced-features/parallel-processing.html[Parallel processing]
74
+ * link:guides/advanced-features/encryption.html[Encryption]
75
+ * link:guides/parity-archives.html[PAR2 error correction]
76
+
77
+ **Reference Materials**
78
+
79
+ * link:resources/quick-reference.html[Cheat sheet for common operations]
80
+ * link:reference/cli/overview.html[Command-line interface documentation]
81
+ * link:reference/api/overview.html[Ruby API documentation]
82
+ * link:concepts/index.html[Core concepts explained]
83
+ * link:developer/architecture.html[Design and implementation details]
84
+
85
+ === Supported Compression Algorithms
86
+
87
+ Omnizip supports 6 major compression algorithms:
88
+
89
+ [cols="1,3,2"]
90
+ |===
91
+ |Algorithm |Description |Best For
92
+
93
+ |LZMA/LZMA2
94
+ |Dictionary-based compression with high ratio
95
+ |Archives, backups, general compression
96
+
97
+ |BZip2
98
+ |Burrows-Wheeler Transform compression
99
+ |Text files, source code
100
+
101
+ |PPMd7/PPMd8
102
+ |Prediction by Partial Matching
103
+ |Text, documents, natural language
104
+
105
+ |Deflate/Deflate64
106
+ |ZIP-compatible compression
107
+ |Cross-platform compatibility
108
+
109
+ |Zstandard
110
+ |Modern fast compression
111
+ |Speed-sensitive applications
112
+ |===
113
+
114
+ === Supported Archive Formats
115
+
116
+ Omnizip supports 10 archive formats:
117
+
118
+ [cols="1,3,2"]
119
+ |===
120
+ |Format |Description |Common Use
121
+
122
+ |.7z
123
+ |7-Zip archives with solid compression
124
+ |Software distribution, backups
125
+
126
+ |ZIP
127
+ |ZIP archives with ZIP64 support
128
+ |Cross-platform archives
129
+
130
+ |RAR4/RAR5
131
+ |RAR archives with multi-volume support
132
+ |Binary distribution, file sharing
133
+
134
+ |TAR
135
+ |TAR archives with POSIX extensions
136
+ |Unix backups, software packaging
137
+
138
+ |ISO 9660
139
+ |ISO optical disc images
140
+ |CD/DVD images
141
+
142
+ |CPIO
143
+ |CPIO archives
144
+ |Unix system backups
145
+
146
+ |GZIP
147
+ |GZIP compressed files
148
+ |Single file compression
149
+
150
+ |XZ
151
+ |XZ compressed files with LZMA2
152
+ |System package compression
153
+
154
+ |BZIP2
155
+ |BZIP2 compressed files
156
+ |Text file compression
157
+ |===
158
+
159
+ === Key Features
160
+
161
+ * **Pure Ruby** - No native dependencies, works on any Ruby platform
162
+ * **Registry-Based** - Extensible plugin architecture for algorithms and formats
163
+ * **Multiple Formats** - Support for 10+ archive formats
164
+ * **Compression Profiles** - Smart algorithm selection based on file type
165
+ * **Solid Archives** - Shared dictionary for better compression ratios
166
+ * **Multi-Volume** - Split archives across multiple files
167
+ * **Encryption** - AES-256 password protection
168
+ * **PAR2 Support** - Error correction and recovery records
169
+ * **CLI Tools** - Complete command-line interface
170
+ * **Ruby API** - Full programmatic access
171
+ * **Enumerable** - All collections support Ruby's Enumerable interface
172
+
173
+ === Example Usage
174
+
175
+ .Compressing a file
176
+ [source,ruby]
177
+ ----
178
+ require 'omnizip'
179
+
180
+ # Simple one-liner
181
+ Omnizip.compress_file('input.txt', 'output.zip')
182
+
183
+ # With options
184
+ Omnizip.compress_file('input.txt', 'output.lzma',
185
+ algorithm: :lzma,
186
+ level: 9
187
+ )
188
+ ----
189
+
190
+ .Command-line interface
191
+ [source,bash]
192
+ ----
193
+ # Compress a file
194
+ omnizip compress input.txt output.lzma --level 9
195
+
196
+ # Create a .7z archive
197
+ omnizip archive create backup.7z documents/ photos/
198
+
199
+ # Extract an archive
200
+ omnizip archive extract backup.7z output/
201
+
202
+ # List archive contents
203
+ omnizip archive list backup.7z
204
+ ----
205
+
206
+ === Getting help
207
+
208
+ * **Documentation**: Browse the guides and reference sections
209
+ * **Issues**: Report bugs at https://github.com/metanorma/omnizip/issues
210
+ * **Source**: View the code at https://github.com/metanorma/omnizip
211
+
212
+ === Related sections
213
+
214
+ * link:getting-started/index.html[Installation and quick start]
215
+ * link:guides/index.html[Comprehensive usage guides]
216
+ * link:reference/index.html[API and CLI documentation]
217
+ * link:concepts/index.html[Core concepts and architecture]
218
+ * link:troubleshooting/index.html[Common problems and solutions]
data/docs/lychee.toml ADDED
@@ -0,0 +1,67 @@
1
+ # Lychee Link Checker Configuration
2
+ # For Omnizip Documentation
3
+ # https://github.com/lycheeverse/lychee
4
+
5
+ # Cache results to avoid re-checking same URLs
6
+ cache = true
7
+ max_cache_age = "1d"
8
+
9
+ # Check both source files and built site
10
+ include_verbatim = true
11
+
12
+ # Recursively check all files
13
+ recursive = true
14
+
15
+ # File types to check
16
+ include = [
17
+ "_site/**/*.html"
18
+ ]
19
+
20
+ # Excluded paths
21
+ exclude = [
22
+ ".git",
23
+ ".github",
24
+ "node_modules",
25
+ "vendor",
26
+ ".bundle",
27
+ ".sass-cache",
28
+ ".jekyll-cache"
29
+ ]
30
+
31
+ # Link checking behavior
32
+ max_redirects = 10
33
+ max_retries = 3
34
+ timeout = 20
35
+
36
+ # Accept status codes
37
+ accept = [
38
+ "100..=103", # Informational
39
+ "200..=299", # Success
40
+ "429" # Too Many Requests (retry handled by max_retries)
41
+ ]
42
+
43
+ # User agent to identify ourselves
44
+ user_agent = "lychee/omnizip-docs-link-checker"
45
+
46
+ # Check HTTP, HTTPS, and file:// schemes
47
+ scheme = ["https", "http", "file"]
48
+
49
+ # Include file:// URLs for local link checking
50
+ include_file = true
51
+
52
+ # Handle different link types
53
+ include_mail = false # Don't check mailto: links
54
+
55
+ # Follow links but don't check their content recursively
56
+ max_concurrency = 8
57
+
58
+ # Verbose output for debugging
59
+ verbose = "info"
60
+
61
+ # Require HTTPS where possible
62
+ require_https = false # Don't enforce
63
+
64
+ # Check fragment identifiers (anchors)
65
+ # include_fragments = true
66
+
67
+ index_files = ["index.html"]
@@ -0,0 +1,188 @@
1
+ ---
2
+ title: API Overview
3
+ nav_order: 60
4
+ parent: Reference
5
+ ---
6
+
7
+ == Ruby API Overview
8
+
9
+ === General
10
+
11
+ Omnizip provides a comprehensive Ruby API for all compression and archive operations.
12
+
13
+ === Requiring the Library
14
+
15
+ [source,ruby]
16
+ ----
17
+ require 'omnizip'
18
+ ----
19
+
20
+ === Convenience Methods
21
+
22
+ ==== File Operations
23
+
24
+ [source,ruby]
25
+ ----
26
+ # Compress a file
27
+ Omnizip.compress_file('input.txt', 'output.lzma')
28
+
29
+ # Decompress a file
30
+ Omnizip.decompress_file('output.lzma', 'restored.txt')
31
+
32
+ # Extract archive
33
+ Omnizip.extract_archive('archive.7z', 'output/')
34
+
35
+ # List archive contents
36
+ Omnizip.list_archive('archive.7z')
37
+ ----
38
+
39
+ ==== Stream Operations
40
+
41
+ [source,ruby]
42
+ ----
43
+ # Compress streams
44
+ File.open('input.txt', 'rb') do |input|
45
+ File.open('output.lzma', 'wb') do |output|
46
+ Omnizip.compress_stream(input, output)
47
+ end
48
+ end
49
+
50
+ # Decompress streams
51
+ File.open('output.lzma', 'rb') do |input|
52
+ File.open('restored.txt', 'wb') do |output|
53
+ Omnizip.decompress_stream(input, output)
54
+ end
55
+ end
56
+ ----
57
+
58
+ === Registry-Based API
59
+
60
+ ==== Algorithm Registry
61
+
62
+ [source,ruby]
63
+ ----
64
+ # List available algorithms
65
+ Omnizip::AlgorithmRegistry.registered.each do |name|
66
+ puts "Algorithm: #{name}"
67
+ end
68
+
69
+ # Get algorithm instance
70
+ lzma = Omnizip::AlgorithmRegistry.get(:lzma).new(level: 9)
71
+
72
+ # Use algorithm
73
+ File.open('input.txt', 'rb') do |input|
74
+ File.open('output.lzma', 'wb') do |output|
75
+ lzma.compress(input, output)
76
+ end
77
+ end
78
+ ----
79
+
80
+ ==== Format Registry
81
+
82
+ [source,ruby]
83
+ ----
84
+ # List available formats
85
+ Omnizip::FormatRegistry.registered.each do |name|
86
+ puts "Format: #{name}"
87
+ end
88
+
89
+ # Create format-specific writer
90
+ writer = Omnizip::FormatRegistry.get(:seven_zip).new_writer('archive.7z')
91
+ writer.add_file('document.txt')
92
+ writer.close
93
+ ----
94
+
95
+ === Archive Operations
96
+
97
+ ==== Creating Archives
98
+
99
+ [source,ruby]
100
+ ----
101
+ # 7z archive
102
+ writer = Omnizip::Formats::SevenZip::Writer.new('archive.7z')
103
+ writer.add_file('document.txt')
104
+ writer.add_directory('photos/')
105
+ writer.close
106
+
107
+ # ZIP archive
108
+ writer = Omnizip::Formats::Zip::Writer.new('archive.zip')
109
+ writer.add_file('document.txt')
110
+ writer.close
111
+ ----
112
+
113
+ ==== Extracting Archives
114
+
115
+ [source,ruby]
116
+ ----
117
+ # 7z archive
118
+ reader = Omnizip::Formats::SevenZip::Reader.new('archive.7z')
119
+ reader.extract_all('output/')
120
+ reader.close
121
+
122
+ # ZIP archive
123
+ reader = Omnizip::Formats::Zip::Reader.new('archive.zip')
124
+ reader.extract_all('output/')
125
+ reader.close
126
+ ----
127
+
128
+ ==== Listing Contents
129
+
130
+ [source,ruby]
131
+ ----
132
+ reader = Omnizip::Formats::SevenZip::Reader.new('archive.7z')
133
+ reader.open
134
+ reader.each_file do |entry|
135
+ puts "#{entry.name}: #{entry.size} bytes"
136
+ end
137
+ reader.close
138
+ ----
139
+
140
+ === Error Handling
141
+
142
+ [source,ruby]
143
+ ----
144
+ begin
145
+ Omnizip.compress_file('input.txt', 'output.lzma')
146
+ rescue Omnizip::CompressionError => e
147
+ puts "Compression failed: #{e.message}"
148
+ rescue Omnizip::AlgorithmNotFound => e
149
+ puts "Algorithm not found: #{e.message}"
150
+ rescue IOError => e
151
+ puts "I/O error: #{e.message}"
152
+ end
153
+ ----
154
+
155
+ === Progress Tracking
156
+
157
+ [source,ruby]
158
+ ----
159
+ # Create tracker with callback
160
+ progress = Omnizip::ProgressTracker.new
161
+
162
+ Omnizip.compress_file('large.txt', 'large.lzma',
163
+ progress_callback: ->(percent) {
164
+ puts "Progress: #{percent}%" if percent % 10 == 0
165
+ }
166
+ )
167
+ ----
168
+
169
+ === Configuration
170
+
171
+ [source,ruby]
172
+ ----
173
+ # Set default compression level
174
+ Omnizip.config.default_level = 7
175
+
176
+ # Set default algorithm
177
+ Omnizip.config.default_algorithm = :lzma2
178
+
179
+ # Enable verbose output
180
+ Omnizip.config.verbose = true
181
+ ----
182
+
183
+ === See Also
184
+
185
+ * link:compression-api[Compression API] - Compression details
186
+ * link:decompression-api[Decompression API] - Decompression details
187
+ * link:archive-api[Archive API] - Archive operations
188
+ * link:algorithm-registry[Algorithm Registry] - Algorithm management
@@ -0,0 +1,114 @@
1
+ ---
2
+ title: compress - Compress Files
3
+ nav_order: 52
4
+ parent: Reference
5
+ ---
6
+
7
+ == compress Command
8
+
9
+ === General
10
+
11
+ Compress individual files using various compression algorithms.
12
+
13
+ === Syntax
14
+
15
+ [source,bash]
16
+ ----
17
+ omnizip compress [OPTIONS] INPUT OUTPUT
18
+ ----
19
+
20
+ === Arguments
21
+
22
+ `INPUT`:: Input file path (use `-` for stdin)
23
+ `OUTPUT`:: Output file path (use `-` for stdout)
24
+
25
+ === Options
26
+
27
+ `--algorithm ALGORITHM`:: Compression algorithm (default: lzma)
28
+ `--format FORMAT`:: Archive format (zip, 7z) for pipe mode
29
+ `--level LEVEL`:: Compression level (1-9, default: 5)
30
+ `--entry-name NAME`:: Entry name for pipe mode
31
+ `--verbose`, `-v`:: Enable verbose output
32
+
33
+ === Examples
34
+
35
+ ==== Basic Compression
36
+
37
+ [source,bash]
38
+ ----
39
+ omnizip compress input.txt output.lzma
40
+ ----
41
+
42
+ ==== With Algorithm
43
+
44
+ [source,bash]
45
+ ----
46
+ # LZMA
47
+ omnizip compress input.txt output.lzma --algorithm lzma
48
+
49
+ # BZip2
50
+ omnizip compress input.txt output.bz2 --algorithm bzip2
51
+
52
+ # Zstandard
53
+ omnizip compress input.txt output.zst --algorithm zstandard
54
+ ----
55
+
56
+ ==== With Level
57
+
58
+ [source,bash]
59
+ ----
60
+ # Fast
61
+ omnizip compress input.txt output.lzma --level 1
62
+
63
+ # Maximum
64
+ omnizip compress input.txt output.lzma --level 9
65
+ ----
66
+
67
+ ==== Pipe Mode
68
+
69
+ [source,bash]
70
+ ----
71
+ # From stdin
72
+ cat input.txt | omnizip compress - output.lzma
73
+
74
+ # To stdout
75
+ omnizip compress input.txt - > output.lzma
76
+
77
+ # Full pipe
78
+ cat input.txt | omnizip compress - - | other-command
79
+ ----
80
+
81
+ ==== With Format
82
+
83
+ [source,bash]
84
+ ----
85
+ # Create ZIP
86
+ cat input.txt | omnizip compress - output.zip --format zip
87
+
88
+ # Create 7z
89
+ cat input.txt | omnizip compress - output.7z --format 7z
90
+ ----
91
+
92
+ === Algorithms
93
+
94
+ Available algorithms:
95
+
96
+ * `lzma` - LZMA compression
97
+ * `lzma2` - LZMA2 compression (default)
98
+ * `bzip2` - BZip2 compression
99
+ * `ppmd7` - PPMd7 compression
100
+ * `deflate` - Deflate compression
101
+ * `zstandard` - Zstandard compression
102
+
103
+ === Performance Tips
104
+
105
+ 1. **Use level 1-3** for temporary files
106
+ 2. **Use level 5-7** for general compression
107
+ 3. **Use level 8-9** for long-term storage
108
+ 4. **Use Zstandard** for speed-sensitive applications
109
+ 5. **Use LZMA2** for maximum compression
110
+
111
+ === See Also
112
+
113
+ * link:overview.html[CLI Overview] - Command-line interface
114
+ * link:../api/overview.html[Ruby API Overview] - Programmatic interface
@@ -0,0 +1,140 @@
1
+ ---
2
+ title: CLI Overview
3
+ nav_order: 51
4
+ parent: Reference
5
+ ---
6
+
7
+ == Command-Line Interface Overview
8
+
9
+ === General
10
+
11
+ Omnizip provides a comprehensive command-line interface for all compression and archive operations.
12
+
13
+ === Basic Syntax
14
+
15
+ [source,bash]
16
+ ----
17
+ omnizip [global-options] COMMAND [command-options] [arguments]
18
+ ----
19
+
20
+ === Global Options
21
+
22
+ `--version`, `-v`:: Show version information
23
+ `--help`, `-h`:: Show help message
24
+
25
+ === Available Commands
26
+
27
+ ==== Compression Commands
28
+
29
+ * link:compress-command[`compress`] - Compress a file or stream
30
+ * link:decompress-command[`decompress`] - Decompress a file or stream
31
+
32
+ ==== Archive Commands
33
+
34
+ * link:archive-command[`archive create`] - Create an archive
35
+ * link:archive-command[`archive extract`] - Extract an archive
36
+ * link:archive-command[`archive list`] - List archive contents
37
+ * link:archive-command[`archive metadata`] - View/edit archive metadata
38
+
39
+ ==== Utility Commands
40
+
41
+ * link:list-command[`list`] - List available algorithms
42
+ * link:profile-command[`profile`] - Manage compression profiles
43
+ * link:convert-command[`convert`] - Convert between formats
44
+
45
+ === Common Patterns
46
+
47
+ ==== Pipe Mode
48
+
49
+ Use `-` for stdin/stdout:
50
+
51
+ [source,bash]
52
+ ----
53
+ # Read from stdin
54
+ cat input.txt | omnizip compress - output.lzma
55
+
56
+ # Write to stdout
57
+ omnizip compress input.txt - > output.lzma
58
+
59
+ # Full pipe
60
+ cat input.txt | omnizip compress - - | omnizip decompress - output.txt
61
+ ----
62
+
63
+ ==== Verbosity
64
+
65
+ Enable detailed output with `--verbose`:
66
+
67
+ [source,bash]
68
+ ----
69
+ omnizip compress input.txt output.lzma --verbose
70
+ ----
71
+
72
+ ==== Compression Levels
73
+
74
+ Most commands accept compression levels:
75
+
76
+ [source,bash]
77
+ ----
78
+ # Fast (1-3)
79
+ omnizip compress input.txt output.lzma --level 1
80
+
81
+ # Balanced (4-6)
82
+ omnizip compress input.txt output.lzma --level 5
83
+
84
+ # Maximum (7-9)
85
+ omnizip compress input.txt output.lzma --level 9
86
+ ----
87
+
88
+ === Command Help
89
+
90
+ Each command supports `--help`:
91
+
92
+ [source,bash]
93
+ ----
94
+ omnizip compress --help
95
+ omnizip archive create --help
96
+ omnizip profile list --help
97
+ ----
98
+
99
+ === Exit Codes
100
+
101
+ * `0` - Success
102
+ * `1` - Error occurred
103
+ * `2` - Invalid command or options
104
+
105
+ === Environment Variables
106
+
107
+ `OMNIZIP_LEVEL`:: Default compression level (1-9)
108
+ `OMNIZIP_ALGORITHM`:: Default compression algorithm
109
+ `OMNIZIP_THREADS`:: Number of threads for parallel operations
110
+
111
+ === Examples
112
+
113
+ ==== Quick Backup
114
+
115
+ [source,bash]
116
+ ----
117
+ # Create compressed backup
118
+ omnizip archive create backup.7z documents/ --level 7
119
+
120
+ # Verify
121
+ omnizip archive list backup.7z
122
+
123
+ # Extract to test
124
+ omnizip archive extract backup.7z /tmp/test/
125
+ ----
126
+
127
+ ==== Batch Processing
128
+
129
+ [source,bash]
130
+ ----
131
+ # Compress all log files
132
+ for log in *.log; do
133
+ omnizip compress "$log" "${log}.lzma" --level 5
134
+ done
135
+ ----
136
+
137
+ === Related Sections
138
+
139
+ * link:compress-command.html[compress command] - Compress files
140
+ * link:../api/overview.html[Ruby API] - Programmatic interface