1
+ # Stateless Transformer
2
+ plus_one = Transformer . new ( :numbers , & ( & 1 + 1 ) )
3
+ plus_one = Transformer . start ( plus_one )
4
+ flow = % { numbers: [ 1 , 2 , 3 , 4 ] }
5
+ new_flow = Transformer . call ( flow , plus_one )
6
+ new_flow [ :numbers ] |> Enum . to_list ( )
7
+
8
+ # Stateful Transformer
9
+ sum_pairs = Transformer . new (
10
+ :numbers ,
11
+ fn event , acc ->
12
+ case acc do
13
+ nil ->
14
+ { [ ] , event }
15
+ number ->
16
+ { [ number + event ] , nil }
17
+ end
18
+ end
19
+ ) |> Transformer . start ( )
20
+
21
+ new_flow = flow |> Transformer . call ( plus_one ) |> Transformer . call ( sum_pairs )
22
+ new_flow [ :numbers ] |> Enum . to_list ( )
23
+
24
+ # Mixer
25
+ flow = % { num1: [ 1 , 2 , 3 ] , num2: [ 4 , 5 , 6 ] }
26
+ mixer = Mixer . new ( [ :num1 , :num2 ] , :numbers ) |> Mixer . start ( )
27
+ new_flow = flow |> Mixer . call ( mixer ) |> Transformer . call ( plus_one )
28
+ new_flow [ :numbers ] |> Enum . to_list ( )
29
+
30
+ # Composite
31
+ plus_one = Transformer . new ( :numbers , & ( & 1 + 1 ) )
32
+ mixer = Mixer . new ( [ :num1 , :num2 ] , :numbers )
33
+ composite = Composite . new ( [ mixer , plus_one ] ) |> Composite . start ( )
34
+ flow = % { num1: [ 1 , 2 , 3 ] , num2: [ 4 , 5 , 6 ] }
35
+ new_flow = flow |> Composite . call ( composite )
36
+ new_flow [ :numbers ] |> Enum . to_list ( )
37
+
38
+ # Complex composite
39
+ plus_one = Transformer . new ( :numbers , & ( & 1 + 1 ) )
40
+ mixer = Mixer . new ( [ :num1 , :num2 ] , :numbers )
41
+ composite1 = Composite . new ( [ mixer , plus_one ] )
42
+
43
+ sum_pairs = Transformer . new (
44
+ :numbers ,
45
+ fn event , acc ->
46
+ case acc do
47
+ nil ->
48
+ { [ ] , event }
49
+ number ->
50
+ { [ number + event ] , nil }
51
+ end
52
+ end
53
+ )
54
+
55
+ composite2 = Composite . new ( [ sum_pairs ] )
56
+
57
+ composite = Composite . new ( [ composite1 , composite2 ] ) |> Composite . start ( )
58
+
59
+ flow = % { num1: [ 1 , 2 , 3 ] , num2: [ 4 , 5 , 6 ] }
60
+ new_flow = flow |> Composite . call ( composite )
61
+ new_flow [ :numbers ] |> Enum . to_list ( )
0 commit comments