Class Gem::Commands::InstallCommand
In: lib/rubygems/commands/install_command.rb
Parent: Gem::Command

Methods

execute   new  

Included Modules

Gem::VersionOption Gem::LocalRemoteOptions Gem::InstallUpdateOptions

Public Class methods

[Source]

    # File lib/rubygems/commands/install_command.rb, line 15
15:   def initialize
16:     defaults = Gem::DependencyInstaller::DEFAULT_OPTIONS.merge({
17:       :generate_rdoc => true,
18:       :generate_ri   => true,
19:       :format_executable => false,
20:       :test => false,
21:       :version => Gem::Requirement.default,
22:     })
23: 
24:     super 'install', 'Install a gem into the local repository', defaults
25: 
26:     add_install_update_options
27:     add_local_remote_options
28:     add_platform_option
29:     add_version_option
30:   end

Public Instance methods

[Source]

     # File lib/rubygems/commands/install_command.rb, line 45
 45:   def execute
 46:     if options[:include_dependencies] then
 47:       alert "`gem install -y` is now default and will be removed"
 48:       alert "use --ignore-dependencies to install only the gems you list"
 49:     end
 50: 
 51:     installed_gems = []
 52: 
 53:     ENV.delete 'GEM_PATH' if options[:install_dir].nil? and RUBY_VERSION > '1.9'
 54: 
 55:     install_options = {
 56:       :env_shebang => options[:env_shebang],
 57:       :domain => options[:domain],
 58:       :force => options[:force],
 59:       :format_executable => options[:format_executable],
 60:       :ignore_dependencies => options[:ignore_dependencies],
 61:       :install_dir => options[:install_dir],
 62:       :security_policy => options[:security_policy],
 63:       :wrappers => options[:wrappers],
 64:       :bin_dir => options[:bin_dir],
 65:       :development => options[:development],
 66:     }
 67: 
 68:     exit_code = 0
 69: 
 70:     get_all_gem_names.each do |gem_name|
 71:       begin
 72:         inst = Gem::DependencyInstaller.new install_options
 73:         inst.install gem_name, options[:version]
 74: 
 75:         inst.installed_gems.each do |spec|
 76:           say "Successfully installed #{spec.full_name}"
 77:         end
 78: 
 79:         installed_gems.push(*inst.installed_gems)
 80:       rescue Gem::InstallError => e
 81:         alert_error "Error installing #{gem_name}:\n\t#{e.message}"
 82:         exit_code |= 1
 83:       rescue Gem::GemNotFoundException => e
 84:         alert_error e.message
 85:         exit_code |= 2
 86: #      rescue => e
 87: #        # TODO: Fix this handle to allow the error to propagate to
 88: #        # the top level handler.  Examine the other errors as
 89: #        # well.  This implementation here looks suspicious to me --
 90: #        # JimWeirich (4/Jan/05)
 91: #        alert_error "Error installing gem #{gem_name}: #{e.message}"
 92: #        return
 93:       end
 94:     end
 95: 
 96:     unless installed_gems.empty? then
 97:       gems = installed_gems.length == 1 ? 'gem' : 'gems'
 98:       say "#{installed_gems.length} #{gems} installed"
 99:     end
100: 
101:     # NOTE: *All* of the RI documents must be generated first.
102:     # For some reason, RI docs cannot be generated after any RDoc
103:     # documents are generated.
104: 
105:     if options[:generate_ri] then
106:       installed_gems.each do |gem|
107:         Gem::DocManager.new(gem, options[:rdoc_args]).generate_ri
108:       end
109:     end
110: 
111:     if options[:generate_rdoc] then
112:       installed_gems.each do |gem|
113:         Gem::DocManager.new(gem, options[:rdoc_args]).generate_rdoc
114:       end
115:     end
116: 
117:     if options[:test] then
118:       installed_gems.each do |spec|
119:         gem_spec = Gem::SourceIndex.from_installed_gems.search(spec.name, spec.version.version).first
120:         result = Gem::Validator.new.unit_test(gem_spec)
121:         if result and not result.passed?
122:           unless ask_yes_no("...keep Gem?", true) then
123:             Gem::Uninstaller.new(spec.name, :version => spec.version.version).uninstall
124:           end
125:         end
126:       end
127:     end
128: 
129:     raise Gem::SystemExitException, exit_code
130:   end

[Validate]