summaryrefslogtreecommitdiffstats
path: root/pkg/utils
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2018-09-17 21:11:47 +1000
committerJesse Duffield <jessedduffield@gmail.com>2018-09-17 21:27:53 +1000
commita66ac8092e30f6c3f9a72c10a6b3eed5fb2265eb (patch)
tree4630eef219216cbc87117fe9a69c092884935d6f /pkg/utils
parentbd04ecff6990e13d518596d5922fa82427f08aa4 (diff)
minor refactor
Diffstat (limited to 'pkg/utils')
-rw-r--r--pkg/utils/utils.go56
1 files changed, 40 insertions, 16 deletions
diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go
index f1a56116b..3efa67a91 100644
--- a/pkg/utils/utils.go
+++ b/pkg/utils/utils.go
@@ -141,35 +141,59 @@ func RenderList(slice interface{}) (string, error) {
// each item's string representation on its own line, with appropriate horizontal
// padding between the item's own strings
func renderDisplayableList(items []Displayable) (string, error) {
- displayStrings := make([][]string, len(items))
-
- for i, item := range items {
- displayStrings[i] = item.GetDisplayStrings()
+ if len(items) == 0 {
+ return "", nil
}
- if len(displayStrings) == 0 {
- return "", nil
+ stringArrays := getDisplayStringArrays(items)
+
+ if !displayArraysAligned(stringArrays) {
+ return "", errors.New("Each item must return the same number of strings to display")
}
- // use first element to determine how many times to do this
- padWidths := make([]int, len(displayStrings[0]))
+ padWidths := getPadWidths(stringArrays)
+ paddedDisplayStrings := getPaddedDisplayStrings(stringArrays, padWidths)
+
+ return strings.Join(paddedDisplayStrings, "\n"), nil
+}
+
+func getPadWidths(stringArrays [][]string) []int {
+ padWidths := make([]int, len(stringArrays[0]))
for i, _ := range padWidths {
- for _, strings := range displayStrings {
- if len(strings) != len(padWidths) {
- return "", errors.New("Each item must return the same number of strings to display")
- }
+ for _, strings := range stringArrays {
if len(strings[i]) > padWidths[i] {
padWidths[i] = len(strings[i])
}
}
}
+ return padWidths
+}
- paddedDisplayStrings := make([]string, len(displayStrings))
- for i, strings := range displayStrings {
+func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) []string {
+ paddedDisplayStrings := make([]string, len(stringArrays))
+ for i, stringArray := range stringArrays {
for j, padWidth := range padWidths {
- paddedDisplayStrings[i] += WithPadding(strings[j], padWidth) + " "
+ paddedDisplayStrings[i] += WithPadding(stringArray[j], padWidth) + " "
}
}
+ return paddedDisplayStrings
+}
- return strings.Join(paddedDisplayStrings, "\n"), nil
+// displayArraysAligned returns true if every string array returned from our
+// list of displayables has the same length
+func displayArraysAligned(stringArrays [][]string) bool {
+ for _, strings := range stringArrays {
+ if len(strings) != len(stringArrays[0]) {
+ return false
+ }
+ }
+ return true
+}
+
+func getDisplayStringArrays(displayables []Displayable) [][]string {
+ stringArrays := make([][]string, len(displayables))
+ for i, item := range displayables {
+ stringArrays[i] = item.GetDisplayStrings()
+ }
+ return stringArrays
}