Class: Datastar::Compressor::Gzip::CompressedSocket

Inherits:
Object
  • Object
show all
Defined in:
lib/datastar/compressor/gzip.rb

Overview

Gzip compressed socket using Ruby’s built-in zlib. Options:

:level     - Compression level (0-9, default: Zlib::DEFAULT_COMPRESSION).
            0 = no compression, 1 = best speed, 9 = best compression.
            Zlib::BEST_SPEED (1) and Zlib::BEST_COMPRESSION (9) also work.
:mem_level - Memory usage level (1-9, default: 8). Higher uses more memory for better compression.
:strategy  - Compression strategy (default: Zlib::DEFAULT_STRATEGY).
            Zlib::FILTERED, Zlib::HUFFMAN_ONLY, Zlib::RLE, Zlib::FIXED are also available.

Instance Method Summary collapse

Constructor Details

#initialize(socket, options = {}) ⇒ CompressedSocket

Returns a new instance of CompressedSocket.



35
36
37
38
39
40
41
42
# File 'lib/datastar/compressor/gzip.rb', line 35

def initialize(socket, options = {})
  level = options.fetch(:level, Zlib::DEFAULT_COMPRESSION)
  mem_level = options.fetch(:mem_level, Zlib::DEF_MEM_LEVEL)
  strategy = options.fetch(:strategy, Zlib::DEFAULT_STRATEGY)
  # Use raw deflate with gzip wrapping (window_bits 31 = 15 + 16)
  @socket = socket
  @deflate = Zlib::Deflate.new(level, 31, mem_level, strategy)
end

Instance Method Details

#<<(data) ⇒ Object



44
45
46
47
48
# File 'lib/datastar/compressor/gzip.rb', line 44

def <<(data)
  compressed = @deflate.deflate(data, Zlib::SYNC_FLUSH)
  @socket << compressed if compressed && !compressed.empty?
  self
end

#closeObject



50
51
52
53
54
55
56
# File 'lib/datastar/compressor/gzip.rb', line 50

def close
  final = @deflate.finish
  @socket << final if final && !final.empty?
  @socket.close
ensure
  @deflate.close
end