# 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 9
    def initialize
      super 'build', 'Build a gem from a gemspec'

      add_platform_option

      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 63
    def execute
      if build_path = options[:build_path]
        Dir.chdir(build_path) { build_gem }
        return
      end

      build_gem
    end

### Private Instance Methods

build_gem() click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 85
    def build_gem
      gemspec = resolve_gem_name

      if gemspec
        build_package(gemspec)
      else
        alert_error error_message
        terminate_interaction(1)
      end
    end

build_package(gemspec) click to toggle source

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

error_message() click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 121
    def error_message
      if gem_name
        "Couldn't find a gemspec file matching '#{gem_name}' in #{Dir.pwd}"
      else
        "Couldn't find a gemspec file in #{Dir.pwd}"
      end
    end

find_gemspec(glob = "*.gemspec") click to toggle source

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

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

      gemspecs.first
    end

gem_name() click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 129
    def gem_name
      get_one_optional_argument
    end

resolve_gem_name() click to toggle source

    # File lib/rubygems/commands/build_command.rb, line 111
    def resolve_gem_name
      return find_gemspec unless gem_name

      if File.exist?(gem_name)
        gem_name
      else
        find_gemspec("#{gem_name}.gemspec") || find_gemspec(gem_name)
      end
    end