class Gem::Commands::SpecificationCommand

Public Class Methods

new() click to toggle source
Calls superclass method Gem::Command.new
# File lib/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 lib/rubygems/commands/specification_command.rb, line 73
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.max_by { |s| s.version }]
 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