Skip to content

Commit 1f2ce05

Browse files
authored
Add stringer interface to tree (#2)
* include idea into gitignore * implementing stringer interface to the tree
1 parent b7654a8 commit 1f2ce05

File tree

4 files changed

+68
-4
lines changed

4 files changed

+68
-4
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
.vscode/
44

5+
.idea/
6+
57
vendor/
68

7-
debug
9+
debug

Gopkg.lock

Lines changed: 15 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/main.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,26 @@ func main() {
110110
v, _ := t.Resolve(request)
111111

112112
fmt.Println(v.Name)
113-
// output : Hello dude
113+
114+
fmt.Println(t)
115+
// output: Hello dude
116+
// ╭────╮
117+
// │root│
118+
// ╰──┬─╯
119+
// ╭─────────┴─────────────────────────╮
120+
// ╭────────┴───────╮ ╭────────┴────────╮
121+
// │sayHello eq true│ │sayHello eq false│
122+
// ╰────────┬───────╯ ╰────────┬────────╯
123+
// ╭──────────────────┴┬──────────────────╮ │
124+
//╭─────┴─────╮ ╭─────┴─────╮ ╭────┴───╮ ╭───┴───╮
125+
//│gender eq F│ │gender eq M│ │fallback│ │Goodbye│
126+
//╰─────┬─────╯ ╰─────┬─────╯ ╰────┬───╯ ╰───────╯
127+
// │ ╭─────┴──────╮ │
128+
//╭─────┴────╮ ╭─────┴────╮ ╭────┴────╮ ╭──┴──╮
129+
//│Hello Miss│ │age lte 60│ │age gt 60│ │Hello│
130+
//╰──────────╯ ╰─────┬────╯ ╰────┬────╯ ╰─────╯
131+
// │ │
132+
// ╭─────┴────╮ ╭────┴────╮
133+
// │Hello dude│ │Hello Sir│
134+
// ╰──────────╯ ╰─────────╯
114135
}

tree.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ package dtree
33
import (
44
"context"
55
"encoding/json"
6+
"fmt"
67
"sort"
8+
"strings"
9+
10+
drawer "github.com/m1gwings/treedrawer/tree"
711
)
812

913
// Operator represent a function that will evaluate a node
@@ -17,11 +21,13 @@ type TreeOptions struct {
1721
context context.Context
1822
}
1923

20-
// Tree represent a Tree
24+
// Tree represents a Tree
2125
type Tree struct {
2226
nodes []*Tree
2327
parent *Tree
2428

29+
treeDrawer *drawer.Tree
30+
2531
ctx context.Context
2632

2733
ID int `json:"id"`
@@ -223,3 +229,24 @@ func (t *Tree) resolve(request map[string]interface{}, config *TreeOptions) (*Tr
223229
}
224230
return temp.resolve(request, config)
225231
}
232+
233+
func (t *Tree) String() string {
234+
d := drawer.NewTree(drawer.NodeString(""))
235+
buildDrawerTree(t, d)
236+
return d.String()
237+
}
238+
239+
func buildDrawerTree(t *Tree, d *drawer.Tree) {
240+
d.SetVal(drawer.NodeString(t.ValueToDraw()))
241+
for i := range t.GetChild() {
242+
tChild := d.AddChild(drawer.NodeString(""))
243+
buildDrawerTree(t.GetChild()[i], tChild)
244+
}
245+
}
246+
247+
func (t *Tree) ValueToDraw() string {
248+
if t.Name != "" {
249+
return t.Name
250+
}
251+
return strings.TrimSpace(fmt.Sprintf("%s %s %v", t.Key, t.Operator, t.Value))
252+
}

0 commit comments

Comments
 (0)