@@ -4,6 +4,7 @@ package inserter
4
4
import (
5
5
"context"
6
6
"log"
7
+ "regexp"
7
8
"strings"
8
9
"time"
9
10
@@ -65,34 +66,59 @@ func (c *CommonInserter) tryParseDate(item map[string]interface{}) map[string]in
65
66
return item
66
67
}
67
68
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
+
68
86
func (c * CommonInserter ) setRefs (item map [string ]interface {}) map [string ]interface {} {
87
+ reg := regexp .MustCompile (`\$\{.*?\}` )
69
88
for k , v := range item {
70
89
switch vt := v .(type ) {
71
90
case map [string ]interface {}:
72
91
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
+ }
75
101
}
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 )
81
106
}
82
- vt [rk ] = vtv
83
- delete (vt , vtk )
84
107
}
85
108
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
+ }
88
117
}
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
94
121
}
95
- item [k ] = rv
96
122
}
97
123
}
98
124
0 commit comments