class Zip::DecryptedIo
:nodoc:all
def buffer
def buffer @buffer ||= +'' end
def eof
def eof buffer.empty? && input_finished? end
def initialize(io, decrypter)
def initialize(io, decrypter) @io = io @decrypter = decrypter end
def input_finished?
def input_finished? @io.eof end
def produce_input
def produce_input @decrypter.decrypt(@io.read(CHUNK_SIZE)) end
def read(length = nil, outbuf = +'')
def read(length = nil, outbuf = +'') return (length.nil? || length.zero? ? '' : nil) if eof while length.nil? || (buffer.bytesize < length) break if input_finished? buffer << produce_input end outbuf.replace(buffer.slice!(0...(length || output_buffer.bytesize))) end