/
command_make_provider.go
84 lines (70 loc) · 1.8 KB
/
command_make_provider.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
84
package console
import (
"errors"
"fmt"
"os"
"path"
"text/template"
"github.com/lara-go/larago/logger"
"github.com/lara-go/larago/support/stubs"
"github.com/lara-go/larago/support/utils"
"github.com/urfave/cli"
)
var (
providersPath = path.Join(".", "app", "providers")
providersName = path.Join(providersPath, "%s.go")
)
// CommandMakeProvider to apply DB changes.
type CommandMakeProvider struct {
Logger *logger.Logger
name string
}
// GetCommand for the cli to register.
func (c *CommandMakeProvider) GetCommand() cli.Command {
return cli.Command{
Name: "make:provider",
Usage: "Make new service provider",
UsageText: "Makes new ServiceProvider file in ./app/providers directory.\n",
Category: "Code generators",
ArgsUsage: "[ServiceProviderName]",
}
}
// Handle command.
func (c *CommandMakeProvider) Handle(args cli.Args) error {
c.name = args.Get(0)
if c.name == "" {
return errors.New("Name can not be blank")
}
fileName, err := c.makeFile()
if err != nil {
return fmt.Errorf("Can't make new service provider: %s", err)
}
c.Logger.Success("New service provider created at: %s", fileName)
return nil
}
// Make migrations file.
func (c *CommandMakeProvider) makeFile() (string, error) {
// Open migration file.
fileName := c.getResultFileName()
f, err := os.Create(fileName)
if err != nil {
return "", err
}
defer f.Close()
// Parse and execute template into migration file.
t := template.Must(template.New("provider").Parse(stubs.ServiceProviderStub))
var vars = struct {
Name string
}{
Name: c.name,
}
err = t.Execute(f, vars)
if err != nil {
return "", err
}
return fileName, nil
}
// Make path to the result migration file.
func (c *CommandMakeProvider) getResultFileName() string {
return fmt.Sprintf(providersName, utils.ToSnake(c.name))
}