Skip to content
This repository has been archived by the owner on Dec 21, 2019. It is now read-only.

Commit

Permalink
refactor templater: Add intermediate type to represent rendered RSes
Browse files Browse the repository at this point in the history
As a first step in resolving #51 this refactors the `templater`
package to return rendered resource sets as a distinct type.

This also fixes #56
  • Loading branch information
tazjin committed Jun 11, 2017
1 parent d76ea59 commit f326432
Showing 1 changed file with 35 additions and 14 deletions.
49 changes: 35 additions & 14 deletions templater/templater.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,58 +30,79 @@ type TemplatingError struct {
meep.TraitCausable
}

func LoadAndPrepareTemplates(include *[]string, exclude *[]string, c *context.Context) (output []string, err error) {
type RenderedResource struct {
Filename string
Rendered string
}

type RenderedResourceSet struct {
Name string
Resources []RenderedResource
}

func LoadAndApplyTemplates(include *[]string, exclude *[]string, c *context.Context) ([]RenderedResourceSet, error) {
limitedResourceSets := applyLimits(&c.ResourceSets, include, exclude)
renderedResourceSets := make([]RenderedResourceSet, len(c.ResourceSets))

if len(*limitedResourceSets) == 0 {
fmt.Fprintln(os.Stderr, "No valid resource sets included!")
return
return renderedResourceSets, fmt.Errorf("No valid resource sets included!")
}

for _, rs := range *limitedResourceSets {
err = processResourceSet(c, &rs, &output)
set, err := processResourceSet(c, &rs)

if err != nil {
return
return nil, err
}

renderedResourceSets = append(renderedResourceSets, *set)
}

return
return renderedResourceSets, nil
}

func processResourceSet(c *context.Context, rs *context.ResourceSet, output *[]string) error {
func processResourceSet(c *context.Context, rs *context.ResourceSet) (*RenderedResourceSet, error) {
fmt.Fprintf(os.Stderr, "Loading resources for %s\n", rs.Name)

rp := path.Join(c.BaseDir, rs.Name)
files, err := ioutil.ReadDir(rp)

err = processFiles(c, rs, rp, files, output)
resources, err := processFiles(c, rs, rp, files)

if err != nil {
return meep.New(
return nil, meep.New(
&TemplateNotFoundError{Name: rs.Name},
meep.Cause(err),
)
}

return nil
return &RenderedResourceSet{
Name: rs.Name,
Resources: resources,
}, nil
}

func processFiles(c *context.Context, rs *context.ResourceSet, rp string, files []os.FileInfo, output *[]string) error {
func processFiles(c *context.Context, rs *context.ResourceSet, rp string, files []os.FileInfo) ([]RenderedResource, error) {
resources := make([]RenderedResource, len(c.ResourceSets))

for _, file := range files {
if !file.IsDir() && isResourceFile(file) {
p := path.Join(rp, file.Name())
o, err := templateFile(c, rs, p)

if err != nil {
return err
return resources, err
}

*output = append(*output, o)
res := RenderedResource{
Filename: file.Name(),
Rendered: o,
}
resources = append(resources, res)
}
}

return nil
return resources, nil
}

func templateFile(c *context.Context, rs *context.ResourceSet, filename string) (string, error) {
Expand Down

0 comments on commit f326432

Please sign in to comment.