From d2142d644894381efbe39de928f2c758344e9522 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Wed, 11 Nov 2020 22:49:25 +0100 Subject: [PATCH] Implement value formatters on fields --- compose/service/values/formatter.go | 25 +++++++++++++++++++------ compose/types/module_field.go | 4 +++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/compose/service/values/formatter.go b/compose/service/values/formatter.go index ed181732e..f3799462a 100644 --- a/compose/service/values/formatter.go +++ b/compose/service/values/formatter.go @@ -18,6 +18,10 @@ func Formatter() *formatter { } func (f formatter) Run(m *types.Module, vv types.RecordValueSet) types.RecordValueSet { + var ( + exprParser = parser() + ) + for _, v := range vv { fld := m.Fields.FindByName(v.Name) if fld == nil { @@ -27,12 +31,21 @@ func (f formatter) Run(m *types.Module, vv types.RecordValueSet) types.RecordVal continue } - // Per field type validators - switch strings.ToLower(fld.Kind) { - case "bool": - v = f.fBool(v) - case "datetime": - v = f.fDatetime(v, fld) + if !(fld.Expressions.DisableDefaultFormatters && len(fld.Expressions.Formatters) > 0) { + // Per field type validators + switch strings.ToLower(fld.Kind) { + case "bool": + v = f.fBool(v) + case "datetime": + v = f.fDatetime(v, fld) + } + } + + if len(fld.Expressions.Formatters) > 0 { + for _, expr := range fld.Expressions.Formatters { + rval, _ := exprParser.Evaluate(expr, map[string]interface{}{"value": v.Value}) + v.Value = sanitize(fld, rval) + } } } diff --git a/compose/types/module_field.go b/compose/types/module_field.go index daa83047f..76fdd6cc4 100644 --- a/compose/types/module_field.go +++ b/compose/types/module_field.go @@ -49,7 +49,9 @@ type ( // Test string `json:"test,omitempty"` // Error string `json:"error,omitempty"` //} `json:"validators,omitempty"` - //Formatters []string `json:"formatters,omitempty"` + + Formatters []string `json:"formatters,omitempty"` + DisableDefaultFormatters bool `json:"disableDefaultFormatters,omitempty"` } )