class Gem::Package::TarReader - Documentation for Ruby 4.0
Description: class Gem::Package::TarReader: TarReader reads tar files and allows iteration over their items
Keywords: ruby,class,Gem::Package::TarReader

🔍

No recent searches

# class Gem::Package::TarReader

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

### Public Class Methods

new (io) { |reader| ... }
Source

    # 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

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

Calls superclass method `BasicObject::new`
new (io)
Source

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

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

### Public Instance Methods

close ()
Source

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

Close the tar file

each () { |entry| ... }
Source

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

Iterates over files in the tarball yielding each entry

Also aliased as: each_entry
each_entry ()
Alias for: each
rewind ()
Source

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

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

seek (name) { |entry| ... }
Source

    # File lib/rubygems/package/tar_reader.rb, line 90
    def seek(name) # :yields: entry
      found = find do |entry|
        entry.full_name == name
      end

      return unless found

      yield found
    ensure
      rewind
    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.