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

In Files

  • rubygems/package/tar_output.rb

Class/Module Index [+]

Quicksearch

Gem::Package::TarOutput

TarOutput is a wrapper to TarWriter that builds gem-format tar file.

Gem-format tar files contain the following files:

data.tar.gz

A gzipped tar file containing the files that compose the gem which will be extracted into the gem/ dir on installation.

metadata.gz

A YAML format Gem::Specification.

data.tar.gz.sig

A signature for the gem’s data.tar.gz.

metadata.gz.sig

A signature for the gem’s metadata.gz.

See ::open for usage details.

Public Class Methods

new(io, signer) click to toggle source

Creates a new TarOutput that will write a gem-format tar file to io. If signer is given, the data.tar.gz and metadata.gz will be signed and the signatures will be added to the tar file.

 
               # File rubygems/package/tar_output.rb, line 43
def initialize(io, signer)
  @io = io
  @signer = signer

  @tar_writer = Gem::Package::TarWriter.new @io

  @metadata = nil

  @data_signature = nil
  @meta_signature = nil
end
            
open(io, signer = nil) click to toggle source

Creates a new TarOutput which will yield a TarWriter object for the data.tar.gz portion of a gem-format tar file.

See initialize for details on io and signer.

See add_gem_contents for details on adding metadata to the tar file.

 
               # File rubygems/package/tar_output.rb, line 28
def self.open(io, signer = nil, &block) # :yield: data_tar_writer
  tar_outputter = new io, signer
  tar_outputter.add_gem_contents(&block)
  tar_outputter.add_metadata
  tar_outputter.add_signatures

ensure
  tar_outputter.close
end
            

Public Instance Methods

add_gem_contents() click to toggle source

Yields a TarWriter for the data.tar.gz inside a gem-format tar file. The yielded TarWriter has been extended with a metadata= method for attaching a YAML format Gem::Specification which will be written by add_metadata.

 
               # File rubygems/package/tar_output.rb, line 61
def add_gem_contents
  @tar_writer.add_file "data.tar.gz", 0644 do |inner|
    sio = @signer ? StringIO.new : nil
    Zlib::GzipWriter.wrap(sio || inner) do |os|

      Gem::Package::TarWriter.new os do |data_tar_writer|
        # :stopdoc:
        def data_tar_writer.metadata() @metadata end
        def data_tar_writer.metadata=(metadata) @metadata = metadata end
        # :startdoc:

        yield data_tar_writer

        @metadata = data_tar_writer.metadata
      end
    end

    # if we have a signing key, then sign the data
    # digest and return the signature
    if @signer then
      require 'rubygems/security'
      digest = Gem::Security::OPT[:dgst_algo].digest sio.string
      @data_signature = @signer.sign digest
      inner.write sio.string
    end
  end

  self
end
            
add_metadata() click to toggle source

Adds metadata.gz to the gem-format tar file which was saved from a previous add_gem_contents call.

 
               # File rubygems/package/tar_output.rb, line 95
def add_metadata
  return if @metadata.nil?

  @tar_writer.add_file "metadata.gz", 0644 do |io|
    begin
      sio = @signer ? StringIO.new : nil
      gzos = Zlib::GzipWriter.new(sio || io)
      gzos.write @metadata
    ensure
      gzos.flush
      gzos.finish

      # if we have a signing key, then sign the metadata digest and return
      # the signature
      if @signer then
        require 'rubygems/security'
        digest = Gem::Security::OPT[:dgst_algo].digest sio.string
        @meta_signature = @signer.sign digest
        io.write sio.string
      end
    end
  end
end
            
add_signatures() click to toggle source

Adds data.tar.gz.sig and metadata.gz.sig to the gem-format tar files if a Gem::Security::Signer was sent to initialize.

 
               # File rubygems/package/tar_output.rb, line 123
def add_signatures
  if @data_signature then
    @tar_writer.add_file 'data.tar.gz.sig', 0644 do |io|
      io.write @data_signature
    end
  end

  if @meta_signature then
    @tar_writer.add_file 'metadata.gz.sig', 0644 do |io|
      io.write @meta_signature
    end
  end
end
            
close() click to toggle source

Closes the TarOutput.

 
               # File rubygems/package/tar_output.rb, line 140
def close
  @tar_writer.close
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.