class Gem::Package::TarReader
def self.new(io)
def self.new(io) reader = super return reader unless block_given? begin yield reader ensure reader.close end nil end
def close
def close end
def each
def each return enum_for __method__ unless block_given? until @io.eof? do begin header = Gem::Package::TarHeader.from @io rescue ArgumentError => e # Specialize only exceptions from Gem::Package::TarHeader.strict_oct raise e unless e.message.match?(/ is not an octal string$/) raise Gem::Package::TarInvalidError, e.message end return if header.empty? entry = Gem::Package::TarReader::Entry.new header, @io yield entry entry.close end end
def initialize(io)
def initialize(io) @io = io @init_pos = io.pos end
def rewind
def rewind if @init_pos == 0 @io.rewind else @io.pos = @init_pos end end
def seek(name) # :yields: entry
def seek(name) # :yields: entry found = find do |entry| entry.full_name == name end return unless found yield found ensure rewind end