Class: CLI::UI::Prompt::InteractiveOptions
- Inherits:
-
Object
- Object
- CLI::UI::Prompt::InteractiveOptions
- Extended by:
- T::Sig
- Defined in:
- lib/cli/ui/prompt/interactive_options.rb
Constant Summary collapse
- DONE =
'Done'
- CHECKBOX_ICON =
{ false => '☐', true => '☑' }
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(options, multiple: false, default: nil) ⇒ InteractiveOptions
constructor
A new instance of InteractiveOptions.
Methods included from T::Sig
Constructor Details
#initialize(options, multiple: false, default: nil) ⇒ InteractiveOptions
Returns a new instance of InteractiveOptions.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/cli/ui/prompt/interactive_options.rb', line 60 def initialize(, multiple: false, default: nil) @options = @active = if default && (i = .index(default)) i + 1 else 1 end @marker = '>' @answer = nil @state = :root @multiple = multiple # Indicate that an extra line (the "metadata" line) is present and # the terminal output should be drawn over when processing user input @displaying_metadata = false @filter = '' # 0-indexed array representing if selected # @options[0] is selected if @chosen[0] if multiple @chosen = if default @options.map { |option| default.include?(option) } else Array.new(@options.size) { false } end end @redraw = true @presented_options = T.let([], T::Array[[String, T.nilable(Integer)]]) end |
Class Method Details
.call(options, multiple: false, default: nil) ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/cli/ui/prompt/interactive_options.rb', line 37 def call(, multiple: false, default: nil) list = new(, multiple: multiple, default: default) selected = list.call case selected when Array selected.map { |s| T.must([s - 1]) } else T.must([selected - 1]) end end |
Instance Method Details
#call ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/cli/ui/prompt/interactive_options.rb', line 92 def call calculate_option_line_lengths CLI::UI.raw { print(ANSI.hide_cursor) } while @answer.nil? process_input_until_redraw_required reset_position end clear_output @answer ensure CLI::UI.raw do print(ANSI.show_cursor) end end |