Extended maintenance of Ruby versions 1.8.7 and 1.9.2 will end on July 31, 2014. 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 13
def initialize
  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

  dep = Gem::Dependency.new gem, options[:version]

  field = get_one_optional_argument

  if field then
    field = field.intern

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

    unless Gem::Specification.attribute_names.include? field then
      raise Gem::CommandLineError,
            "no field %p on Gem::Specification" % field.to_s
    end
  end

  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(*Gem.source_index.search(dep))
    end
  end

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

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

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

  output = lambda 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

  if options[:all] then
    specs.each(&output)
  else
    spec = specs.sort_by { |s| s.version }.last
    output[spec]
  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