1require 'rubygems/command'
2require 'rubygems/local_remote_options'
3require 'rubygems/spec_fetcher'
4require 'rubygems/version_option'
5
6class Gem::Commands::OutdatedCommand < Gem::Command
7
8  include Gem::LocalRemoteOptions
9  include Gem::VersionOption
10
11  def initialize
12    super 'outdated', 'Display all gems that need updates'
13
14    add_local_remote_options
15    add_platform_option
16  end
17
18  def execute
19    Gem::Specification.outdated.sort.each do |name|
20      local   = Gem::Specification.find_all_by_name(name).max
21      dep     = Gem::Dependency.new local.name, ">= #{local.version}"
22      remotes, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep
23
24      next if remotes.empty?
25
26      remotes.sort! { |a,b| a[0].version <=> b[0].version }
27
28      highest = remotes.last.first
29
30      say "#{local.name} (#{local.version} < #{highest.version})"
31    end
32  end
33end
34