Skip to content

Commit 9abf0db

Browse files
committed
Merge branch 'refs/heads/develop'
2 parents 5276d95 + 33f3ed9 commit 9abf0db

File tree

13 files changed

+204
-33
lines changed

13 files changed

+204
-33
lines changed

.github/workflows/go.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
name: Go
22

33
on:
4+
pull_request:
45
push:
5-
branches: [ develop ]
6+
branches: [ master ]
67

78
jobs:
89

README.md

+8-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@
55
[![Go](https://github.com/GeekTree0101/clean-swift-scaffold/actions/workflows/go.yml/badge.svg?branch=develop)](https://github.com/GeekTree0101/clean-swift-scaffold/actions/workflows/go.yml)
66

77

8-
### Basic Usage
8+
## Overview
99

10+
#### Run
1011
<img height=300pt src="https://github.com/GeekTree0101/clean-swift-scaffold/blob/develop/res/example.png" />
1112

13+
#### Output
14+
<img height=300pt src="https://github.com/GeekTree0101/clean-swift-scaffold/blob/develop/res/output.png" />
15+
16+
## Basic Usage
17+
1218
#### make config.yaml
1319
```yaml
1420
target_project_name: Miro // target project name
@@ -54,4 +60,4 @@ flag list
5460
```
5561

5662
- Please set the name and directory of the configuration file freely. Instead, please enter the correct path on -c/--config flag.
57-
- Default values of source & test directoly flag follow the configuration file.
63+
- Default values of source & test directoly flag follow the configuration file.

internal/converter/copyright.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package converter
2+
3+
import (
4+
"os/exec"
5+
"os/user"
6+
"strings"
7+
)
8+
9+
type Copyright interface {
10+
Get() (string, error)
11+
}
12+
13+
type CopyrightImpl struct {
14+
}
15+
16+
func (c CopyrightImpl) Get() (string, error) {
17+
18+
gitUsername, err := c.getGitUsername()
19+
20+
if err == nil {
21+
return gitUsername, nil
22+
}
23+
24+
user, err := user.Current()
25+
26+
if err == nil {
27+
return user.Username, nil
28+
}
29+
30+
return "", err
31+
}
32+
33+
func (c CopyrightImpl) getGitUsername() (string, error) {
34+
35+
gitCmd := exec.Command("git", "config", "--global", "user.name")
36+
nameBytes, err := gitCmd.Output()
37+
38+
if err == nil && len(nameBytes) > 0 {
39+
return strings.Trim(string(nameBytes), "\n"), nil
40+
}
41+
42+
return "", err
43+
}

internal/converter/copyright_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package converter_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/Geektree0101/clean-swift-scaffold/internal/converter"
7+
)
8+
9+
// MARK: - Test Double
10+
11+
type CopyrightStub struct {
12+
GetSuccessStub string
13+
GetErrorStub error
14+
}
15+
16+
func (c CopyrightStub) Get() (string, error) {
17+
18+
return c.GetSuccessStub, c.GetErrorStub
19+
}
20+
21+
// MARK: - Test Case
22+
23+
func TestCopyright(t *testing.T) {
24+
25+
t.Run("get copyright", func(t *testing.T) {
26+
// given
27+
sut := converter.CopyrightImpl{}
28+
29+
// when
30+
out, err := sut.Get()
31+
32+
// then
33+
if err != nil {
34+
t.Error(err)
35+
}
36+
37+
if len(out) == 0 {
38+
t.Errorf("output should be longer than 0, output: %s", out)
39+
}
40+
})
41+
}

internal/converter/header.go

+16-7
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,22 @@ import (
1010
)
1111

1212
type HeaderConverter struct {
13-
targetProjectName string
14-
copyright string
15-
date time.Time
13+
copyright Copyright
14+
targetProjectName string
15+
copyrightDefaultValue string
16+
date time.Time
1617
}
1718

1819
func NewHeaderConverter(
20+
copyright Copyright,
1921
config *model.Config,
2022
date time.Time) *HeaderConverter {
2123

2224
return &HeaderConverter{
23-
targetProjectName: config.TargetProjectName,
24-
copyright: config.Copyright,
25-
date: date,
25+
copyright: copyright,
26+
targetProjectName: config.TargetProjectName,
27+
copyrightDefaultValue: config.Copyright,
28+
date: date,
2629
}
2730
}
2831

@@ -34,12 +37,18 @@ func (header *HeaderConverter) Render(source string, sceneName string) string {
3437

3538
dateStr := fmt.Sprintf("%d/%d/%d", day, month, year)
3639

40+
copyright, err := header.copyright.Get()
41+
42+
if err != nil {
43+
copyright = header.copyrightDefaultValue
44+
}
45+
3746
var replacedSource string = source
3847
replacedSource = strings.ReplaceAll(replacedSource, "__SCENE_NAME__", sceneName)
3948
replacedSource = strings.ReplaceAll(replacedSource, "__TARGET_PROJECT_NAME__", header.targetProjectName)
4049
replacedSource = strings.ReplaceAll(replacedSource, "__DATE__", dateStr)
4150
replacedSource = strings.ReplaceAll(replacedSource, "__YEAR__", strconv.Itoa(year))
42-
replacedSource = strings.ReplaceAll(replacedSource, "__COPYRIGHT__", header.copyright)
51+
replacedSource = strings.ReplaceAll(replacedSource, "__COPYRIGHT__", copyright)
4352

4453
return replacedSource
4554
}

internal/converter/header_test.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,19 @@ func TestHeader(t *testing.T) {
4040
// given
4141
config := model.Config{
4242
TargetProjectName: "Miro",
43-
Copyright: "Geektree0101",
43+
Copyright: "David Ha",
4444
TemplatePath: "",
4545
}
4646

4747
date := time.Date(2020, 10, 12, 0, 0, 0, 0, time.UTC)
48-
sut := converter.NewHeaderConverter(&config, date)
48+
sut := converter.NewHeaderConverter(
49+
CopyrightStub{
50+
GetSuccessStub: "Geektree0101",
51+
GetErrorStub: nil,
52+
},
53+
&config,
54+
date,
55+
)
4956

5057
usecaseName := "ArticleDetail"
5158

internal/converter/source_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@ func createSource() *converter.SourceConverter {
1515

1616
config := &model.Config{
1717
TargetProjectName: "Miro",
18-
Copyright: "Geektree0101",
18+
Copyright: "David Ha",
1919
TemplatePath: "../../templates",
2020
SourceDir: "./Playground/Sources",
2121
TestDir: "./Playground/Tests",
2222
Indentation: 2,
2323
}
2424

2525
header := converter.NewHeaderConverter(
26+
CopyrightStub{
27+
GetSuccessStub: "Geektree0101",
28+
GetErrorStub: nil,
29+
},
2630
config,
2731
date,
2832
)

internal/gen/generator.go

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ func (gen *Generator) Run() error {
4848
gen.flag.Name,
4949
strings.Split(gen.flag.UsecasesString, ","),
5050
converter.NewHeaderConverter(
51+
converter.CopyrightImpl{},
5152
config,
5253
today,
5354
),

res/example.png

39.4 KB
Loading

res/output.png

924 KB
Loading

runner.go

+77-18
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,19 @@ func NewRunnerCommand(use string) *cobra.Command {
4141
Short: "generate source & unit tests files",
4242
Run: func(cmd *cobra.Command, args []string) {
4343

44-
fmt.Printf("\033[32m%s\033[0m\n", logo)
45-
4644
if len(name) == 0 {
4745
fmt.Println("[Error] invalid usecase name\033[0m")
4846
return
4947
}
5048

51-
gen := gen.NewGenerator(
52-
gen.Genflag{
53-
Name: name,
54-
UsecasesString: usecasesString,
55-
SourceDir: sourceDir,
56-
TestDir: testDir,
57-
ConfigFilePath: configFilePath,
58-
},
49+
run(
50+
name,
51+
usecasesString,
52+
sourceDir,
53+
testDir,
54+
configFilePath,
5955
)
6056

61-
err := gen.Run()
62-
63-
if err != nil {
64-
fmt.Printf("\033[31m[Error] failed to generate: %s\n\033[0m", err.Error())
65-
} else {
66-
fmt.Printf("\033[32m[Log] Done!\n\n\033[0m")
67-
}
68-
6957
},
7058
}
7159

@@ -78,3 +66,74 @@ func NewRunnerCommand(use string) *cobra.Command {
7866

7967
return genCmd
8068
}
69+
70+
// Procedural runner command
71+
// name: the prefix of the scene/screen
72+
// usecases
73+
// config path
74+
func NewProceduralRunnerCommand(use string) *cobra.Command {
75+
76+
var name string
77+
var usecasesString string
78+
var configFilePath string
79+
80+
genCmd := &cobra.Command{
81+
Use: use,
82+
Short: "generate source & unit tests files",
83+
Run: func(cmd *cobra.Command, args []string) {
84+
85+
fmt.Println("Please enter the prefix of the scene/screen.")
86+
fmt.Println("example: ArticleDetail or ChatList or UserList and so on")
87+
fmt.Print("insert: ")
88+
fmt.Scanln(&name)
89+
90+
fmt.Println("\nPlease enter usecases")
91+
fmt.Println("example: Fetch,Delete,Update")
92+
fmt.Print("insert: ")
93+
fmt.Scanln(&usecasesString)
94+
95+
fmt.Println("\nPlease enter the config file")
96+
fmt.Println("example: ./some_path/some_config.yaml")
97+
fmt.Print("insert: ")
98+
fmt.Scanln(&configFilePath)
99+
100+
run(
101+
name,
102+
usecasesString,
103+
"", // unused
104+
"", // unused
105+
configFilePath,
106+
)
107+
},
108+
}
109+
return genCmd
110+
}
111+
112+
func run(
113+
name string,
114+
usecasesString string,
115+
sourceDir string,
116+
testDir string,
117+
configFilePath string,
118+
) {
119+
120+
fmt.Printf("\033[32m%s\033[0m\n", logo)
121+
122+
gen := gen.NewGenerator(
123+
gen.Genflag{
124+
Name: name,
125+
UsecasesString: usecasesString,
126+
SourceDir: sourceDir,
127+
TestDir: testDir,
128+
ConfigFilePath: configFilePath,
129+
},
130+
)
131+
132+
err := gen.Run()
133+
134+
if err != nil {
135+
fmt.Printf("\033[31m[Error] failed to generate: %s\n\033[0m", err.Error())
136+
} else {
137+
fmt.Printf("\033[32m[Log] Done!\n\n\033[0m")
138+
}
139+
}

templates/test/Presenter.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ final class __SCENE_NAME__PresenterTests: XCTestCase {
2727
override func setUp() {
2828
self.presenter = __SCENE_NAME__Presenter()
2929
self.display = __SCENE_NAME__DisplaySpy()
30-
self.presenter.view = self.display
30+
self.presenter.viewController = self.display
3131
}
3232
}
3333

test/ArticleDetailPresenterTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ final class ArticleDetailPresenterTests: XCTestCase {
3737
override func setUp() {
3838
self.presenter = ArticleDetailPresenter()
3939
self.display = ArticleDetailDisplaySpy()
40-
self.presenter.view = self.display
40+
self.presenter.viewController = self.display
4141
}
4242
}
4343

0 commit comments

Comments
 (0)