|
|
@ -19,6 +19,7 @@ package engine
|
|
|
|
import (
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"log"
|
|
|
|
"path"
|
|
|
|
"path"
|
|
|
|
"sort"
|
|
|
|
"sort"
|
|
|
|
"strings"
|
|
|
|
"strings"
|
|
|
@ -39,6 +40,8 @@ type Engine struct {
|
|
|
|
// a value that was not passed in.
|
|
|
|
// a value that was not passed in.
|
|
|
|
Strict bool
|
|
|
|
Strict bool
|
|
|
|
CurrentTemplates map[string]renderable
|
|
|
|
CurrentTemplates map[string]renderable
|
|
|
|
|
|
|
|
// In LintMode, some 'required' template values may be missing, so don't fail
|
|
|
|
|
|
|
|
LintMode bool
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// New creates a new Go template Engine instance.
|
|
|
|
// New creates a new Go template Engine instance.
|
|
|
@ -155,9 +158,19 @@ func (e *Engine) alterFuncMap(t *template.Template) template.FuncMap {
|
|
|
|
// Add the 'required' function here
|
|
|
|
// Add the 'required' function here
|
|
|
|
funcMap["required"] = func(warn string, val interface{}) (interface{}, error) {
|
|
|
|
funcMap["required"] = func(warn string, val interface{}) (interface{}, error) {
|
|
|
|
if val == nil {
|
|
|
|
if val == nil {
|
|
|
|
|
|
|
|
if e.LintMode {
|
|
|
|
|
|
|
|
// Don't fail on missing required values when linting
|
|
|
|
|
|
|
|
log.Printf("[INFO] Missing required value: %s", warn)
|
|
|
|
|
|
|
|
return val, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
return val, fmt.Errorf(warn)
|
|
|
|
return val, fmt.Errorf(warn)
|
|
|
|
} else if _, ok := val.(string); ok {
|
|
|
|
} else if _, ok := val.(string); ok {
|
|
|
|
if val == "" {
|
|
|
|
if val == "" {
|
|
|
|
|
|
|
|
if e.LintMode {
|
|
|
|
|
|
|
|
// Don't fail on missing required values when linting
|
|
|
|
|
|
|
|
log.Printf("[INFO] Missing required value: %s", warn)
|
|
|
|
|
|
|
|
return val, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
return val, fmt.Errorf(warn)
|
|
|
|
return val, fmt.Errorf(warn)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|