# class Gem::Package::TarReader

`TarReader` reads tar files and allows iteration over their items

### Public Class Methods

new(io) click to toggle source

Creates a new tar file reader on `io` which needs to respond to pos, eof?, read, getc and pos=

    # File lib/rubygems/package/tar_reader.rb, line 37
    def initialize(io)
      @io = io
      @init_pos = io.pos
    end

new(io) { |reader| ... } click to toggle source

Creates a new `TarReader` on `io` and yields it to the block, if given.

Calls superclass method `BasicObject::new`

    # File lib/rubygems/package/tar_reader.rb, line 19
    def self.new(io)
      reader = super

      return reader unless block_given?

      begin
        yield reader
      ensure
        reader.close
      end

      nil
    end

### Public Instance Methods

close() click to toggle source

Close the tar file

    # File lib/rubygems/package/tar_reader.rb, line 45
    def close
    end

each() { |entry| ... } click to toggle source

Iterates over files in the tarball yielding each entry

    # File lib/rubygems/package/tar_reader.rb, line 51
    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

Also aliased as: each_entry
each_entry()
Alias for: each
rewind() click to toggle source

NOTE: Do not call `rewind` during `each`

    # File lib/rubygems/package/tar_reader.rb, line 75
    def rewind
      if @init_pos == 0
        @io.rewind
      else
        @io.pos = @init_pos
      end
    end

seek(name) { |entry| ... } click to toggle source

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 lib/rubygems/package/tar_reader.rb, line 88
    def seek(name) # :yields: entry
      found = find do |entry|
        entry.full_name == name
      end

      return unless found

      yield found
    ensure
      rewind
    end