-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathinitialiser.file.go
83 lines (75 loc) · 1.84 KB
/
initialiser.file.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
81
82
83
package main
import (
"bufio"
"fmt"
"os"
"path"
"strings"
)
// FileInitialiserConfig holds the configuration for initialising the files
type FileInitialiserConfig struct {
Data []byte
Path string
Question string
}
// InitFileInitialiser is the method for creating a file initialiser
func InitFileInitialiser(config *FileInitialiserConfig) *FileInitialiser {
fi := &FileInitialiser{
Key: strings.ToLower(path.Base(config.Path)),
Data: config.Data,
Path: config.Path,
Question: config.Question,
logger: InitLogger(&LoggerConfig{
Format: "raw",
}),
}
return fi
}
// FileInitialiser is used for checking if certain files
// exist at :Path and questioning the user if they'd like to
// seed it
type FileInitialiser struct {
Key string
Data []byte
Path string
Question string
handler func() error
logger *Logger
}
// Check verifies if the Question should be popped
func (fi FileInitialiser) Check() bool {
return fileExists(fi.Path)
}
// Confirm seeks advice from the user whether we should proceed
func (fi FileInitialiser) Confirm(reader *bufio.Reader) bool {
return confirm(
reader,
Color("white", "godev> "+fi.Question),
false,
Color("bold", Color("red", initialiserRetryText)),
)
}
// GetKey returns the key of this file initialiser
func (fi *FileInitialiser) GetKey() string {
return fi.Key
}
// Handle initialises the file if it doesn't exist or if :skip is indiciated
func (fi FileInitialiser) Handle(skip ...bool) error {
if len(skip) > 0 && skip[0] {
fi.logger.Info(
Color("gray",
fmt.Sprintf("godev> skipping '%s' - already exists", path.Base(fi.Path)),
),
)
return nil
}
if fi.handler != nil {
return fi.handler()
}
if file, err := os.Create(fi.Path); err != nil {
return err
} else if _, err = file.Write(fi.Data); err != nil {
return err
}
return nil
}