Parent

Included Modules

Class Index [+]

Quicksearch

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 TarReader on io and yields it to the block, if given.

    # File lib/rubygems/package/tar_reader.rb, line 22
22:   def self.new(io)
23:     reader = super
24: 
25:     return reader unless block_given?
26: 
27:     begin
28:       yield reader
29:     ensure
30:       reader.close
31:     end
32: 
33:     nil
34:   end
new(io) click to toggle source

Creates a new tar file reader on io which needs to respond to #, #, #, # and #

    # File lib/rubygems/package/tar_reader.rb, line 40
40:   def initialize(io)
41:     @io = io
42:     @init_pos = io.pos
43:   end

Public Instance Methods

close() click to toggle source

Close the tar file

    # File lib/rubygems/package/tar_reader.rb, line 48
48:   def close
49:   end
each() click to toggle source

Iterates over files in the tarball yielding each entry

    # File lib/rubygems/package/tar_reader.rb, line 54
54:   def each
55:     loop do
56:       return if @io.eof?
57: 
58:       header = Gem::Package::TarHeader.from @io
59:       return if header.empty?
60: 
61:       entry = Gem::Package::TarReader::Entry.new header, @io
62:       size = entry.header.size
63: 
64:       yield entry
65: 
66:       skip = (512 - (size % 512)) % 512
67:       pending = size - entry.bytes_read
68: 
69:       begin
70:         # avoid reading...
71:         @io.seek pending, IO::SEEK_CUR
72:         pending = 0
73:       rescue Errno::EINVAL, NameError
74:         while pending > 0 do
75:           bytes_read = @io.read([pending, 4096].min).size
76:           raise UnexpectedEOF if @io.eof?
77:           pending -= bytes_read
78:         end
79:       end
80: 
81:       @io.read skip # discard trailing zeros
82: 
83:       # make sure nobody can use #read, #getc or #rewind anymore
84:       entry.close
85:     end
86:   end
Also aliased as: each_entry
each_entry() click to toggle source
Alias for: each
rewind() click to toggle source

NOTE: Do not call # during #

     # File lib/rubygems/package/tar_reader.rb, line 93
 93:   def rewind
 94:     if @init_pos == 0 then
 95:       raise Gem::Package::NonSeekableIO unless @io.respond_to? :rewind
 96:       @io.rewind
 97:     else
 98:       raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
 99:       @io.pos = @init_pos
100:     end
101:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.