class Gem::Commands::QueryCommand

def execute

def execute
  exit_code = 0
  name = options[:name]
  prerelease = options[:prerelease]
  if options[:installed] then
    if name.source.empty? then
      alert_error "You must specify a gem name"
      exit_code |= 4
    elsif installed? name, options[:version] then
      say "true"
    else
      say "false"
      exit_code |= 1
    end
    terminate_interaction exit_code
  end
  req = Gem::Requirement.default
  # TODO: deprecate for real
  dep = Gem::Deprecate.skip_during { Gem::Dependency.new name, req }
  dep.prerelease = prerelease
  if local? then
    if prerelease and not both? then
      alert_warning "prereleases are always shown locally"
    end
    if ui.outs.tty? or both? then
      say
      say "*** LOCAL GEMS ***"
      say
    end
    specs = Gem::Specification.find_all { |s|
      s.name =~ name and req =~ s.version
    }
    spec_tuples = specs.map do |spec|
      [spec.name_tuple, spec]
    end
    output_query_results spec_tuples
  end
  if remote? then
    if ui.outs.tty? or both? then
      say
      say "*** REMOTE GEMS ***"
      say
    end
    fetcher = Gem::SpecFetcher.fetcher
    type = if options[:all]
             if options[:prerelease]
               :complete
             else
               :released
             end
           elsif options[:prerelease]
             :prerelease
           else
             :latest
           end
    if options[:name].source.empty?
      spec_tuples = fetcher.detect(type) { true }
    else
      spec_tuples = fetcher.detect(type) do |gem_name, ver, plat|
        options[:name] === gem_name
      end
    end
    output_query_results spec_tuples
  end
end