Class: Omnizip::Formats::Rar3::Compressor

Inherits:
Omnizip::Formats::Rar::RarFormatBase show all
Defined in:
lib/omnizip/formats/rar3/compressor.rb

Overview

RAR v3 compressor

Compresses data using RAR v3 compression algorithms. This implementation uses DEFLATE as a compatible fallback for demonstration purposes. Full RAR compression requires proprietary algorithms.

Examples:

Compressing data

compressor = Rar3::Compressor.new
compressed = compressor.compress("Hello, World!", method: :normal)

Instance Attribute Summary

Attributes inherited from Omnizip::Formats::Rar::RarFormatBase

#spec, #version

Instance Method Summary collapse

Methods inherited from Omnizip::Formats::Rar::RarFormatBase

#block_type_code, #block_type_name, #compression_method_code, #compression_method_name, #decompress, #dictionary_size_code, #encryption_algorithm, #read_archive, #supports_feature?, #verify_magic_bytes, #write_archive

Constructor Details

#initializeCompressor

Initialize a RAR v3 compressor



20
21
22
# File 'lib/omnizip/formats/rar3/compressor.rb', line 20

def initialize
  super("rar3")
end

Instance Method Details

#compress(data, method: :normal, **_options) ⇒ String

Compress data using RAR v3 methods

Parameters:

  • data (String)

    The data to compress

  • method (Symbol) (defaults to: :normal)

    The compression method

  • options (Hash)

    Compression options

Returns:

  • (String)

    The compressed data



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/omnizip/formats/rar3/compressor.rb', line 30

def compress(data, method: :normal, **_options)
  case method
  when :store
    compress_store(data)
  when :fastest
    compress_deflate(data, level: Zlib::BEST_SPEED)
  when :fast
    compress_deflate(data, level: 3)
  when :normal
    compress_deflate(data, level: Zlib::DEFAULT_COMPRESSION)
  when :good
    compress_deflate(data, level: 7)
  when :best
    compress_deflate(data, level: Zlib::BEST_COMPRESSION)
  else
    raise FormatError,
          "Unsupported compression method: #{method}"
  end
end