Support for the Ruby 2.4 series has ended. See here for reference.
![show/hide quicksearch [+]](../../images/find.png)
TarReader reads tar files and allows iteration over their items
Creates a new TarReader on io and yields it to the block, if given.
 
               # File rubygems/package/tar_reader.rb, line 22
def self.new(io)
  reader = super
  return reader unless block_given?
  begin
    yield reader
  ensure
    reader.close
  end
  nil
end
             
            Close the tar file
 
               # File rubygems/package/tar_reader.rb, line 48
def close
end
             
            Iterates over files in the tarball yielding each entry
 
               # File rubygems/package/tar_reader.rb, line 54
def each
  return enum_for __method__ unless block_given?
  until @io.eof? do
    header = Gem::Package::TarHeader.from @io
    return if header.empty?
    entry = Gem::Package::TarReader::Entry.new header, @io
    size = entry.header.size
    yield entry
    skip = (512 - (size % 512)) % 512
    pending = size - entry.bytes_read
    begin
      # avoid reading...
      @io.seek pending, IO::SEEK_CUR
      pending = 0
    rescue Errno::EINVAL, NameError
      while pending > 0 do
        bytes_read = @io.read([pending, 4096].min).size
        raise UnexpectedEOF if @io.eof?
        pending -= bytes_read
      end
    end
    @io.read skip # discard trailing zeros
    # make sure nobody can use #read, #getc or #rewind anymore
    entry.close
  end
end
             
            Seeks through the tar file until it finds the entry with name and yields it.  Rewinds the tar file to the beginning when the block terminates.
 
               # File rubygems/package/tar_reader.rb, line 108
def seek name # :yields: entry
  found = find do |entry|
    entry.full_name == name
  end
  return unless found
  return yield found
ensure
  rewind
end