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_prerelease_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 YAML 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 57
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 v = options[:version]
  when String
    req = Gem::Requirement.create v
  when Gem::Requirement
    req = v
  else
    raise Gem::CommandLineError, "Unsupported version type: '#{v}'"
  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, req
  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::Package.new(gem).spec rescue nil
    end

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

  if remote? then
    dep.prerelease = options[:prerelease]
    found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep

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

  if specs.empty? then
    alert_error "No gem matching '#{dep}' found"
    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.

blog comments powered by Disqus