summaryrefslogtreecommitdiff
path: root/lib/rubygems/builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/builder.rb')
-rw-r--r--lib/rubygems/builder.rb120
1 files changed, 61 insertions, 59 deletions
diff --git a/lib/rubygems/builder.rb b/lib/rubygems/builder.rb
index 1c18c38d48..3061b752ce 100644
--- a/lib/rubygems/builder.rb
+++ b/lib/rubygems/builder.rb
@@ -4,81 +4,83 @@
# See LICENSE.txt for permissions.
#++
-module Gem
+##
+# The Builder class processes RubyGem specification files
+# to produce a .gem file.
+class Gem::Builder
+
+ include Gem::UserInteraction
##
- # The Builder class processes RubyGem specification files
- # to produce a .gem file.
+ # Constructs a builder instance for the provided specification
#
- class Builder
-
- include UserInteraction
- ##
- # Constructs a builder instance for the provided specification
- #
- # spec:: [Gem::Specification] The specification instance
- #
- def initialize(spec)
- require "yaml"
- require "rubygems/package"
- require "rubygems/security"
-
- @spec = spec
- end
+ # spec:: [Gem::Specification] The specification instance
- ##
- # Builds the gem from the specification. Returns the name of the file
- # written.
- #
- def build
- @spec.mark_version
- @spec.validate
- @signer = sign
- write_package
- say success
- @spec.file_name
- end
+ def initialize(spec)
+ require "yaml"
+ require "rubygems/package"
+ require "rubygems/security"
+
+ @spec = spec
+ end
+
+ ##
+ # Builds the gem from the specification. Returns the name of the file
+ # written.
+
+ def build
+ @spec.mark_version
+ @spec.validate
+ @signer = sign
+ write_package
+ say success
+ @spec.file_name
+ end
- def success
- <<-EOM
+ def success
+ <<-EOM
Successfully built RubyGem
Name: #{@spec.name}
Version: #{@spec.version}
File: #{@spec.full_name+'.gem'}
EOM
- end
+ end
- private
-
- def sign
- # if the signing key was specified, then load the file, and swap
- # to the public key (TODO: we should probably just omit the
- # signing key in favor of the signing certificate, but that's for
- # the future, also the signature algorithm should be configurable)
- signer = nil
- if @spec.respond_to?(:signing_key) && @spec.signing_key
- signer = Gem::Security::Signer.new(@spec.signing_key, @spec.cert_chain)
- @spec.signing_key = nil
- @spec.cert_chain = signer.cert_chain.map { |cert| cert.to_s }
- end
- signer
+ private
+
+ ##
+ # If the signing key was specified, then load the file, and swap to the
+ # public key (TODO: we should probably just omit the signing key in favor of
+ # the signing certificate, but that's for the future, also the signature
+ # algorithm should be configurable)
+
+ def sign
+ signer = nil
+
+ if @spec.respond_to?(:signing_key) and @spec.signing_key then
+ signer = Gem::Security::Signer.new @spec.signing_key, @spec.cert_chain
+ @spec.signing_key = nil
+ @spec.cert_chain = signer.cert_chain.map { |cert| cert.to_s }
end
- def write_package
- open @spec.file_name, 'wb' do |gem_io|
- Gem::Package.open gem_io, 'w', @signer do |pkg|
- pkg.metadata = @spec.to_yaml
+ signer
+ end
+
+ def write_package
+ open @spec.file_name, 'wb' do |gem_io|
+ Gem::Package.open gem_io, 'w', @signer do |pkg|
+ pkg.metadata = @spec.to_yaml
- @spec.files.each do |file|
- next if File.directory? file
+ @spec.files.each do |file|
+ next if File.directory? file
+ next if file == @spec.file_name # Don't add gem onto itself
- stat = File.stat file
- mode = stat.mode & 0777
- size = stat.size
+ stat = File.stat file
+ mode = stat.mode & 0777
+ size = stat.size
- pkg.add_file_simple file, mode, size do |tar_io|
- tar_io.write open(file, "rb") { |f| f.read }
- end
+ pkg.add_file_simple file, mode, size do |tar_io|
+ tar_io.write open(file, "rb") { |f| f.read }
end
end
end