Class
TarReader
reads tar files and allows iteration over their items
Class Methods
lib/rubygems/package/tar_reader.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/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.
Instance Methods
#
lib/rubygems/package/tar_reader.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/lib/rubygems/package/tar_reader.rb, line 45
def close
end
Close the tar file
lib/rubygems/package/tar_reader.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/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
Iterates over files in the tarball yielding each entry
#
lib/rubygems/package/tar_reader.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/lib/rubygems/package/tar_reader.rb, line 75
def rewind
if @init_pos == 0
@io.rewind
else
@io.pos = @init_pos
end
end
lib/rubygems/package/tar_reader.rb
View on GitHub
# File tmp/rubies/ruby-3.4.0-preview1/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
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.