Class: Gem::Package::TarReader::Entry
| Relationships & Source Files | |
| Inherits: | Object | 
| Defined in: | lib/rubygems/package/tar_reader/entry.rb | 
Overview
Class for reading entries out of a tar file
Class Method Summary
- 
    
      .new(header, io)  ⇒ Entry 
    
    constructor
    Creates a new tar entry for #header that will be read from io
Instance Attribute Summary
- 
    
      #closed?  ⇒ Boolean 
    
    readonly
    Is the tar entry closed? 
- 
    
      #directory?  ⇒ Boolean 
    
    readonly
    Is this tar entry a directory? 
- 
    
      #eof?  ⇒ Boolean 
    
    readonly
    Are we at the end of the tar entry? 
- 
    
      #file?  ⇒ Boolean 
    
    readonly
    Is this tar entry a file? 
- 
    
      #header  
    
    readonly
    Header for this tar entry. 
- 
    
      #symlink?  ⇒ Boolean 
    
    readonly
    Is this tar entry a symlink? 
Instance Method Summary
- 
    
      #bytes_read  
    
    Number of bytes read out of the tar entry. 
- 
    
      #close  
    
    Closes the tar entry. 
- 
    
      #full_name  
    
    Full name of the tar entry. 
- 
    
      #getc  
    
    Read one byte from the tar entry. 
- 
    
      #length  
    
    Alias for #size. 
- 
    
      #pos  
    
    The position in the tar entry. 
- 
    
      #read(len = nil)  
    
    Reads lenbytes from the tar file entry, or the rest of the entry if nil.
- #readpartial(maxlen = nil, outbuf = "".b)
- 
    
      #rewind  
    
    Rewinds to the beginning of the tar file entry. 
- #size (also: #length)
- #check_closed Internal use only
Constructor Details
    .new(header, io)  ⇒ Entry 
  
Creates a new tar entry for #header that will be read from io
# File 'lib/rubygems/package/tar_reader/entry.rb', line 21
def initialize(header, io) @closed = false @header = header @io = io @orig_pos = @io.pos @read = 0 end
Instance Attribute Details
    #closed?  ⇒ Boolean  (readonly)
  
Is the tar entry closed?
# File 'lib/rubygems/package/tar_reader/entry.rb', line 50
def closed? @closed end
    #directory?  ⇒ Boolean  (readonly)
  
Is this tar entry a directory?
# File 'lib/rubygems/package/tar_reader/entry.rb', line 95
def directory? @header.typeflag == "5" end
    #eof?  ⇒ Boolean  (readonly)
  
Are we at the end of the tar entry?
# File 'lib/rubygems/package/tar_reader/entry.rb', line 57
def eof? check_closed @read >= @header.size end
    #file?  ⇒ Boolean  (readonly)
  
Is this tar entry a file?
# File 'lib/rubygems/package/tar_reader/entry.rb', line 102
def file? @header.typeflag == "0" end
#header (readonly)
Header for this tar entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 16
attr_reader :header
    #symlink?  ⇒ Boolean  (readonly)
  
Is this tar entry a symlink?
# File 'lib/rubygems/package/tar_reader/entry.rb', line 109
def symlink? @header.typeflag == "2" end
Instance Method Details
#bytes_read
Number of bytes read out of the tar entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 36
def bytes_read @read end
#check_closed
# File 'lib/rubygems/package/tar_reader/entry.rb', line 29
def check_closed # :nodoc: raise IOError, "closed #{self.class}" if closed? end
#close
Closes the tar entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 43
def close @closed = true end
#full_name
Full name of the tar entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 66
def full_name if @header.prefix != "" File.join @header.prefix, @header.name else @header.name end rescue ArgumentError => e raise unless e. == 'string contains null byte' raise Gem::Package::TarInvalidError, 'tar is corrupt, name contains null byte' end
#getc
Read one byte from the tar entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 81
def getc check_closed return nil if @read >= @header.size ret = @io.getc @read += 1 if ret ret end
#length
Alias for #size.
# File 'lib/rubygems/package/tar_reader/entry.rb', line 126
alias length size
#pos
The position in the tar entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 116
def pos check_closed bytes_read end
#read(len = nil)
Reads len bytes from the tar file entry, or the rest of the entry if nil
# File 'lib/rubygems/package/tar_reader/entry.rb', line 132
def read(len = nil) check_closed return nil if @read >= @header.size len ||= @header.size - @read max_read = [len, @header.size - @read].min ret = @io.read max_read @read += ret.size ret end
#readpartial(maxlen = nil, outbuf = "".b)
# File 'lib/rubygems/package/tar_reader/entry.rb', line 146
def readpartial(maxlen = nil, outbuf = "".b) check_closed raise EOFError if @read >= @header.size maxlen ||= @header.size - @read max_read = [maxlen, @header.size - @read].min @io.readpartial(max_read, outbuf) @read += outbuf.size outbuf end
#rewind
Rewinds to the beginning of the tar file entry
# File 'lib/rubygems/package/tar_reader/entry.rb', line 163
def rewind check_closed @io.pos = @orig_pos @read = 0 end
#size Also known as: #length
[ GitHub ]# File 'lib/rubygems/package/tar_reader/entry.rb', line 122
def size @header.size end