Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rubygems/package/tar_writer.rb

Class/Module Index [+]

Quicksearch

Gem::Package::TarWriter

Allows writing of tar files

Public Class Methods

new(io) click to toggle source

Creates a new TarWriter, yielding it if a block is given

 
               # File rubygems/package/tar_writer.rb, line 76
def self.new(io)
  writer = super

  return writer unless block_given?

  begin
    yield writer
  ensure
    writer.close
  end

  nil
end
            
new(io) click to toggle source

Creates a new TarWriter that will write to io

 
               # File rubygems/package/tar_writer.rb, line 93
def initialize(io)
  @io = io
  @closed = false
end
            

Public Instance Methods

add_file(name, mode) click to toggle source

Adds file name with permissions mode, and yields an IO for writing the file to

 
               # File rubygems/package/tar_writer.rb, line 102
def add_file(name, mode) # :yields: io
  check_closed

  raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=

  name, prefix = split_name name

  init_pos = @io.pos
  @io.write "\0" * 512 # placeholder for the header

  yield RestrictedStream.new(@io) if block_given?

  size = @io.pos - init_pos - 512

  remainder = (512 - (size % 512)) % 512
  @io.write "\0" * remainder

  final_pos = @io.pos
  @io.pos = init_pos

  header = Gem::Package::TarHeader.new :name => name, :mode => mode,
                                       :size => size, :prefix => prefix

  @io.write header
  @io.pos = final_pos

  self
end
            
add_file_simple(name, mode, size) click to toggle source

Add file name with permissions mode size bytes long. Yields an IO to write the file to.

 
               # File rubygems/package/tar_writer.rb, line 135
def add_file_simple(name, mode, size) # :yields: io
  check_closed

  name, prefix = split_name name

  header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
                                       :size => size, :prefix => prefix).to_s

  @io.write header
  os = BoundedStream.new @io, size

  yield os if block_given?

  min_padding = size - os.written
  @io.write("\0" * min_padding)

  remainder = (512 - (size % 512)) % 512
  @io.write("\0" * remainder)

  self
end
            
check_closed() click to toggle source

Raises IOError if the TarWriter is closed

 
               # File rubygems/package/tar_writer.rb, line 160
def check_closed
  raise IOError, "closed #{self.class}" if closed?
end
            
close() click to toggle source

Closes the TarWriter

 
               # File rubygems/package/tar_writer.rb, line 167
def close
  check_closed

  @io.write "\0" * 1024
  flush

  @closed = true
end
            
closed?() click to toggle source

Is the TarWriter closed?

 
               # File rubygems/package/tar_writer.rb, line 179
def closed?
  @closed
end
            
flush() click to toggle source

Flushes the TarWriter’s IO

 
               # File rubygems/package/tar_writer.rb, line 186
def flush
  check_closed

  @io.flush if @io.respond_to? :flush
end
            
mkdir(name, mode) click to toggle source

Creates a new directory in the tar file name with mode

 
               # File rubygems/package/tar_writer.rb, line 195
def mkdir(name, mode)
  check_closed

  name, prefix = split_name(name)

  header = Gem::Package::TarHeader.new :name => name, :mode => mode,
                                       :typeflag => "5", :size => 0,
                                       :prefix => prefix

  @io.write header

  self
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.