Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cli_inputs.rb « helpers « cli « internal_events « scripts - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 106d854d0b32e326e199787386ff3f17f039e540 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
# frozen_string_literal: true

# Helpers related to configuration of TTY::Prompt prompts
module InternalEventsCli
  module Helpers
    module CliInputs
      def prompt_for_array_selection(message, choices, default = nil, &formatter)
        formatter ||= ->(choice) { choice.sort.join(", ") }

        choices = choices.map do |choice|
          { name: formatter.call(choice), value: choice }
        end

        cli.select(message, choices, **select_opts) do |menu|
          menu.enum "."
          menu.default formatter.call(default) if default
        end
      end

      def prompt_for_text(message, value = nil)
        help_message = "(enter to #{value ? 'submit' : 'skip'})"

        cli.ask(
          "#{message} #{format_help(help_message)}",
          value: value || '',
          **input_opts
        )
      end

      def input_opts
        { prefix: format_prompt('Input text: ') }
      end

      def yes_no_opts
        { prefix: format_prompt('Yes/No: ') }
      end

      def select_opts
        { prefix: format_prompt('Select one: '), cycle: true, show_help: :always }
      end

      def multiselect_opts
        { prefix: format_prompt('Select multiple: '), cycle: true, show_help: :always, min: 1 }
      end

      # Accepts a number of lines occupied by text, so remaining
      # screen real estate can be filled with select options
      def filter_opts(header_size: nil)
        {
          filter: true,
          per_page: header_size ? [(window_height - header_size), 10].max : 30
        }
      end

      def input_required_text
        format_help("(leave blank for help)")
      end
    end
  end
end