module Fluent::Plugin::Compressable
Public Instance Methods
compress(data, **kwargs)
click to toggle source
# File lib/fluent/plugin/compressable.rb, line 23 def compress(data, **kwargs) output_io = kwargs[:output_io] io = output_io || StringIO.new Zlib::GzipWriter.wrap(io) do |gz| gz.write data end output_io || io.string end
decompress(compressed_data = nil, output_io: nil, input_io: nil)
click to toggle source
compressed_data is String like `compress(data1) + compress(data2) + … + compress(dataN)` www.ruby-forum.com/topic/971591#979503
# File lib/fluent/plugin/compressable.rb, line 35 def decompress(compressed_data = nil, output_io: nil, input_io: nil) case when input_io && output_io io_decompress(input_io, output_io) when input_io output_io = StringIO.new io = io_decompress(input_io, output_io) io.string when compressed_data.nil? || compressed_data.empty? # check compressed_data(String) is 0 length compressed_data when output_io # execute after checking compressed_data is empty or not io = StringIO.new(compressed_data) io_decompress(io, output_io) else string_decompress(compressed_data) end end
Private Instance Methods
io_decompress(input, output)
click to toggle source
# File lib/fluent/plugin/compressable.rb, line 77 def io_decompress(input, output) loop do gz = Zlib::GzipReader.new(input) v = gz.read output.write(v) unused = gz.unused gz.finish unless unused.nil? adjust = unused.length input.pos -= adjust end break if input.eof? end output end
string_decompress(compressed_data)
click to toggle source
# File lib/fluent/plugin/compressable.rb, line 57 def string_decompress(compressed_data) io = StringIO.new(compressed_data) out = '' loop do gz = Zlib::GzipReader.new(io) out << gz.read unused = gz.unused gz.finish unless unused.nil? adjust = unused.length io.pos -= adjust end break if io.eof? end out end