diff options
-rw-r--r-- | lib/rubygems/commands/query_command.rb | 170 |
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 |