summaryrefslogtreecommitdiff
path: root/lib/rubygems/commands/specification_command.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-10 07:48:56 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-10 07:48:56 +0000
commitfbf59bdbea63efd34ccc144e648467d2f52e7345 (patch)
tree244f0e7ae112cc7dd135e5d1ac24e6c70ba71b4a /lib/rubygems/commands/specification_command.rb
parent7a4aad75356496559460041a6c063bdb736c7236 (diff)
Import RubyGems trunk revision 1493.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13862 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems/commands/specification_command.rb')
-rw-r--r--lib/rubygems/commands/specification_command.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/rubygems/commands/specification_command.rb b/lib/rubygems/commands/specification_command.rb
new file mode 100644
index 0000000000..954b38ac37
--- /dev/null
+++ b/lib/rubygems/commands/specification_command.rb
@@ -0,0 +1,72 @@
+require 'yaml'
+require 'rubygems/command'
+require 'rubygems/local_remote_options'
+require 'rubygems/version_option'
+require 'rubygems/source_info_cache'
+
+class Gem::Commands::SpecificationCommand < Gem::Command
+
+ include Gem::LocalRemoteOptions
+ include Gem::VersionOption
+
+ def initialize
+ super 'specification', 'Display gem specification (in yaml)',
+ :domain => :local, :version => Gem::Requirement.default
+
+ 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_local_remote_options
+ end
+
+ def arguments # :nodoc:
+ "GEMFILE name of gem to show the gemspec for"
+ end
+
+ def defaults_str # :nodoc:
+ "--local --version '#{Gem::Requirement.default}'"
+ end
+
+ def usage # :nodoc:
+ "#{program_name} [GEMFILE]"
+ end
+
+ def execute
+ specs = []
+ gem = get_one_gem_name
+
+ if local? then
+ source_index = Gem::SourceIndex.from_installed_gems
+ specs.push(*source_index.search(/\A#{gem}\z/, options[:version]))
+ end
+
+ if remote? then
+ alert_warning "Remote information is not complete\n\n"
+
+ Gem::SourceInfoCache.cache_data.each do |_,sice|
+ specs.push(*sice.source_index.search(gem, options[:version]))
+ end
+ end
+
+ if specs.empty? then
+ alert_error "Unknown gem '#{gem}'"
+ terminate_interaction 1
+ end
+
+ output = lambda { |spec| say spec.to_yaml; say "\n" }
+
+ if options[:all] then
+ specs.each(&output)
+ else
+ spec = specs.sort_by { |spec| spec.version }.last
+ output[spec]
+ end
+ end
+
+end
+