Skip to content

Commit d7b67c8

Browse files
Merge pull request #15 from gabrielrobert/feature/refactoring-interfaces
packageHandler interface
2 parents fccae66 + a8c28ab commit d7b67c8

11 files changed

+145
-99
lines changed

actions.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import (
66
"github.com/urfave/cli"
77
)
88

9+
var handlers = []packageHandler{iOSHandler{}, androidHandler{}, uwpHandler{}}
10+
911
// called by executing `xavtool current`
1012
func current(c *cli.Context) error {
11-
allFiles, err := findManifests(getWorkingDir())
13+
allFiles, err := findManifests(getWorkingDir(), handlers)
1214

1315
// validations
1416
if err != nil {
@@ -35,7 +37,7 @@ func current(c *cli.Context) error {
3537

3638
// called by executing `xavtool increment`
3739
func increment(c *cli.Context) error {
38-
allFiles, err := findManifests(getWorkingDir())
40+
allFiles, err := findManifests(getWorkingDir(), handlers)
3941

4042
// validations
4143
if err != nil {
@@ -68,7 +70,7 @@ func increment(c *cli.Context) error {
6870
}
6971

7072
setVersion(file, newVersion)
71-
updatedManifest, err := findManifests(file.Path)
73+
updatedManifest, err := findManifests(file.Path, handlers)
7274

7375
if err != nil {
7476
return cli.NewExitError(err, 5)
@@ -93,7 +95,7 @@ func set(c *cli.Context) error {
9395
return cli.NewExitError(fmt.Sprintf("Version '%v' is not valid", newVersion), 3)
9496
}
9597

96-
allFiles, err := findManifests(getWorkingDir())
98+
allFiles, err := findManifests(getWorkingDir(), handlers)
9799

98100
// validations
99101
if err != nil {
@@ -113,7 +115,7 @@ func set(c *cli.Context) error {
113115
// execute version update
114116
for _, file := range allFiles {
115117
setVersion(file, newVersion)
116-
updatedManifest, err := findManifests(file.Path)
118+
updatedManifest, err := findManifests(file.Path, handlers)
117119

118120
if err != nil {
119121
return cli.NewExitError(err, 7)
@@ -125,11 +127,9 @@ func set(c *cli.Context) error {
125127
}
126128

127129
func setVersion(file packageInfo, version string) {
128-
if isiOsPackage(file.Path) {
129-
changeiOSPackageVersion(file, version)
130-
} else if isAndroidPackage(file.Path) {
131-
changeAndroidPackageVersion(file, version)
132-
} else if isUWPPackage(file.Path) {
133-
changeUWPPackageVersion(file, version)
130+
for _, handler := range handlers {
131+
if handler.isPackage(file.Path) {
132+
handler.changePackageVersion(file, version)
133+
}
134134
}
135135
}

actions_test.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

android_handler.go

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ package main
33
import (
44
"bytes"
55
"encoding/xml"
6+
"errors"
7+
"fmt"
68
"io"
79
"strings"
810

911
"github.com/clbanning/mxj"
1012
)
1113

14+
type androidHandler struct {
15+
}
16+
1217
type androidBundlerHeader struct {
1318
XMLName xml.Name `xml:"manifest"`
1419
Name string `xml:"package,attr"`
@@ -20,46 +25,49 @@ type androidBundlerHeader struct {
2025
Attrs []xml.Attr `xml:",attr"`
2126
}
2227

23-
func isAndroidPackage(filename string) bool {
28+
func (h androidHandler) isPackage(filename string) bool {
2429
return strings.ToLower(getFilename(filename)) == "androidmanifest.xml"
2530
}
2631

27-
func getAndroidPackageInfo(filePath string) packageInfo {
32+
func (h androidHandler) getPackageInfo(filePath string) (packageInfo, error) {
2833
byteValue := readFile(filePath)
29-
data, err := readAndroidData(byteValue)
34+
data, err := h.read(byteValue)
3035

3136
if err != nil {
32-
return packageInfo{Path: filePath, HasError: true}
37+
return packageInfo{Path: filePath, HasError: true}, err
3338
}
3439

3540
return packageInfo{
3641
Name: data.Name,
3742
Version: data.VersionName,
3843
Path: filePath,
39-
}
44+
}, nil
4045
}
4146

42-
func readAndroidData(data []byte) (*androidBundlerHeader, error) {
47+
func (h androidHandler) read(data []byte) (*androidBundlerHeader, error) {
4348
var header androidBundlerHeader
4449
err := xml.Unmarshal(data, &header)
4550
return &header, err
4651
}
4752

48-
func changeAndroidPackageVersion(file packageInfo, newVersion string) error {
53+
func (h androidHandler) changePackageVersion(file packageInfo, newVersion string) error {
4954
fileBytes := readFile(file.Path)
50-
processedBytes := applyVersionToAndroidXML(fileBytes, newVersion)
55+
processedBytes, err := h.applyVersion(fileBytes, newVersion)
56+
if err != nil {
57+
return fmt.Errorf("Invalid xml file: %v", file.Path)
58+
}
5159
saveFile(file.Path, processedBytes)
5260
return nil
5361
}
5462

55-
func applyVersionToAndroidXML(data []byte, newVersion string) []byte {
56-
fileReader := bytes.NewReader(data)
63+
func (h androidHandler) applyVersion(byteValue []byte, newVersion string) ([]byte, error) {
64+
fileReader := bytes.NewReader(byteValue)
5765
for m, err := mxj.NewMapXmlSeqReader(fileReader); m != nil || err != io.EOF; m, err = mxj.NewMapXmlSeqReader(fileReader) {
5866
if err != nil {
5967
if err == mxj.NO_ROOT {
6068
continue
6169
} else {
62-
check(err)
70+
return nil, errors.New("Invalid xml")
6371
}
6472
}
6573
vmap := m["manifest"].(map[string]interface{})
@@ -82,8 +90,8 @@ func applyVersionToAndroidXML(data []byte, newVersion string) []byte {
8290

8391
// Write header
8492
header := `<?xml version="1.0" encoding="utf-8"?>` + "\n"
85-
return []byte(header + string(b))
93+
return []byte(header + string(b)), nil
8694
}
8795

88-
return nil
96+
return nil, nil
8997
}

android_handler_test.go

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/stretchr/testify/require"
88
)
99

10-
func Test_isAndroidPackage(t *testing.T) {
10+
func Test_androidHandler_isPackage(t *testing.T) {
1111
type args struct {
1212
filename string
1313
}
@@ -23,39 +23,47 @@ func Test_isAndroidPackage(t *testing.T) {
2323
}
2424
for _, tt := range tests {
2525
t.Run(tt.name, func(t *testing.T) {
26-
if got := isAndroidPackage(tt.args.filename); got != tt.want {
26+
handler := new(androidHandler)
27+
if got := handler.isPackage(tt.args.filename); got != tt.want {
2728
t.Errorf("isAndroidPackage() = %v, want %v", got, tt.want)
2829
}
2930
})
3031
}
3132
}
3233

33-
func Test_getAndroidPackageInfo(t *testing.T) {
34-
currentVersion := getAndroidPackageInfo(filePath)
34+
func Test_androidHandler_getPackageInfo(t *testing.T) {
35+
handler := new(androidHandler)
36+
currentVersion, err := handler.getPackageInfo(filePath)
37+
require.NoError(t, err)
3538
if currentVersion.Version != "1.0.1" {
3639
t.Errorf("version mismatch; actual %v, expected %v", currentVersion, "1.0.1")
3740
}
3841
}
3942

40-
func Test_changeAndroidPackageVersion(t *testing.T) {
41-
currentVersion := getAndroidPackageInfo(filePath)
43+
func Test_androidHandler_changePackageVersion(t *testing.T) {
44+
handler := new(androidHandler)
45+
currentVersion, err := handler.getPackageInfo(filePath)
46+
require.NoError(t, err)
4247
if currentVersion.Version != "1.0.1" {
4348
t.Errorf("version mismatch; actual %v, expected %v", currentVersion, "1.0.1")
4449
}
4550

46-
changeAndroidPackageVersion(currentVersion, "1.0.2")
47-
currentVersion = getAndroidPackageInfo(filePath)
51+
handler.changePackageVersion(currentVersion, "1.0.2")
52+
currentVersion, err = handler.getPackageInfo(filePath)
53+
require.NoError(t, err)
4854
if currentVersion.Version != "1.0.2" {
4955
t.Errorf("version mismatch; actual %v, expected %v", currentVersion, "1.0.2")
5056
}
5157

5258
// some kind of rollback
53-
changeAndroidPackageVersion(currentVersion, "1.0.1")
59+
handler.changePackageVersion(currentVersion, "1.0.1")
5460
}
5561

56-
func Test_applyVersionToAndroidXML(t *testing.T) {
57-
processedBytes := applyVersionToAndroidXML(androidSeed, "1.0.2")
58-
xml, _ := readAndroidData(processedBytes)
62+
func Test_androidHandler_applyVersion(t *testing.T) {
63+
handler := new(androidHandler)
64+
processedBytes, err := handler.applyVersion(androidSeed, "1.0.2")
65+
require.NoError(t, err)
66+
xml, _ := handler.read(processedBytes)
5967
if xml.VersionName != "1.0.2" {
6068
t.Errorf("VersionName mismatch; expected %v", "1.0.2")
6169
}
@@ -64,7 +72,7 @@ func Test_applyVersionToAndroidXML(t *testing.T) {
6472
}
6573
}
6674

67-
func Test_readAndroidData(t *testing.T) {
75+
func Test_androidHandler_read(t *testing.T) {
6876
type args struct {
6977
data []byte
7078
}
@@ -80,7 +88,8 @@ func Test_readAndroidData(t *testing.T) {
8088
}
8189
for _, tt := range tests {
8290
t.Run(tt.name, func(t *testing.T) {
83-
got, err := readAndroidData(tt.args.data)
91+
handler := new(androidHandler)
92+
got, err := handler.read(tt.args.data)
8493
if tt.shouldError {
8594
require.Error(t, err)
8695
return

finders.go

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type packageInfo struct {
1414
HasError bool
1515
}
1616

17-
func findManifests(root string) ([]packageInfo, error) {
17+
func findManifests(root string, handlers []packageHandler) ([]packageInfo, error) {
1818
var result error
1919
fileList := []packageInfo{}
2020

@@ -24,16 +24,14 @@ func findManifests(root string) ([]packageInfo, error) {
2424
return filepath.SkipDir
2525
}
2626

27-
if isiOsPackage(f.Name()) {
28-
pkg, err := getiOSPackageInfo(path)
29-
fileList = append(fileList, pkg)
30-
if err != nil {
31-
result = multierror.Append(result, err)
27+
for _, handler := range handlers {
28+
if handler.isPackage(path) {
29+
pkg, err := handler.getPackageInfo(path)
30+
fileList = append(fileList, pkg)
31+
if err != nil {
32+
result = multierror.Append(result, err)
33+
}
3234
}
33-
} else if isAndroidPackage(f.Name()) {
34-
fileList = append(fileList, getAndroidPackageInfo(path))
35-
} else if isUWPPackage(f.Name()) {
36-
fileList = append(fileList, getUWPPackageInfo(path))
3735
}
3836

3937
return nil

finders_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ func Test_FindManifests(t *testing.T) {
1010
dir, err := os.Getwd()
1111
check(err)
1212

13-
foundFiles, err := findManifests(dir)
13+
foundFiles, err := findManifests(dir, []packageHandler{iOSHandler{}, androidHandler{}, uwpHandler{}})
1414
if foundFiles == nil || len(foundFiles) == 0 {
1515
t.Errorf("at least one file should be found")
1616
}

ios_handler.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ import (
1111
multierror "github.com/hashicorp/go-multierror"
1212
)
1313

14-
func isiOsPackage(filename string) bool {
14+
type iOSHandler struct {
15+
}
16+
17+
func (h iOSHandler) isPackage(filename string) bool {
1518
return strings.ToLower(getFilename(filename)) == "info.plist"
1619
}
1720

18-
func getiOSPackageInfo(filePath string) (packageInfo, error) {
21+
func (h iOSHandler) getPackageInfo(filePath string) (packageInfo, error) {
1922
byteValue := readFile(filePath)
20-
data, err := readiOSData(byteValue)
23+
data, err := h.read(byteValue)
2124

2225
if err != nil {
2326
return packageInfo{Path: filePath, HasError: true}, err
@@ -30,7 +33,7 @@ func getiOSPackageInfo(filePath string) (packageInfo, error) {
3033
}, nil
3134
}
3235

33-
func readiOSData(data []byte) (map[string]interface{}, error) {
36+
func (h iOSHandler) read(data []byte) (map[string]interface{}, error) {
3437
var result error
3538

3639
buffer := bytes.NewReader(data)
@@ -57,18 +60,18 @@ func readiOSData(data []byte) (map[string]interface{}, error) {
5760
return decodeInterface, result
5861
}
5962

60-
func changeiOSPackageVersion(file packageInfo, newVersion string) error {
63+
func (h iOSHandler) changePackageVersion(file packageInfo, newVersion string) error {
6164
// open file with all data
6265
byteValue := readFile(file.Path)
63-
processedBytes, err := applyVersionToiOSPlist(byteValue, newVersion)
66+
processedBytes, err := h.applyVersion(byteValue, newVersion)
6467
if err != nil {
6568
return fmt.Errorf("Invalid plist file: %v", file.Path)
6669
}
6770
saveFile(file.Path, processedBytes)
6871
return nil
6972
}
7073

71-
func applyVersionToiOSPlist(byteValue []byte, newVersion string) ([]byte, error) {
74+
func (h iOSHandler) applyVersion(byteValue []byte, newVersion string) ([]byte, error) {
7275
buffer := bytes.NewReader(byteValue)
7376
decoder := plist.NewDecoder(buffer)
7477
var data = map[string]interface{}{}

0 commit comments

Comments
 (0)