Class: Gem::Package::TarReader
- Inherits:
 - 
      Object
      
        
- Object
 - Gem::Package::TarReader
 
 
- Includes:
 - Enumerable
 
- Defined in:
 - lib/rubygems/package/tar_reader.rb
 
Overview
TarReader reads tar files and allows iteration over their items
Defined Under Namespace
Classes: Entry
Class Method Summary collapse
- 
  
    
      .new(io)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Creates a new TarReader on
ioand yields it to the block, if given. 
Instance Method Summary collapse
- 
  
    
      #close  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Close the tar file.
 - 
  
    
      #each  ⇒ Object 
    
    
      (also: #each_entry)
    
  
  
  
  
  
  
  
  
  
    
Iterates over files in the tarball yielding each entry.
 - 
  
    
      #initialize(io)  ⇒ TarReader 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Creates a new tar file reader on
iowhich needs to respond to #pos, #eof?, #read, #getc and #pos=. - 
  
    
      #rewind  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
NOTE: Do not call #rewind during #each.
 - 
  
    
      #seek(name)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Seeks through the tar file until it finds the
entrywithnameand yields it. 
Constructor Details
#initialize(io) ⇒ TarReader
Creates a new tar file reader on io which needs to respond to #pos, #eof?, #read, #getc and #pos=
      35 36 37 38  | 
    
      # File 'lib/rubygems/package/tar_reader.rb', line 35 def initialize(io) @io = io @init_pos = io.pos end  | 
  
Class Method Details
.new(io) ⇒ Object
Creates a new TarReader on io and yields it to the block, if given.
      17 18 19 20 21 22 23 24 25 26 27 28 29  | 
    
      # File 'lib/rubygems/package/tar_reader.rb', line 17 def self.new(io) reader = super return reader unless block_given? begin yield reader ensure reader.close end nil end  | 
  
Instance Method Details
#close ⇒ Object
Close the tar file
      43 44  | 
    
      # File 'lib/rubygems/package/tar_reader.rb', line 43 def close end  | 
  
#each ⇒ Object Also known as: each_entry
Iterates over files in the tarball yielding each entry
      49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66  | 
    
      # File 'lib/rubygems/package/tar_reader.rb', line 49 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..match?(/ is not an octal string$/) raise Gem::Package::TarInvalidError, e. end return if header.empty? entry = Gem::Package::TarReader::Entry.new header, @io yield entry entry.close end end  | 
  
#rewind ⇒ Object
NOTE: Do not call #rewind during #each
      73 74 75 76 77 78 79  | 
    
      # File 'lib/rubygems/package/tar_reader.rb', line 73 def rewind if @init_pos == 0 @io.rewind else @io.pos = @init_pos end end  | 
  
#seek(name) ⇒ Object
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.
      86 87 88 89 90 91 92 93 94 95 96  | 
    
      # File 'lib/rubygems/package/tar_reader.rb', line 86 def seek(name) # :yields: entry found = find do |entry| entry.full_name == name end return unless found yield found ensure rewind end  |