summaryrefslogtreecommitdiff
path: root/lib/bundler/cli/info.rb
blob: b7eb6a6e56ca11dba99c935d5549613e7e61f465 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# frozen_string_literal: true
require "bundler/cli/common"

module Bundler
  class CLI::Info
    attr_reader :gem_name, :options
    def initialize(options, gem_name)
      @options = options
      @gem_name = gem_name
    end

    def run
      Bundler.ui.silence do
        Bundler.definition.validate_runtime!
        Bundler.load.lock
      end

      spec = Bundler::CLI::Common.select_spec(gem_name, :regex_match)
      return print_gem_info(spec) if spec
    end

  private

    def print_gem_info(spec)
      desc = "  * #{spec.name} (#{spec.version}#{spec.git_version})"
      latest = fetch_latest_specs.find {|l| l.name == spec.name }
      Bundler.ui.info <<-END.gsub(/^ +/, "")
        #{desc}
        \tSummary:  #{spec.summary || "No description available."}
        \tHomepage: #{spec.homepage || "No website available."}
        \tStatus:   #{outdated?(spec, latest) ? "Outdated - #{spec.version} < #{latest.version}" : "Up to date"}
        \tPath:     #{spec.full_gem_path}
      END
    end

    def fetch_latest_specs
      definition = Bundler.definition(true)
      definition.resolve_remotely!
      definition.specs
    end

    def outdated?(current, latest)
      return false unless latest
      Gem::Version.new(current.version) < Gem::Version.new(latest.version)
    end
  end
end