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