Skip to content

Commit 71b3cc5

Browse files
authored
Merge pull request #21 from /issues/20/main
common inserterに#{}というパターンをリプレイスさせる変更
2 parents 56f9bd7 + 520c45a commit 71b3cc5

File tree

3 files changed

+57
-32
lines changed

3 files changed

+57
-32
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

@@ -70,34 +71,59 @@ func (c *CommonInserter) tryParseDate(item map[string]interface{}) map[string]in
7071
return item
7172
}
7273

74+
func (c *CommonInserter) replaceMultiRefs(src string, reg *regexp.Regexp) string {
75+
ms := reg.FindAllString(src, -1)
76+
if len(ms) == 0 {
77+
return ""
78+
}
79+
for _, m := range ms {
80+
refID := m[2 : len(m)-1]
81+
rv, ok := c.refIDs[refID]
82+
if !ok {
83+
log.Printf("%s was not found", refID)
84+
return ""
85+
}
86+
src = strings.Replace(src, m, rv, 1)
87+
}
88+
return src
89+
}
90+
7391
func (c *CommonInserter) setRefs(item map[string]interface{}) map[string]interface{} {
92+
reg := regexp.MustCompile(`\#\{.*?\}`)
7493
for k, v := range item {
7594
switch vt := v.(type) {
7695
case map[string]interface{}:
7796
for vtk, vtv := range vt {
78-
if !strings.HasPrefix(vtk, "$") {
79-
continue
97+
if strings.HasPrefix(vtk, "$") && !reg.MatchString(vtk) {
98+
refID := strings.TrimPrefix(vtk, "$")
99+
rk, ok := c.refIDs[refID]
100+
if !ok {
101+
log.Printf("%s was not found", refID)
102+
} else {
103+
vt[rk] = vtv
104+
delete(vt, vtk)
105+
}
80106
}
81-
refID := strings.TrimPrefix(vtk, "$")
82-
rk, ok := c.refIDs[refID]
83-
if !ok {
84-
log.Printf("%s was not found", refID)
85-
continue
107+
nk := c.replaceMultiRefs(vtk, reg)
108+
if nk != "" {
109+
vt[nk] = vtv
110+
delete(vt, vtk)
86111
}
87-
vt[rk] = vtv
88-
delete(vt, vtk)
89112
}
90113
case string:
91-
if !strings.HasPrefix(vt, "$") {
92-
continue
114+
if strings.HasPrefix(vt, "$") && !reg.MatchString(vt) {
115+
refID := strings.TrimPrefix(vt, "$")
116+
rv, ok := c.refIDs[refID]
117+
if !ok {
118+
log.Printf("%s was not found", refID)
119+
} else {
120+
item[k] = rv
121+
}
93122
}
94-
refID := strings.TrimPrefix(vt, "$")
95-
rv, ok := c.refIDs[refID]
96-
if !ok {
97-
log.Printf("%s was not found", refID)
98-
continue
123+
n := c.replaceMultiRefs(vt, reg)
124+
if n != "" {
125+
item[k] = n
99126
}
100-
item[k] = rv
101127
}
102128
}
103129

samples/Survey/dummies.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[
2+
{
3+
ref: "Foo__dummy_0",
4+
payload: {
5+
defaultOption: "$Option__dummy_0",
6+
optionsText: "/#{Option__dummy_0}/#{Option__dummy_0}/",
7+
options: {
8+
$Option__dummy_0: true,
9+
$Option__dummy_1: true,
10+
},
11+
answer: "#{Option__dummy_1}",
12+
},
13+
},
14+
];

samples/Survey/dummies.json

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)