Skip to content
Snippets Groups Projects
Commit 17747c72 authored by Tamer Tas's avatar Tamer Tas
Browse files

pkg/util/tlog: pretty print multiple choice prompts

parent 93050447
No related branches found
No related tags found
No related merge requests found
......@@ -68,7 +68,7 @@ func (p boolPrompt) EvaluateChoice(c string) (interface{}, error) {
type multipleChoicePrompt []string
func (p multipleChoicePrompt) PromptMessage(name string) string {
return fmt.Sprintf("Please choose an index for %q", name)
return fmt.Sprintf("Please choose an option for %q", name)
}
func (p multipleChoicePrompt) EvaluateChoice(c string) (interface{}, error) {
......
......@@ -90,7 +90,7 @@ func TestMultipleChoicePromptFunc(t *testing.T) {
msg := slicePrompt.PromptMessage(name)
expectedPromptMsg := "Please choose an index for \"fieldName\""
expectedPromptMsg := "Please choose an option for \"fieldName\""
if msg != expectedPromptMsg {
t.Errorf("slicePrompt(%q).PromptMessage(%q) expected %q got %q", defval, name, expectedPromptMsg, msg)
}
......
......@@ -135,11 +135,27 @@ func Fatal(msg string) {
// Prompt outputs the given message as a question along with a default value.
func Prompt(msg string, defval interface{}) {
fmt.Print(strings.Join([]string{
tokens := []string{
color.New(color.FgBlue).SprintFunc()("[" + QuestionMark + "]"),
color.New(color.Bold, color.FgWhite).SprintFunc()(msg),
color.New(color.FgBlue).SprintFunc()(fmt.Sprintf("[default: %#v]: ", defval)),
}, " "))
}
// TODO refactor & eliminate duplication
switch val := defval.(type) {
case []interface{}:
tokens = append(tokens, "\n")
for i, v := range val {
tokens = append(tokens, color.New(color.Bold, color.FgWhite).SprintFunc()(fmt.Sprintf(" %v - %#v\n", i+1, v)))
}
tokens = append(tokens, color.New(color.Bold, color.FgWhite).SprintFunc()(fmt.Sprintf(" Choose from %v..%v", 1, len(val))))
tokens = append(tokens, color.New(color.Bold, color.FgBlue).SprintFunc()(fmt.Sprintf("[default: %v]: ", 1)))
default:
tokens = append(tokens, color.New(color.Bold, color.FgBlue).SprintFunc()(fmt.Sprintf("[default: %#v]: ", defval)))
}
fmt.Print(strings.Join(tokens, " "))
}
// TODO use dependency injection wrapper for fmt.Print usage in the code base
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment