|
1 | 1 | package temp |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "errors" |
5 | | - "io/fs" |
6 | | - "log" |
| 4 | + "fmt" |
| 5 | + "io/ioutil" |
| 6 | + "os" |
| 7 | + "path" |
7 | 8 | "path/filepath" |
8 | 9 | ) |
9 | 10 |
|
10 | 11 | const ( |
11 | 12 | MAIN = "main.go" |
12 | | - MAKE = "make" |
13 | | - LINT = "lint" |
| 13 | + MAKE = "Makefile" |
| 14 | + LINT = ".golangci.yml" |
14 | 15 | ) |
15 | 16 |
|
16 | | -// TODO we need to improve performance and fix minor errors. |
| 17 | +type Template struct{} |
17 | 18 |
|
18 | | -func GetTemplateByAlias(alias string) (string, error) { |
| 19 | +func NewTemplate() *Template { |
| 20 | + return &Template{} |
| 21 | +} |
| 22 | + |
| 23 | +func (t Template) GetTemplateByAlias(fileName string) (string, error) { |
19 | 24 | var pathToTemp string |
20 | 25 |
|
21 | | - err := filepath.WalkDir("../../../", func(path string, d fs.DirEntry, err error) error { |
22 | | - if err != nil { |
23 | | - return err |
24 | | - } |
| 26 | + tempDir, err := t.getTemplateDir() |
| 27 | + if err != nil { |
| 28 | + return "", fmt.Errorf("fail to get template dir, err: %v", err) |
| 29 | + } |
| 30 | + |
| 31 | + filesInDirectory, err := ioutil.ReadDir(path.Base(tempDir)) |
| 32 | + if err != nil { |
| 33 | + return "", fmt.Errorf("could not read dir, maybe there are no files threr, err: %v", err) |
| 34 | + } |
25 | 35 |
|
26 | | - if d.IsDir() && d.Name() == alias { |
27 | | - files, err := filepath.Glob(filepath.Join(path, "*")) |
28 | | - if err != nil { |
29 | | - return err |
30 | | - } |
31 | | - |
32 | | - for _, fl := range files { |
33 | | - if filepath.Base(fl) == alias { |
34 | | - log.Println(filepath.Base(fl)) |
35 | | - pathToTemp = fl |
36 | | - } else { |
37 | | - return errors.New("template with such alias does not exist") |
38 | | - } |
39 | | - |
40 | | - break |
41 | | - } |
| 36 | + for _, file := range filesInDirectory { |
| 37 | + if file.Name() == fileName { |
| 38 | + pathToTemp = filepath.Join(tempDir, file.Name()) |
42 | 39 | } |
43 | 40 |
|
44 | | - return nil |
45 | | - }) |
| 41 | + break |
| 42 | + } |
| 43 | + |
| 44 | + if pathToTemp == "" { |
| 45 | + return "", fmt.Errorf("file with name \"%s\" not found, err: %v", fileName, err) |
| 46 | + } |
| 47 | + |
| 48 | + return pathToTemp, nil |
| 49 | +} |
46 | 50 |
|
| 51 | +func (Template) getTemplateDir() (string, error) { |
| 52 | + exePath, err := os.Executable() |
47 | 53 | if err != nil { |
48 | | - return "", err |
| 54 | + return "", fmt.Errorf("unable to get path to executable file, err: %v", err) |
| 55 | + } |
| 56 | + |
| 57 | + targetDir := filepath.Join(exePath, "template") |
| 58 | + |
| 59 | + if _, err := os.Stat(targetDir); os.IsNotExist(err) { |
| 60 | + return "", fmt.Errorf("directory \"%s\" not found, err: %v", targetDir, err) |
49 | 61 | } |
50 | 62 |
|
51 | | - return pathToTemp, err |
| 63 | + return targetDir, nil |
52 | 64 | } |
0 commit comments