In Files

  • rubygems/commands/query_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::QueryCommand

Public Class Methods

new(name = 'query', summary = 'Query gem information in local or remote repositories') click to toggle source
 
               # File rubygems/commands/query_command.rb, line 13
def initialize(name = 'query',
               summary = 'Query gem information in local or remote repositories')
  super name, summary,
       :name => //, :domain => :local, :details => false, :versions => true,
       :installed => nil, :version => Gem::Requirement.default

  add_option('-i', '--[no-]installed',
             'Check for installed gem') do |value, options|
    options[:installed] = value
  end

  add_option('-I', 'Equivalent to --no-installed') do |value, options|
    options[:installed] = false
  end

  add_version_option command, "for use with --installed"

  add_option('-n', '--name-matches REGEXP',
             'Name of gem(s) to query on matches the',
             'provided REGEXP') do |value, options|
    options[:name] = /#{value}/i
  end

  add_option('-d', '--[no-]details',
             'Display detailed information of gem(s)') do |value, options|
    options[:details] = value
  end

  add_option(      '--[no-]versions',
             'Display only gem names') do |value, options|
    options[:versions] = value
    options[:details] = false unless value
  end

  add_option('-a', '--all',
             'Display all gem versions') do |value, options|
    options[:all] = value
  end

  add_option(      '--[no-]prerelease',
             'Display prerelease versions') do |value, options|
    options[:prerelease] = value
  end

  add_local_remote_options
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/query_command.rb, line 64
def execute
  exit_code = 0

  name = options[:name]
  prerelease = options[:prerelease]

  unless options[:installed].nil? then
    if name.source.empty? then
      alert_error "You must specify a gem name"
      exit_code |= 4
    else
      installed = installed? name, options[:version]
      installed = !installed unless options[:installed]

      if installed then
        say "true"
      else
        say "false"
        exit_code |= 1
      end
    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 |name_tuple|
        options[:name] === name_tuple.name
      end
    end

    output_query_results spec_tuples
  end
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus