Skip to content

Commit f2894b5

Browse files
committed
feat a common inserter replace patterns
1 parent 0bf2c8f commit f2894b5

File tree

2 files changed

+46
-18
lines changed

2 files changed

+46
-18
lines changed

pkg/inserter/common_inserter.go

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package inserter
44
import (
55
"context"
66
"log"
7+
"regexp"
78
"strings"
89
"time"
910

@@ -65,34 +66,59 @@ func (c *CommonInserter) tryParseDate(item map[string]interface{}) map[string]in
6566
return item
6667
}
6768

69+
func (c *CommonInserter) replaceMultiRefs(src string, reg *regexp.Regexp) string {
70+
ms := reg.FindAllString(src, 10)
71+
if len(ms) == 0 {
72+
return ""
73+
}
74+
for _, m := range ms {
75+
refID := strings.TrimSuffix(strings.TrimPrefix(m, "${"), "}")
76+
rv, ok := c.refIDs[refID]
77+
if !ok {
78+
log.Printf("%s was not found", refID)
79+
return ""
80+
}
81+
src = strings.Replace(src, m, rv, 1)
82+
}
83+
return src
84+
}
85+
6886
func (c *CommonInserter) setRefs(item map[string]interface{}) map[string]interface{} {
87+
reg := regexp.MustCompile(`\$\{.*?\}`)
6988
for k, v := range item {
7089
switch vt := v.(type) {
7190
case map[string]interface{}:
7291
for vtk, vtv := range vt {
73-
if !strings.HasPrefix(vtk, "$") {
74-
continue
92+
if strings.HasPrefix(vtk, "$") && !reg.MatchString(vtk) {
93+
refID := strings.TrimPrefix(vtk, "$")
94+
rk, ok := c.refIDs[refID]
95+
if !ok {
96+
log.Printf("%s was not found", refID)
97+
} else {
98+
vt[rk] = vtv
99+
delete(vt, vtk)
100+
}
75101
}
76-
refID := strings.TrimPrefix(vtk, "$")
77-
rk, ok := c.refIDs[refID]
78-
if !ok {
79-
log.Printf("%s was not found", refID)
80-
continue
102+
nk := c.replaceMultiRefs(vtk, reg)
103+
if nk != "" {
104+
vt[nk] = vtv
105+
delete(vt, vtk)
81106
}
82-
vt[rk] = vtv
83-
delete(vt, vtk)
84107
}
85108
case string:
86-
if !strings.HasPrefix(vt, "$") {
87-
continue
109+
if strings.HasPrefix(vt, "$") && !reg.MatchString(vt) {
110+
refID := strings.TrimPrefix(vt, "$")
111+
rv, ok := c.refIDs[refID]
112+
if !ok {
113+
log.Printf("%s was not found", refID)
114+
} else {
115+
item[k] = rv
116+
}
88117
}
89-
refID := strings.TrimPrefix(vt, "$")
90-
rv, ok := c.refIDs[refID]
91-
if !ok {
92-
log.Printf("%s was not found", refID)
93-
continue
118+
n := c.replaceMultiRefs(vt, reg)
119+
if n != "" {
120+
item[k] = n
94121
}
95-
item[k] = rv
96122
}
97123
}
98124

samples/Survey/dummies.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
"ref": "Foo__dummy_0",
66
"payload": {
77
"defaultOption": "$Option__dummy_0",
8+
"optionsText": "/${Option__dummy_0}/${Option__dummy_0}/",
89
"options": {
910
"$Option__dummy_0": true,
1011
"$Option__dummy_1": true
11-
}
12+
},
13+
"answer": "${Option__dummy_1}"
1214
}
1315
}
1416
]

0 commit comments

Comments
 (0)