-
Notifications
You must be signed in to change notification settings - Fork 1
/
example_test.go
109 lines (86 loc) · 2.55 KB
/
example_test.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
package workflow_test
import (
"context"
"fmt"
"strings"
"github.com/silviutanasa/workflow"
)
func ExampleSequential_Execute() {
// because it also implements the SequentialStep interface, the workflow can also be a step from another workflow.
stepsCfgEmb := []workflow.SequentialStepConfig[any]{
{Step: &sequentialStepAbstract{name: "get-raw-data-from-db"}},
{Step: &sequentialStepAbstract{name: "transform-raw-data-into-models"}},
}
extractDataWorkflow := workflow.NewSequential("extract-data", stepsCfgEmb, nil)
stepsCfg := []workflow.SequentialStepConfig[any]{
{Step: extractDataWorkflow},
{Step: &sequentialStepAbstract{name: "transform-data"}},
{Step: &sequentialStepAbstract{name: "load-data"}},
}
wf := workflow.NewSequential("ETL", stepsCfg, nil)
wf.Execute(context.TODO(), nil)
// Output:
//running: get-raw-data-from-db
//running: transform-raw-data-into-models
//running: transform-data
//running: load-data
}
func ExamplePipe_Execute() {
stepsCfg := []workflow.PipeStepConfig[string]{
{Step: &trimSpaces{name: "trim-spaces"}},
{Step: &removeCommas{name: "remove-commas"}},
{Step: &removeDots{name: "remove-dots"}},
{Step: &transformToUppercase{name: "transform-to-upper"}},
}
wf := workflow.NewPipe("ETL", stepsCfg, nil)
output, _ := wf.Execute(context.TODO(), " I. am. the, string. to be transformed, , ")
fmt.Print(output)
// Output:
//I AM THE STRING TO BE TRANSFORMED
}
type sequentialStepAbstract struct {
name string
}
func (s *sequentialStepAbstract) Name() string {
return s.name
}
func (s *sequentialStepAbstract) Execute(ctx context.Context, request any) error {
fmt.Printf("\nrunning: %v", s.name)
return nil
}
type trimSpaces struct {
name string
}
func (s *trimSpaces) Name() string {
return s.name
}
func (s *trimSpaces) Execute(ctx context.Context, req string) (string, error) {
return strings.TrimSpace(req), nil
}
type transformToUppercase struct {
name string
}
func (s *transformToUppercase) Name() string {
return s.name
}
func (s *transformToUppercase) Execute(ctx context.Context, req string) (string, error) {
return strings.ToUpper(req), nil
}
type removeCommas struct {
name string
}
func (s *removeCommas) Name() string {
return s.name
}
func (s *removeCommas) Execute(ctx context.Context, req string) (string, error) {
return strings.ReplaceAll(req, ",", ""), nil
}
type removeDots struct {
name string
}
func (s *removeDots) Name() string {
return s.name
}
func (s *removeDots) Execute(ctx context.Context, req string) (string, error) {
return strings.ReplaceAll(req, ".", ""), nil
}