class Pod::Command::Update

Public Class Methods

new(argv) click to toggle source
Calls superclass method Pod::Command::new
# File lib/cocoapods/command/update.rb, line 30
def initialize(argv)
  @pods = argv.arguments! unless argv.arguments.empty?

  source_urls = argv.option('sources', '').split(',')
  excluded_pods = argv.option('exclude-pods', '').split(',')
  unless source_urls.empty?
    source_pods = source_urls.flat_map { |url| config.sources_manager.source_with_name_or_url(url).pods }
    unless source_pods.empty?
      source_pods = source_pods.select { |pod| config.lockfile.pod_names.include?(pod) }
      if @pods
        @pods += source_pods
      else
        @pods = source_pods unless source_pods.empty?
      end
    end
  end

  unless excluded_pods.empty?
    @pods ||= config.lockfile.pod_names.dup

    non_installed_pods = (excluded_pods - @pods)
    unless non_installed_pods.empty?
      pluralized_words = non_installed_pods.length > 1 ? %w(Pods are) : %w(Pod is)
      message = "Trying to skip `#{non_installed_pods.join('`, `')}` #{pluralized_words.first} " \
              "which #{pluralized_words.last} not installed"
      raise Informative, message
    end

    @pods.delete_if { |pod| excluded_pods.include?(pod) }
  end

  super
end
options() click to toggle source
Calls superclass method Pod::Command::options
# File lib/cocoapods/command/update.rb, line 22
def self.options
  [
    ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to update dependent pods. ' \
     'Multiple sources must be comma-delimited. The master repo will not be included by default with this option.'],
    ['--exclude-pods=podName', 'Pods to exclude during update. Multiple pods must be comma-delimited.'],
  ].concat(super)
end

Public Instance Methods

run() click to toggle source
# File lib/cocoapods/command/update.rb, line 84
def run
  verify_podfile_exists!

  installer = installer_for_config
  installer.repo_update = repo_update?(:default => true)
  if @pods
    verify_lockfile_exists!
    verify_pods_are_installed!
    installer.update = { :pods => @pods }
  else
    UI.puts 'Update all pods'.yellow
    installer.update = true
  end
  installer.install!
end
verify_pods_are_installed!() click to toggle source

Check if all given pods are installed

# File lib/cocoapods/command/update.rb, line 66
def verify_pods_are_installed!
  lockfile_roots = config.lockfile.pod_names.map { |p| Specification.root_name(p) }
  missing_pods = @pods.map { |p| Specification.root_name(p) }.select do |pod|
    !lockfile_roots.include?(pod)
  end

  unless missing_pods.empty?
    message = if missing_pods.length > 1
                "Pods `#{missing_pods.join('`, `')}` are not " \
                    'installed and cannot be updated'
              else
                "The `#{missing_pods.first}` Pod is not installed " \
                    'and cannot be updated'
              end
    raise Informative, message
  end
end