Class: Datastar::Compressor::Gzip::CompressedSocket
- Inherits:
-
Object
- Object
- Datastar::Compressor::Gzip::CompressedSocket
- 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
- #<<(data) ⇒ Object
- #close ⇒ Object
-
#initialize(socket, options = {}) ⇒ CompressedSocket
constructor
A new instance of CompressedSocket.
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, = {}) level = .fetch(:level, Zlib::DEFAULT_COMPRESSION) mem_level = .fetch(:mem_level, Zlib::DEF_MEM_LEVEL) strategy = .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 |
#close ⇒ Object
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 |