@@ -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
@@ -70,34 +71,59 @@ func (c *CommonInserter) tryParseDate(item map[string]interface{}) map[string]in
70
71
return item
71
72
}
72
73
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
+
73
91
func (c * CommonInserter ) setRefs (item map [string ]interface {}) map [string ]interface {} {
92
+ reg := regexp .MustCompile (`\#\{.*?\}` )
74
93
for k , v := range item {
75
94
switch vt := v .(type ) {
76
95
case map [string ]interface {}:
77
96
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
+ }
80
106
}
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 )
86
111
}
87
- vt [rk ] = vtv
88
- delete (vt , vtk )
89
112
}
90
113
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
+ }
93
122
}
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
99
126
}
100
- item [k ] = rv
101
127
}
102
128
}
103
129
0 commit comments