diff --git a/boilingcore/boilingcore.go b/boilingcore/boilingcore.go index cf8eb95..a86e403 100644 --- a/boilingcore/boilingcore.go +++ b/boilingcore/boilingcore.go @@ -198,8 +198,7 @@ func (s *State) initTemplates() error { return err } - testMain := s.Config.DriverName + "_main.tpl" - s.TestMainTemplate, err = loadTemplate(nil, testMain, filepath.Join(basePath, templatesTestMainDirectory, testMain)) + s.TestMainTemplate, err = loadTemplate(filepath.Join(basePath, templatesTestMainDirectory), s.Config.DriverName+"_main.tpl") if err != nil { return err } @@ -218,18 +217,21 @@ func (s *State) processReplacements() error { toReplace, replaceWith := splits[0], splits[1] + toReplaceSplit := strings.Split(toReplace, string(filepath.Separator)) + fileName := toReplaceSplit[len(toReplaceSplit)-1] + var err error switch filepath.Dir(toReplace) { case templatesDirectory: - _, err = loadTemplate(s.Templates.Template, toReplace, replaceWith) + err = replaceTemplate(s.Templates.Template, fileName, replaceWith) case templatesSingletonDirectory: - _, err = loadTemplate(s.SingletonTemplates.Template, toReplace, replaceWith) + err = replaceTemplate(s.SingletonTemplates.Template, fileName, replaceWith) case templatesTestDirectory: - _, err = loadTemplate(s.TestTemplates.Template, toReplace, replaceWith) + err = replaceTemplate(s.TestTemplates.Template, fileName, replaceWith) case templatesSingletonTestDirectory: - _, err = loadTemplate(s.SingletonTestTemplates.Template, toReplace, replaceWith) + err = replaceTemplate(s.SingletonTestTemplates.Template, fileName, replaceWith) case templatesTestMainDirectory: - s.TestMainTemplate, err = loadTemplate(nil, toReplace, replaceWith) + err = replaceTemplate(s.TestMainTemplate, fileName, replaceWith) default: return errors.Errorf("replace file's directory not part of any known folder: %s", toReplace) } diff --git a/boilingcore/templates.go b/boilingcore/templates.go index 32bbe6f..13f4142 100644 --- a/boilingcore/templates.go +++ b/boilingcore/templates.go @@ -111,24 +111,35 @@ func loadTemplates(dir string) (*templateList, error) { return &templateList{Template: tpl}, err } -// loadTemplate loads a single template, uses tpl as a base template if provided -// and creates a new base template if not. -func loadTemplate(tpl *template.Template, name, filename string) (*template.Template, error) { +// loadTemplate loads a single template file +func loadTemplate(dir string, filename string) (*template.Template, error) { + pattern := filepath.Join(dir, filename) + tpl, err := template.New("").Funcs(templateFunctions).ParseFiles(pattern) + + if err != nil { + return nil, err + } + + return tpl.Lookup(filename), err +} + +// replaceTemplate finds the template matching with name and replaces its +// contents with the contents of the template located at filename +func replaceTemplate(tpl *template.Template, name, filename string) error { + if tpl == nil { + return fmt.Errorf("template for %s is nil", name) + } + b, err := ioutil.ReadFile(filename) if err != nil { - return nil, errors.Wrapf(err, "failed reading template file: %s", filename) + return errors.Wrapf(err, "failed reading template file: %s", filename) } - if tpl == nil { - tpl = template.New(name) - } else { - tpl = tpl.New(name) - } - if tpl, err = tpl.Funcs(templateFunctions).Parse(string(b)); err != nil { - return nil, errors.Wrapf(err, "failed to parse template file: %s", filename) + if tpl, err = tpl.New(name).Funcs(templateFunctions).Parse(string(b)); err != nil { + return errors.Wrapf(err, "failed to parse template file: %s", filename) } - return tpl, nil + return nil } // set is to stop duplication from named enums, allowing a template loop