-
Notifications
You must be signed in to change notification settings - Fork 181
/
logger.go
80 lines (65 loc) · 1.39 KB
/
logger.go
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package application
import (
"fmt"
"io"
"strings"
)
type Logger struct {
newline bool
writer io.Writer
reader io.Reader
noConfirm bool
}
func NewLogger(writer io.Writer, reader io.Reader) *Logger {
return &Logger{
newline: true,
writer: writer,
reader: reader,
noConfirm: false,
}
}
func (l *Logger) clear() {
if l.newline {
return
}
l.writer.Write([]byte("\n"))
l.newline = true
}
func (l *Logger) Step(message string, a ...interface{}) {
l.clear()
fmt.Fprintf(l.writer, "step: %s\n", fmt.Sprintf(message, a...))
l.newline = true
}
func (l *Logger) Dot() {
l.writer.Write([]byte("\u2022"))
l.newline = false
}
func (l *Logger) Printf(message string, a ...interface{}) {
l.clear()
fmt.Fprintf(l.writer, "%s", fmt.Sprintf(message, a...))
}
func (l *Logger) Println(message string) {
l.clear()
fmt.Fprintf(l.writer, "%s\n", message)
}
func (l *Logger) NoConfirm() {
l.noConfirm = true
}
func (l *Logger) Prompt(message string) bool {
if l.noConfirm {
return true
}
l.clear()
fmt.Fprintf(l.writer, "%s (y/N): ", message)
l.newline = true
var proceed string
fmt.Fscanln(l.reader, &proceed)
proceed = strings.ToLower(proceed)
if proceed == "yes" || proceed == "y" {
return true
}
return false
}
func (l *Logger) PromptWithDetails(resourceType, resourceName string) bool {
return l.Prompt(fmt.Sprintf("[%s: %s] Delete?", resourceType, resourceName))
}