github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/notify/email_template.go (about)

     1  package notify
     2  
     3  import (
     4  	"bytes"
     5  	"path/filepath"
     6  
     7  	"github.com/evergreen-ci/evergreen"
     8  	"github.com/evergreen-ci/evergreen/web"
     9  	"github.com/pkg/errors"
    10  )
    11  
    12  const (
    13  	TemplatePath = "notify/templates"
    14  	BaseTemplate = "layout.html"
    15  )
    16  
    17  func createEnvironment(settings *evergreen.Settings, globals map[string]interface{}) (*web.App, error) {
    18  	home := evergreen.FindEvergreenHome()
    19  	templateHome := filepath.Join(home, TemplatePath)
    20  
    21  	funcs, err := web.MakeCommonFunctionMap(settings)
    22  	if err != nil {
    23  		return nil, errors.Wrap(err, "error creating templating functions")
    24  	}
    25  	// Overwrite globals
    26  	funcs["Global"] = func(input string) interface{} {
    27  		return globals[input]
    28  	}
    29  
    30  	app := web.NewApp()
    31  	app.TemplateFuncs = funcs
    32  	app.TemplateFolder = templateHome
    33  	app.CacheTemplates = true
    34  	return app, nil
    35  }
    36  
    37  func TemplateEmailBody(ae *web.App, name string, data interface{}) (string, error) {
    38  	templateResponse, ok := ae.RespondTemplate(
    39  		[]string{name, "email_layout_base.html"},
    40  		"base",
    41  		data).(*web.TemplateResponse)
    42  
    43  	if !ok {
    44  		return "", errors.Errorf("problem converting template response for %s with data type %T",
    45  			name, data)
    46  	}
    47  
    48  	var buf bytes.Buffer
    49  
    50  	err := templateResponse.TemplateSet.ExecuteTemplate(&buf, templateResponse.TemplateName,
    51  		templateResponse.Data)
    52  
    53  	if err != nil {
    54  		return "", errors.WithStack(err)
    55  	}
    56  
    57  	return buf.String(), nil
    58  }