123456789_123456789_123456789_123456789_123456789_

Class: Bundler::CLI::Install

Relationships & Source Files
Inherits: Object
Defined in: lib/bundler/cli/install.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(options) ⇒ Install

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 6

def initialize(options)
  @options = options
end

Instance Attribute Details

#options (readonly)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 5

attr_reader :options

Instance Method Details

#check_trust_policy (private)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 103

def check_trust_policy
  trust_policy = options["trust-policy"]
  unless Bundler.rubygems.security_policies.keys.unshift(nil).include?(trust_policy)
    raise InvalidOption, "RubyGems doesn't know about trust policy '#{trust_policy}'. " \
      "The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
  end
  Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
end

#dependencies_count_for(definition) (private)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 93

def dependencies_count_for(definition)
  count = definition.dependencies.count
  "#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
end

#gems_installed_for(definition) (private)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 98

def gems_installed_for(definition)
  count = definition.specs.count
  "#{count} #{count == 1 ? "gem" : "gems"} now installed"
end

#normalize_settings (private)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 112

def normalize_settings
  if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
    Bundler.settings.set_command_option :path, "bundle"
  end

  Bundler.settings.set_command_option_if_given :shebang, options["shebang"]

  Bundler.settings.set_command_option_if_given :jobs, options["jobs"]

  Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]

  Bundler.settings.set_command_option_if_given :no_install, options["no-install"]

  Bundler.settings.set_command_option_if_given :clean, options["clean"]

  options[:force] = options[:redownload] if options[:redownload]
end

#run

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 10

def run
  Bundler.ui.level = "warn" if options[:quiet]

  warn_if_root

  if options[:local]
    Bundler.self_manager.restart_with_locked_bundler_if_needed
  else
    Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed
  end

  Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Gem.freebsd_platform?

  if target_rbconfig_path = options[:"target-rbconfig"]
    Bundler.rubygems.set_target_rbconfig(target_rbconfig_path)
  end

  check_trust_policy

  if Bundler.frozen_bundle? && !Bundler.default_lockfile.exist?
    flag = "deployment setting" if Bundler.settings[:deployment]
    flag = "frozen setting" if Bundler.settings[:frozen]
    raise ProductionError, "The #{flag} requires a lockfile. Please make " \
                           "sure you have checked your #{SharedHelpers.relative_lockfile_path} into version control " \
                           "before deploying."
  end

  normalize_settings

  Bundler::Fetcher.disable_endpoint = options["full-index"]

  if options["binstubs"]
    Bundler::SharedHelpers.major_deprecation 2,
      "The --binstubs option will be removed in favor of `bundle binstubs --all`",
      removed_message: "The --binstubs option have been removed in favor of `bundle binstubs --all`"
  end

  Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?

  # For install we want to enable strict validation
  # (rather than some optimizations we perform at app runtime).
  definition = Bundler.definition(strict: true)
  definition.validate_runtime!

  installer = Installer.install(Bundler.root, definition, options)

  Bundler.settings.temporary(cache_all_platforms: options[:local] ? false : Bundler.settings[:cache_all_platforms]) do
    Bundler.load.cache(nil, options[:local]) if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
  end

  Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
  Bundler::CLI::Common.output_without_groups_message(:install)

  if Bundler.use_system_gems?
    Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
  else
    relative_path = Bundler.configured_bundle_path.base_path_relative_to_pwd
    Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
  end

  Bundler::CLI::Common.output_post_install_messages installer.post_install_messages

  warn_ambiguous_gems

  if CLI::Common.clean_after_install?
    require_relative "clean"
    Bundler::CLI::Clean.new(options).run
  end

  Bundler::CLI::Common.
rescue Gem::InvalidSpecificationException
  Bundler.ui.warn "You have one or more invalid gemspecs that need to be fixed."
  raise
end

#warn_ambiguous_gems (private)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 130

def warn_ambiguous_gems
  # TODO: remove this when we drop Bundler 1.x support
  Installer.ambiguous_gems.to_a.each do |name, installed_from_uri, *also_found_in_uris|
    Bundler.ui.warn "Warning: the gem '#{name}' was found in multiple sources."
    Bundler.ui.warn "Installed from: #{installed_from_uri}"
    Bundler.ui.warn "Also found in:"
    also_found_in_uris.each {|uri| Bundler.ui.warn "  * #{uri}" }
    Bundler.ui.warn "You should add a source requirement to restrict this gem to your preferred source."
    Bundler.ui.warn "For example:"
    Bundler.ui.warn "    gem '#{name}', :source => '#{installed_from_uri}'"
    Bundler.ui.warn "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
  end
end

#warn_if_root (private)

[ GitHub ]

  
# File 'lib/bundler/cli/install.rb', line 87

def warn_if_root
  return if Bundler.settings[:silence_root_warning] || Gem.win_platform? || !Process.uid.zero?
  Bundler.ui.warn "Don't run Bundler as root. Installing your bundle as root " \
                  "will break this application for all non-root users on this machine.", wrap: true
end