# class Gem::Commands::BuildCommand

### Public Class Methods

new() click to toggle source
Calls superclass method `Gem::Command::new`

    # File lib/rubygems/commands/build_command.rb, line 7
    def initialize
      super 'build', 'Build a gem from a gemspec'

      add_option '--force', 'skip validation of the spec' do |value, options|
        options[:force] = true
      end

      add_option '--strict', 'consider warnings as errors when validating the spec' do |value, options|
        options[:strict] = true
      end

      add_option '-o', '--output FILE', 'output gem with the given filename' do |value, options|
        options[:output] = value
      end

      add_option '-C PATH', '', 'Run as if gem build was started in <PATH> instead of the current working directory.' do |value, options|
        options[:build_path] = value
      end
    end

### Public Instance Methods

execute() click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 59
    def execute
      gem_name = get_one_optional_argument || find_gemspec
      build_gem(gem_name)
    end

### Private Instance Methods

build_gem(gem_name) click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 77
    def build_gem(gem_name)
      gemspec = File.exist?(gem_name) ? gem_name : "#{gem_name}.gemspec"

      if File.exist?(gemspec)
        spec = Gem::Specification.load(gemspec)

        if options[:build_path]
          Dir.chdir(File.dirname(gemspec)) do
            spec = Gem::Specification.load(File.basename(gemspec))
            build_package(spec)
          end
        else
          build_package(spec)
        end

      else
        alert_error "Gemspec file not found: #{gemspec}"
        terminate_interaction(1)
      end
    end

build_package(spec) click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 98
    def build_package(spec)
      if spec
        Gem::Package.build(
          spec,
          options[:force],
          options[:strict],
          options[:output]
        )
      else
        alert_error "Error loading gemspec. Aborting."
        terminate_interaction 1
      end
    end

find_gemspec() click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 66
    def find_gemspec
      gemspecs = Dir.glob("*.gemspec").sort

      if gemspecs.size > 1
        alert_error "Multiple gemspecs found: #{gemspecs}, please specify one"
        terminate_interaction(1)
      end

      gemspecs.first
    end