@@ -141,7 +141,7 @@ func MakeToPtreeFunc(varStack map[string]string, propMap map[string]string) ToPt
141141 }
142142}
143143
144- func MakeStrOperationFuncMap () map [string ]interface {} {
144+ func MakeStrOperationFuncMap (varStack map [ string ] string ) map [string ]interface {} {
145145 return map [string ]interface {}{
146146 "Atoi" : func (in string ) (out int ) {
147147 var err error
@@ -164,6 +164,14 @@ func MakeStrOperationFuncMap() map[string]interface{} {
164164 out = strings .TrimSpace (in )
165165 return
166166 },
167+ "ToUpper" : func (in string ) (out string ) {
168+ out = strings .ToUpper (in )
169+ return
170+ },
171+ "ToLower" : func (in string ) (out string ) {
172+ out = strings .ToLower (in )
173+ return
174+ },
167175 "FromJson" : func (in string ) (out interface {}) {
168176 bytes := []byte (in )
169177 err := json .Unmarshal (bytes , & out )
@@ -190,5 +198,27 @@ func MakeStrOperationFuncMap() map[string]interface{} {
190198 "NewID" : func () (out string ) {
191199 return uid .New ().String ()
192200 },
201+ "PrefixedOverride" : func (varname , prefix string ) (out string ) {
202+ prefixed , prefixedOk := varStack [prefix + "_" + varname ]
203+ fallback , fallbackOk := varStack [varname ]
204+
205+ // Handle explicit null values
206+ if prefixedOk && (prefixed == "none" || len (strings .TrimSpace (prefixed )) == 0 ) {
207+ prefixedOk = false
208+ }
209+ if fallbackOk && (fallback == "none" || len (strings .TrimSpace (fallback )) == 0 ) {
210+ fallbackOk = false
211+ }
212+
213+ if ! prefixedOk {
214+ if fallbackOk {
215+ return fallback
216+ }
217+ return "" // Neither value exists
218+ }
219+
220+ // prefixedOk is true, fallbackOk we don't know & don't care at this point
221+ return prefixed
222+ },
193223 }
194224}
0 commit comments