-
Notifications
You must be signed in to change notification settings - Fork 2
/
pair.go
114 lines (103 loc) · 3.26 KB
/
pair.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package git
import (
"errors"
"fmt"
"strings"
"github.com/fr3dch3n/commit/input"
log "github.com/sirupsen/logrus"
)
// GetPair tries to get the current pairing-partner from the user-input.
func GetPair(commitConfig input.CommitConfig, currentPair []string, teamMembers []input.TeamMember) ([]input.TeamMember, error) {
var pairAbbreviation string
var err error
if len(currentPair) == 0 {
pairAbbreviation, err = input.Get("Current pairing partner (separate by [,| ])")
} else {
pairAbbreviation, err = input.GetWithDefault("Current pairing partner (separate by [,| ])", strings.Join(currentPair, ","))
}
if err != nil {
return []input.TeamMember{}, err
}
log.Debug("PairAbbreviation: " + pairAbbreviation)
cutAbbrevs := SeparateAbbreviation(pairAbbreviation)
log.Debugf("cutAbbrevs: %v", cutAbbrevs)
if len(cutAbbrevs) == 0 {
return []input.TeamMember{}, nil
}
var pair []input.TeamMember
for _, abbrev := range cutAbbrevs {
member, err := GetTeamMemberByAbbreviation(teamMembers, abbrev)
if err != nil && err.Error() == "not-found" {
newMember, err := GetAndSaveNewTeamMember(commitConfig.TeamMembersConfigPath, abbrev, teamMembers)
if err != nil {
log.Debug("GetAndSaveNewTeamMember: ", err)
continue
}
pair = append(pair, newMember)
} else if err != nil {
log.Debug("GetTeamMemberByAbbreviation: ", err)
continue
} else {
pair = append(pair, member)
}
}
return pair, nil
}
// SeparateAbbreviation takes a string and splits it by [,| ] and returns a list of existing strings
func SeparateAbbreviation(input string) []string {
var result []string
splitByComma := strings.Split(input, ",")
for _, x := range splitByComma {
splitByWhiteSpace := strings.Split(x, " ")
for _, y := range splitByWhiteSpace {
splitByPipe := strings.Split(y, "|")
for _, z := range splitByPipe {
if z != "" && len(z) > 1 {
result = append(result, z)
}
}
}
}
return result
}
// GetTeamMemberByAbbreviation makes a lookup for a team-member by the abbreviation.
func GetTeamMemberByAbbreviation(tms []input.TeamMember, abbreviation string) (input.TeamMember, error) {
var found input.TeamMember
for _, tm := range tms {
if tm.Abbreviation == abbreviation {
found = tm
}
}
if (input.TeamMember{}) == found {
return input.TeamMember{}, errors.New("not-found")
}
return found, nil
}
// GetAndSaveNewTeamMember runs GetNewTeamMemberFromInput and then saves the result in the team-members file.
func GetAndSaveNewTeamMember(path string, abbreviation string, tms []input.TeamMember) (input.TeamMember, error) {
newMember, err := getNewTeamMemberFromInput(abbreviation)
if err != nil {
return input.TeamMember{}, err
}
err = input.WriteTeamMembersConfig(path, append(tms, newMember))
if err != nil {
return input.TeamMember{}, err
}
return newMember, nil
}
func getNewTeamMemberFromInput(abbreviation string) (input.TeamMember, error) {
fmt.Println("Creating team-member with abbreviation " + abbreviation)
username, err := input.GetNonEmpty("Enter username")
if err != nil {
return input.TeamMember{}, nil
}
mail, err := input.GetNonEmpty("Enter mail")
if err != nil {
return input.TeamMember{}, nil
}
return input.TeamMember{
GithubUserName: username,
Email: mail,
Abbreviation: abbreviation,
}, nil
}