Skip to content

Commit 56c478c

Browse files
committed
fix issues raised in the review
1 parent 81ae831 commit 56c478c

18 files changed

+513
-442
lines changed

contracts/packages/manager.go contracts/packages/setup.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import (
66
)
77

88
type FileModifier interface {
9-
Apply(dir string) error
9+
Apply() error
1010
}
1111

12-
type Manager interface {
13-
Install(dir string) error
14-
Uninstall(dir string) error
12+
type Setup interface {
13+
Install(modifiers ...FileModifier)
14+
Uninstall(modifiers ...FileModifier)
15+
Execute()
1516
}
1617

1718
type GoNodeMatcher interface {

foundation/console/package_install_command.go

+14-48
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package console
22

33
import (
4-
"fmt"
54
"os/exec"
65
"strings"
76

87
"github.com/goravel/framework/contracts/console"
98
"github.com/goravel/framework/contracts/console/command"
109
"github.com/goravel/framework/errors"
1110
"github.com/goravel/framework/support/color"
11+
supportconsole "github.com/goravel/framework/support/console"
1212
)
1313

1414
type PackageInstallCommand struct {
@@ -38,11 +38,9 @@ func (r *PackageInstallCommand) Extend() command.Extend {
3838

3939
// Handle Execute the console command.
4040
func (r *PackageInstallCommand) Handle(ctx console.Context) error {
41-
var (
42-
err error
43-
pkg = ctx.Argument(0)
44-
)
41+
pkg := ctx.Argument(0)
4542
if pkg == "" {
43+
var err error
4644
pkg, err = ctx.Ask("Enter the package name to install", console.AskOption{
4745
Description: "If no version is specified, install the latest",
4846
Placeholder: " E.g example.com/pkg or example.com/pkg@v1.0.0",
@@ -61,61 +59,29 @@ func (r *PackageInstallCommand) Handle(ctx console.Context) error {
6159
}
6260
}
6361

64-
// handle package version
65-
pkg, version, ok := strings.Cut(pkg, "@")
66-
manager := pkg + "/manager"
67-
if ok {
68-
pkg = pkg + "@" + version
69-
}
62+
pkgPath, _, _ := strings.Cut(pkg, "@")
63+
setup := pkgPath + "/setup"
7064

7165
// get package
72-
var output []byte
73-
get := exec.Command("go", "get", pkg)
74-
if err = ctx.Spinner(fmt.Sprintf("> @%s", strings.Join(get.Args, " ")), console.SpinnerOption{
75-
Action: func() error {
76-
output, err = get.CombinedOutput()
77-
78-
return err
79-
},
80-
}); err != nil {
81-
color.Errorf("failed to get package: %s\n", err.Error())
82-
if len(output) > 0 {
83-
color.Red().Println(string(output))
84-
}
66+
if err := supportconsole.ExecuteCommand(ctx, exec.Command("go", "get", pkg)); err != nil {
67+
color.Errorln("failed to get package:")
68+
color.Red().Println(err.Error())
8569

8670
return nil
8771
}
8872

8973
// install package
90-
install := exec.Command("go", "run", manager, "install")
91-
if err = ctx.Spinner(fmt.Sprintf("> @%s", strings.Join(install.Args, " ")), console.SpinnerOption{
92-
Action: func() error {
93-
output, err = install.CombinedOutput()
94-
95-
return err
96-
},
97-
}); err != nil {
98-
color.Errorf("failed to install package: %s\n", err.Error())
99-
if len(output) > 0 {
100-
color.Red().Println(string(output))
101-
}
74+
if err := supportconsole.ExecuteCommand(ctx, exec.Command("go", "run", setup, "install")); err != nil {
75+
color.Errorln("failed to install package:")
76+
color.Red().Println(err.Error())
10277

10378
return nil
10479
}
10580

10681
// tidy go.mod file
107-
tidy := exec.Command("go", "mod", "tidy")
108-
if err = ctx.Spinner(fmt.Sprintf("> @%s", strings.Join(tidy.Args, " ")), console.SpinnerOption{
109-
Action: func() error {
110-
output, err = tidy.CombinedOutput()
111-
112-
return err
113-
},
114-
}); err != nil {
115-
color.Errorf("failed to tidy go.mod file: %s\n", err.Error())
116-
if len(output) > 0 {
117-
color.Red().Println(string(output))
118-
}
82+
if err := supportconsole.ExecuteCommand(ctx, exec.Command("go", "mod", "tidy")); err != nil {
83+
color.Errorln("failed to tidy go.mod file:")
84+
color.Red().Println(err.Error())
11985

12086
return nil
12187
}

foundation/console/package_make_command.go

+1-10
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@ func (r *PackageMakeCommand) Extend() command.Extend {
3131
return command.Extend{
3232
Category: "make",
3333
Flags: []command.Flag{
34-
&command.BoolFlag{
35-
Name: "manager",
36-
Aliases: []string{"m"},
37-
Usage: "Create a package manager",
38-
DisableDefaultText: true,
39-
},
4034
&command.StringFlag{
4135
Name: "root",
4236
Aliases: []string{"r"},
@@ -84,10 +78,7 @@ func (r *PackageMakeCommand) Handle(ctx console.Context) error {
8478
filepath.Join("config", packageName+".go"): packageMakeCommandStubs.Config,
8579
filepath.Join("contracts", packageName+".go"): packageMakeCommandStubs.Contracts,
8680
filepath.Join("facades", packageName+".go"): packageMakeCommandStubs.Facades,
87-
}
88-
89-
if ctx.OptionBool("manager") {
90-
files[filepath.Join("manager", "manager.go")] = packageMakeCommandStubs.Manager
81+
filepath.Join("setup", "setup.go"): packageMakeCommandStubs.Setup,
9182
}
9283

9384
for path, content := range files {

foundation/console/package_make_command_stubs.go

+16-76
Original file line numberDiff line numberDiff line change
@@ -123,95 +123,35 @@ func DummyCamelName() contracts.DummyCamelName {
123123
return content
124124
}
125125

126-
func (r PackageMakeCommandStubs) Manager() string {
126+
func (r PackageMakeCommandStubs) Setup() string {
127127
content := `package main
128128
129129
import (
130130
"os"
131-
"path"
132-
"path/filepath"
133-
"runtime/debug"
134-
"strings"
135131
136132
pkgcontracts "github.com/goravel/framework/contracts/packages"
137133
"github.com/goravel/framework/packages"
138-
"github.com/goravel/framework/support/color"
134+
"github.com/goravel/framework/support/path"
139135
)
140136
141-
var (
142-
module string
143-
dir string
144-
force bool
145-
)
146-
147-
func init() {
148-
for i, arg := range os.Args {
149-
if arg == "--force" || arg == "-f" {
150-
force = true
151-
}
152-
153-
if (arg == "--dir" || arg == "-d") && len(os.Args) > i+1 {
154-
dir = os.Args[i+1]
155-
}
156-
}
157-
158-
if info, ok := debug.ReadBuildInfo(); ok && strings.HasSuffix(info.Path, "manager") {
159-
module = path.Dir(info.Path)
160-
}
161-
162-
if dir == "" {
163-
dir, _ = os.Getwd()
164-
}
165-
}
166-
167137
func main() {
168-
var pkg = packages.Manager{
169-
ContinueOnError: force,
170-
Module: module,
171-
OnInstall: []pkgcontracts.FileModifier{
172-
packages.ModifyGoFile{
173-
File: filepath.Join("config", "app.go"),
174-
Modifiers: []pkgcontracts.GoNodeModifier{
175-
packages.AddImportSpec(module),
176-
packages.AddProviderSpec(
177-
"&DummyName.ServiceProvider{}",
178-
),
179-
},
180-
},
138+
setup := packages.Setup(os.Args...)
139+
setup.Install(packages.ModifyGoFile{
140+
File: path.Config("app.go"),
141+
Modifiers: []pkgcontracts.GoNodeModifier{
142+
packages.AddImportSpec(setup.Module),
143+
packages.AddProviderSpec("&DummyName.ServiceProvider{}"),
181144
},
182-
OnUninstall: []pkgcontracts.FileModifier{
183-
packages.ModifyGoFile{
184-
File: filepath.Join("config", "app.go"),
185-
Modifiers: []pkgcontracts.GoNodeModifier{
186-
packages.RemoveImportSpec(module),
187-
packages.RemoveProviderSpec("&DummyName.ServiceProvider{}"),
188-
},
189-
},
145+
})
146+
setup.Uninstall(packages.ModifyGoFile{
147+
File: path.Config("app.go"),
148+
Modifiers: []pkgcontracts.GoNodeModifier{
149+
packages.RemoveImportSpec(setup.Module),
150+
packages.RemoveProviderSpec("&DummyName.ServiceProvider{}"),
190151
},
191-
}
192-
193-
if module == "" {
194-
color.Errorln("Package module name is empty, please run command with module name.")
195-
return
196-
}
197-
198-
if len(os.Args) > 1 && os.Args[1] == "install" {
199-
err := pkg.Install(dir)
200-
if err != nil {
201-
color.Errorln(err)
202-
return
203-
}
204-
color.Successf("Package %s installed successfully\n", module)
205-
}
152+
})
206153
207-
if len(os.Args) > 1 && os.Args[1] == "uninstall" {
208-
err := pkg.Uninstall(dir)
209-
if err != nil {
210-
color.Errorln(err)
211-
return
212-
}
213-
color.Successf("Package %s uninstalled successfully\n", module)
214-
}
154+
setup.Execute()
215155
}
216156
217157
`

foundation/console/package_make_command_test.go

+8-38
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,7 @@ func (s *PackageMakeCommandTestSuite) TestExtend() {
4242

4343
if len(got.Flags) > 0 {
4444
s.Run("should have correctly configured StringFlag", func() {
45-
managerFlag, ok := got.Flags[0].(*command.BoolFlag)
46-
if !ok {
47-
s.Fail("First flag is not BoolFlag (got type: %T)", got.Flags[0])
48-
}
49-
50-
rootFlag, ok := got.Flags[1].(*command.StringFlag)
45+
flag, ok := got.Flags[0].(*command.StringFlag)
5146
if !ok {
5247
s.Fail("First flag is not StringFlag (got type: %T)", got.Flags[0])
5348
}
@@ -57,13 +52,10 @@ func (s *PackageMakeCommandTestSuite) TestExtend() {
5752
got interface{}
5853
expected interface{}
5954
}{
60-
{"Name", rootFlag.Name, "root"},
61-
{"Aliases", rootFlag.Aliases, []string{"r"}},
62-
{"Usage", rootFlag.Usage, "The root path of package, default: packages"},
63-
{"Value", rootFlag.Value, "packages"},
64-
{"Name", managerFlag.Name, "manager"},
65-
{"Aliases", managerFlag.Aliases, []string{"m"}},
66-
{"Usage", managerFlag.Usage, "Create a package manager"},
55+
{"Name", flag.Name, "root"},
56+
{"Aliases", flag.Aliases, []string{"r"}},
57+
{"Usage", flag.Usage, "The root path of package, default: packages"},
58+
{"Value", flag.Value, "packages"},
6759
}
6860

6961
for _, tc := range testCases {
@@ -101,32 +93,10 @@ func (s *PackageMakeCommandTestSuite) TestHandle() {
10193
},
10294
},
10395
{
104-
name: "name is sms and use default root(hasn't manager)",
105-
setup: func() {
106-
mockContext.EXPECT().Argument(0).Return("sms").Once()
107-
mockContext.EXPECT().Option("root").Return("packages").Once()
108-
mockContext.EXPECT().OptionBool("manager").Return(false).Once()
109-
mockContext.EXPECT().Success("Package created successfully: packages/sms").Once()
110-
},
111-
assert: func() {
112-
s.NoError(NewPackageMakeCommand().Handle(mockContext))
113-
s.True(file.Exists("packages/sms/README.md"))
114-
s.True(file.Exists("packages/sms/service_provider.go"))
115-
s.True(file.Exists("packages/sms/sms.go"))
116-
s.True(file.Exists("packages/sms/config/sms.go"))
117-
s.True(file.Exists("packages/sms/contracts/sms.go"))
118-
s.True(file.Exists("packages/sms/facades/sms.go"))
119-
s.True(file.Contain("packages/sms/facades/sms.go", "goravel/packages/sms"))
120-
s.True(file.Contain("packages/sms/facades/sms.go", "goravel/packages/sms/contracts"))
121-
s.NoError(file.Remove("packages"))
122-
},
123-
},
124-
{
125-
name: "name is sms and use default root(has manager)",
96+
name: "name is sms and use default root",
12697
setup: func() {
12798
mockContext.EXPECT().Argument(0).Return("sms").Once()
12899
mockContext.EXPECT().Option("root").Return("packages").Once()
129-
mockContext.EXPECT().OptionBool("manager").Return(true).Once()
130100
mockContext.EXPECT().Success("Package created successfully: packages/sms").Once()
131101
},
132102
assert: func() {
@@ -139,7 +109,7 @@ func (s *PackageMakeCommandTestSuite) TestHandle() {
139109
s.True(file.Exists("packages/sms/facades/sms.go"))
140110
s.True(file.Contain("packages/sms/facades/sms.go", "goravel/packages/sms"))
141111
s.True(file.Contain("packages/sms/facades/sms.go", "goravel/packages/sms/contracts"))
142-
s.True(file.Exists("packages/sms/manager/manager.go"))
112+
s.True(file.Exists("packages/sms/setup/setup.go"))
143113
s.NoError(file.Remove("packages"))
144114
},
145115
},
@@ -148,7 +118,6 @@ func (s *PackageMakeCommandTestSuite) TestHandle() {
148118
setup: func() {
149119
mockContext.EXPECT().Argument(0).Return("github.com/goravel/sms-aws").Once()
150120
mockContext.EXPECT().Option("root").Return("package").Once()
151-
mockContext.EXPECT().OptionBool("manager").Return(false).Once()
152121
mockContext.EXPECT().Success("Package created successfully: package/github_com_goravel_sms_aws").Once()
153122
},
154123
assert: func() {
@@ -159,6 +128,7 @@ func (s *PackageMakeCommandTestSuite) TestHandle() {
159128
s.True(file.Exists("package/github_com_goravel_sms_aws/config/github_com_goravel_sms_aws.go"))
160129
s.True(file.Exists("package/github_com_goravel_sms_aws/contracts/github_com_goravel_sms_aws.go"))
161130
s.True(file.Exists("package/github_com_goravel_sms_aws/facades/github_com_goravel_sms_aws.go"))
131+
s.True(file.Exists("package/github_com_goravel_sms_aws/setup/setup.go"))
162132
s.NoError(file.Remove("package"))
163133
},
164134
},

0 commit comments

Comments
 (0)