Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
TarOutput is a wrapper to TarWriter that builds gem-format tar file.
Gem-format tar files contain the following files:
A gzipped tar file containing the files that compose the gem which will be extracted into the gem/ dir on installation.
A YAML format Gem::Specification.
A signature for the gem’s data.tar.gz.
A signature for the gem’s metadata.gz.
See ::open for usage details.
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
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
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
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
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
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.