class Gem::Commands::BuildCommand - rubygems: Ruby Standard Library Documentation

# class Gem::Commands::BuildCommand

### Public Class Methods

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

    # File rubygems/commands/build_command.rb, line 12
    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
      deprecate_option "-C",
                       version: "4.0",
                       extra_msg: "-C is a global flag now. Use `gem -C PATH build GEMSPEC_FILE [options]` instead"
    end

### Public Instance Methods

execute() click to toggle source

    # File rubygems/commands/build_command.rb, line 69
    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 rubygems/commands/build_command.rb, line 80
    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 rubygems/commands/build_command.rb, line 91
    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 rubygems/commands/build_command.rb, line 116
    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

gem_name() click to toggle source

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

resolve_gem_name() click to toggle source

    # File rubygems/commands/build_command.rb, line 106
    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