Module: CLI::UI::Prompt
- Defined in:
- lib/cli/ui/prompt.rb,
lib/cli/ui/prompt/options_handler.rb,
lib/cli/ui/prompt/interactive_options.rb
Class Method Summary collapse
-
.ask(question, options: nil, default: nil, is_file: nil, allow_empty: true, multiple: false, filter_ui: true, select_ui: true, &options_proc) ⇒ Object
Ask a user a question with either free form answer or a set of answers (multiple choice) Can use arrows, y/n, numbers (1/2), and vim bindings to control multiple choice selection Do not use this method for yes/no questions.
-
.confirm(question, default: true) ⇒ Object
Asks the user a yes/no question.
Class Method Details
.ask(question, options: nil, default: nil, is_file: nil, allow_empty: true, multiple: false, filter_ui: true, select_ui: true, &options_proc) ⇒ Object
Ask a user a question with either free form answer or a set of answers (multiple choice) Can use arrows, y/n, numbers (1/2), and vim bindings to control multiple choice selection Do not use this method for yes/no questions. Use confirm
-
Handles free form answers (options are nil)
-
Handles default answers for free form text
-
Handles file auto completion for file input
-
Handles interactively choosing answers using
InteractiveOptions
Attributes
-
question
- (required) The question to ask the user
Options
-
:options
- Options that the user may select from. Will useInteractiveOptions
to do so. -
:default
- The default answer to the question (e.g. they just press enter and don’t input anything) -
:is_file
- Tells the input to use file auto-completion (tab completion) -
:allow_empty
- Allows the answer to be empty -
:multiple
- Allow multiple options to be selected -
:filter_ui
- Enable option filtering (default: true) -
:select_ui
- Enable long-form option selection (default: true)
Note:
-
:options
or providing aBlock
conflicts with:default
and:is_file
, you cannot set options with either of these keywords -
:default
conflicts with +:allow_empty:, you cannot set these together -
:options
conflicts with providing aBlock
, you may only set one -
:multiple
can only be used with:options
or aBlock
; it is ignored, otherwise.
Block (optional)
-
A Proc that provides a
OptionsHandler
and uses the public:option
method to add options and their respective handlers
Return Value
-
If a
Block
was not provided, the selected option or response to the free form question will be returned -
If a
Block
was provided, the evaluted value of theBlock
will be returned
Example Usage:
Free form question
CLI::UI::Prompt.ask('What color is the sky?')
Free form question with a file answer
CLI::UI::Prompt.ask('Where is your Gemfile located?', is_file: true)
Free form question with a default answer
CLI::UI::Prompt.ask('What color is the sky?', default: 'blue')
Free form question when the answer can be empty
CLI::UI::Prompt.ask('What is your opinion on this question?', allow_empty: true)
Interactive (multiple choice) question
CLI::UI::Prompt.ask('What kind of project is this?', options: %w(rails go ruby python))
Interactive (multiple choice) question with defined handlers
CLI::UI::Prompt.ask('What kind of project is this?') do |handler|
handler.option('rails') { |selection| selection }
handler.option('go') { |selection| selection }
handler.option('ruby') { |selection| selection }
handler.option('python') { |selection| selection }
end
79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/cli/ui/prompt.rb', line 79 def ask(question, options: nil, default: nil, is_file: nil, allow_empty: true, multiple: false, filter_ui: true, select_ui: true, &) if (( || block_given?) && (default || is_file)) raise(ArgumentError, 'conflicting arguments: options provided with default or is_file') end if || block_given? ask_interactive(question, , multiple: multiple, filter_ui: filter_ui, select_ui: select_ui, &) else ask_free_form(question, default, is_file, allow_empty) end end |
.confirm(question, default: true) ⇒ Object
101 102 103 |
# File 'lib/cli/ui/prompt.rb', line 101 def confirm(question, default: true) ask_interactive(question, default ? %w(yes no) : %w(no yes), filter_ui: false) == 'yes' end |