Module: Gemview::View

Defined in:
lib/gemview/view.rb

Class Method Summary collapse

Class Method Details

.info(gem:) ⇒ Object



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
# File 'lib/gemview/view.rb', line 5

def self.info(gem:)
  gem = Gem.find(name: gem.name, version: gem.version) unless gem.dependencies?
  prompt = <<~PROMPT.chomp
    #{gem.header_str}
    More info:
  PROMPT

  choices_proc = proc do
    [
      {name: "Readme", disabled: gem.readme? ? nil : "(missing)"},
      {name: "Changelog", disabled: gem.changelog? ? nil : "(missing)"},
      "Dependencies",
      "Versions"
    ]
  end

  Terminal.clear_screen
  Terminal.choose(message: prompt, choices: choices_proc) do |choice|
    title = gem.title_str(subsection: choice)
    case choice
    when "Readme"
      Terminal.page([title, gem.readme].join("\n")) if gem.readme
    when "Changelog"
      Terminal.page([title, gem.changelog].join("\n")) if gem.changelog
    when "Dependencies"
      Terminal.page([title, gem.dependencies_str].join("\n"))
    when "Versions"
      Terminal.page([title, gem.versions_str].join("\n"))
    else
      raise ArgumentError, "Unknown choice: #{choice}"
    end
  end
end

.list(gems:) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/gemview/view.rb', line 39

def self.list(gems:)
  gems_by_description = gems.to_h do |gem|
    [gem.selector_str, gem]
  end

  Terminal.clear_screen
  Terminal.choose(message: "Choose a gem:", choices: gems_by_description.keys) do |description|
    info(gem: gems_by_description.fetch(description))
  end
end