Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rubygems/commands/specification_command.rb

Class/Module Index [+]

Quicksearch

Gem::Commands::SpecificationCommand

Public Class Methods

new() click to toggle source
 
               # File rubygems/commands/specification_command.rb, line 11
def initialize
  Gem.load_yaml

  super 'specification', 'Display gem specification (in yaml)',
        :domain => :local, :version => Gem::Requirement.default,
        :format => :yaml

  add_version_option('examine')
  add_platform_option

  add_option('--all', 'Output specifications for all versions of',
             'the gem') do |value, options|
    options[:all] = true
  end

  add_option('--ruby', 'Output ruby format') do |value, options|
    options[:format] = :ruby
  end

  add_option('--yaml', 'Output RUBY format') do |value, options|
    options[:format] = :yaml
  end

  add_option('--marshal', 'Output Marshal format') do |value, options|
    options[:format] = :marshal
  end

  add_local_remote_options
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/specification_command.rb, line 56
def execute
  specs = []
  gem = options[:args].shift

  unless gem then
    raise Gem::CommandLineError,
          "Please specify a gem name or file on the command line"
  end

  case options[:version]
  when String
    req = Gem::Requirement.parse options[:version]
  when Gem::Requirement
    req = options[:version]
  else
    raise Gem::CommandLineError, "Unsupported version type: #{options[:version]}"
  end

  if !req.none? and options[:all]
    alert_error "Specify --all or -v, not both"
    terminate_interaction 1
  end

  if options[:all]
    dep = Gem::Dependency.new gem
  else
    dep = Gem::Dependency.new gem, options[:version]
  end

  field = get_one_optional_argument

  raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if
    field and options[:format] == :ruby

  if local? then
    if File.exist? gem then
      specs << Gem::Format.from_file_by_path(gem).spec rescue nil
    end

    if specs.empty? then
      specs.push(*dep.matching_specs)
    end
  end

  if remote? then
    found = Gem::SpecFetcher.fetcher.fetch dep, true

    if dep.prerelease? or options[:prerelease]
      found += Gem::SpecFetcher.fetcher.fetch dep, false, true, true
    end

    specs.push(*found.map { |spec,| spec })
  end

  if specs.empty? then
    alert_error "Unknown gem '#{gem}'"
    terminate_interaction 1
  end

  unless options[:all] then
    specs = [specs.sort_by { |s| s.version }.last]
  end

  specs.each do |s|
    s = s.send field if field

    say case options[:format]
        when :ruby then s.to_ruby
        when :marshal then Marshal.dump s
        else s.to_yaml
        end

    say "\n"
  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.