Module: Commiti::MessagePresenter

Defined in:
lib/services/message_presenter.rb

Class Method Summary collapse

Class Method Details

.maybe_copy_to_clipboard(message, no_copy:, run_stage:) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/services/message_presenter.rb', line 27

def self.maybe_copy_to_clipboard(message, no_copy:, run_stage:)
  return if no_copy

  copied = run_stage.call('Copying output to clipboard') { Commiti::Clipboard.copy(message) }
  if copied
    puts "#{Commiti::TerminalUI.status(:success, 'Copied output to clipboard!')}\n\n"
  else
    puts "#{Commiti::TerminalUI.status(:warn, 'Clipboard unavailable. Install xclip: sudo apt install xclip')}\n\n"
  end
end


38
39
40
41
42
43
44
# File 'lib/services/message_presenter.rb', line 38

def self.print_message(message)
  puts "\n#{Commiti::TerminalUI.separator}"
  puts Commiti::TerminalUI.header('Generated output')
  puts Commiti::TerminalUI.separator
  puts message
  puts "#{Commiti::TerminalUI.separator}\n"
end


5
6
7
8
9
10
11
# File 'lib/services/message_presenter.rb', line 5

def self.print_summarization_notice(summarized_result)
  if summarized_result[:fallback_reason]
    puts "\n#{Commiti::TerminalUI.status(:warn, summarized_result[:fallback_reason])}\n"
  elsif summarized_result[:summarized]
    puts "\n#{Commiti::TerminalUI.status(:info, 'Diff is large — summarizing first to preserve prompt focus.')}\n"
  end
end

.select_message(candidates) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/services/message_presenter.rb', line 13

def self.select_message(candidates)
  if candidates.length == 1
    print_message(candidates.first)
    return candidates.first
  end

  print_candidates(candidates)
  selected_index = Commiti::InteractivePrompt.ask_candidate_selection(candidates.length)
  selected_message = candidates[selected_index]
  puts "\n#{Commiti::TerminalUI.status(:info, "Using candidate #{selected_index + 1}.")}"
  print_message(selected_message)
  selected_message
end