summaryrefslogtreecommitdiff
path: root/lib/pry/commands/gem_list.rb
blob: bb5e0f48ddca998f0863027ff4cc86dc18b375ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Pry
  class Command::GemList < Pry::ClassCommand
    match 'gem-list'
    group 'Gems'
    description 'List and search installed gems.'

    banner <<-'BANNER'
      Usage: gem-list [REGEX]

      List all installed gems, when a regex is provided, limit the output to those
      that match the regex.
    BANNER

    def process(pattern = nil)
      pattern = Regexp.compile(pattern || '')
      gems    = Rubygem.list(pattern).group_by(&:name)

      gems.each do |gem, specs|
        specs.sort! do |a,b|
          Gem::Version.new(b.version) <=> Gem::Version.new(a.version)
        end

        versions = specs.each_with_index.map do |spec, index|
          index == 0 ? bright_green(spec.version.to_s) : green(spec.version.to_s)
        end

        output.puts "#{default gem} (#{versions.join ', '})"
      end
    end
  end

  Pry::Commands.add_command(Pry::Command::GemList)
end