summaryrefslogtreecommitdiff
path: root/lib/rubygems/commands/query_command.rb
diff options
context:
space:
mode:
-rw-r--r--lib/rubygems/commands/query_command.rb170
1 files changed, 92 insertions, 78 deletions
@@ -78,46 +78,58 @@ is too hard to use.
end
def execute
exit_code = 0
- if options[:args].to_a.empty? and options[:name].source.empty?
- name = options[:name]
- no_name = true
- elsif !options[:name].source.empty?
- name = Array(options[:name])
else
- args = options[:args].to_a
- name = options[:exact] ? args.map{|arg| /\A#{Regexp.escape(arg)}\Z/ } : args.map{|arg| /#{arg}/i }
end
- prerelease = options[:prerelease]
- unless options[:installed].nil?
- if no_name
- alert_error "You must specify a gem name"
- exit_code |= 4
- elsif name.count > 1
- alert_error "You must specify only ONE gem!"
- exit_code |= 4
- else
- installed = installed? name.first, options[:version]
- installed = !installed unless options[:installed]
- if installed
- say "true"
- else
- say "false"
- exit_code |= 1
- end
- end
- terminate_interaction exit_code
- end
- names = Array(name)
- names.each { |n| show_gems n, prerelease }
end
- private
def display_header(type)
if (ui.outs.tty? and Gem.configuration.verbose) or both?
@@ -128,56 +140,57 @@ is too hard to use.
end
#Guts of original execute
- def show_gems(name, prerelease)
- req = Gem::Requirement.default
- # TODO: deprecate for real
dep = Gem::Deprecate.skip_during { Gem::Dependency.new name, req }
- dep.prerelease = prerelease
- if local?
- if prerelease and not both?
- alert_warning "prereleases are always shown locally"
- end
- display_header 'LOCAL'
- specs = Gem::Specification.find_all do |s|
- s.name =~ name and req =~ s.version
- end
- spec_tuples = specs.map do |spec|
- [spec.name_tuple, spec]
- end
- output_query_results spec_tuples
- end
- if remote?
- display_header 'REMOTE'
-
- fetcher = Gem::SpecFetcher.fetcher
-
- type = if options[:all]
- if options[:prerelease]
- :complete
- else
- :released
- end
- elsif options[:prerelease]
- :prerelease
- else
- :latest
- end
-
- if name.respond_to?(:source) && name.source.empty?
- spec_tuples = fetcher.detect(type) { true }
else
- spec_tuples = fetcher.detect(type) do |name_tuple|
- name === name_tuple.name
- end
end
-
- output_query_results spec_tuples
end
end
@@ -235,7 +248,7 @@ is too hard to use.
name_tuple, spec = detail_tuple
- spec = spec.fetch_spec name_tuple if spec.respond_to? :fetch_spec
entry << "\n"
@@ -285,8 +298,8 @@ is too hard to use.
entry = [name_tuples.first.name]
- entry_versions entry, name_tuples, platforms, specs
- entry_details entry, detail_tuple, specs, platforms
entry.join
end
@@ -337,12 +350,13 @@ is too hard to use.
if platforms.length == 1
title = platforms.values.length == 1 ? 'Platform' : 'Platforms'
- entry << " #{title}: #{platforms.values.sort.join ', '}\n"
else
entry << " Platforms:\n"
- platforms.sort_by do |version,|
- version
- end.each do |version, pls|
label = " #{version}: "
data = format_text pls.sort.join(', '), 68, label.length
data[0, label.length] = label