Skip to content

Commit

Permalink
closes #14. also added new funcmap functions to examples/functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
nicerobot committed Sep 24, 2018
1 parent 899842b commit f011ee1
Show file tree
Hide file tree
Showing 57 changed files with 1,060 additions and 424 deletions.
3 changes: 2 additions & 1 deletion .goreleaser-darwin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ project_name: renderizer
builds:
-
binary: renderizer
main: ./cmd/renderizer/main.go
goos:
- darwin
goarch:
- amd64
ldflags: '-s -w -X main.version={{.Version}} -X main.tag={{.Tag}} -X main.commit={{.Commit}} -X main.date={{ time "20060102" }}'

dist: build/dist
dist: release/dist

release:
draft: true
1 change: 1 addition & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ project_name: renderizer
builds:
-
binary: renderizer
main: ./cmd/renderizer/main.go
goos:
- windows
- darwin
Expand Down
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ notificaitons:
on_success: change
on_failure: always
install:
- go get -t ./...
- go get -t ./pkg/... ./cmd/...
script:
- go test -v
- go test -v ./pkg/... ./cmd/...
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ build: # Build darwin

release: ## Build releases
goreleaser --rm-dist --skip-publish --skip-validate
scripts/rename-release

vet test: build ## Run tests or vet
go $@ ./...
Expand Down
140 changes: 71 additions & 69 deletions main.go → cmd/renderizer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@ import (
"path/filepath"
"strings"

"github.com/gomatic/renderizer/pkg/renderizer"
"github.com/imdario/mergo"
"github.com/kardianos/osext"
"github.com/urfave/cli"
"gopkg.in/yaml.v2"
)

var (
version = "2.0.4"
version = "2.0.5"
commit = "unknown"
date = "20060102T150405"
selfn, _ = osext.Executable()
Expand All @@ -26,42 +27,25 @@ var (

//
type Settings struct {
// Capitalization is a positional toggles. The following variable names are capitalized (title-case).
Capitalize bool
// Set the Missing Key template option. Defaults to "error".
MissingKey string
Defaulted bool
// Configuration yaml
ConfigFiles cli.StringSlice
Defaulted bool
Config map[string]interface{}
//
Arguments []string
//
Templates []string
// Add the environment map to the variables.
Environment string
//
OutputExtension string
//
TimeFormat string
//
Stdin bool
//
Debugging bool
//
Verbose bool
Options renderizer.Options
}

//
var settings = Settings{
Capitalize: true,
MissingKey: "error",
TimeFormat: "20060102T150405",
Environment: "env",
Config: map[string]interface{}{},
ConfigFiles: []string{},
Arguments: []string{},
Templates: []string{},
Options: renderizer.Options{
Config: map[string]interface{}{},
Capitalize: true,
MissingKey: "error",
TimeFormat: "20060102T150405",
Environment: "env",
Arguments: []string{},
Templates: []string{},
},
}

//
Expand All @@ -73,6 +57,8 @@ func main() {
app.Version = appver
app.EnableBashCompletion = true

os.Setenv("RENDERIZER_VERSION", appver)

configs := cli.StringSlice{}

app.Commands = []cli.Command{
Expand All @@ -98,56 +84,69 @@ func main() {
Usage: "the 'missingkey' template option (default|zero|error)",
Value: "error",
EnvVar: "RENDERIZER_MISSINGKEY",
Destination: &settings.MissingKey,
Destination: &settings.Options.MissingKey,
},
cli.StringFlag{
Name: "environment, env, E, e",
Usage: "load the environment into the variable name instead of as 'env'",
Value: settings.Environment,
EnvVar: "RENDERIZER_ENVIRONMENT",
Name: "environment, env, E, e",
Usage: "load the environment into the variable name instead of as 'env'",
Value: settings.Options.Environment,
EnvVar: "RENDERIZER_ENVIRONMENT",
Destination: &settings.Options.Environment,
},
cli.BoolFlag{
Name: "stdin, c",
Usage: "read from stdin",
Destination: &settings.Stdin,
Destination: &settings.Options.Stdin,
},
cli.BoolFlag{
Name: "testing, T",
Usage: "configure runtime to provide consistent output",
EnvVar: "RENDERIZER_TESTING",
Destination: &settings.Options.Testing,
},
cli.BoolFlag{
Name: "debugging, debug, D",
Usage: "enable debugging server",
Destination: &settings.Debugging,
EnvVar: "RENDERIZER_DEBUG",
Destination: &settings.Options.Debugging,
},
cli.BoolFlag{
Name: "verbose, V",
Usage: "enable verbose output",
Destination: &settings.Verbose,
EnvVar: "RENDERIZER_VEBOSE",
Destination: &settings.Options.Verbose,
},
}

app.Before = func(ctx *cli.Context) error {

fi, _ := os.Stdin.Stat()

settings.Stdin = settings.Stdin || (fi.Mode()&os.ModeCharDevice) == 0
settings.Options.Stdin = settings.Options.Stdin || (fi.Mode()&os.ModeCharDevice) == 0

settings.Arguments = append(settings.Arguments, ctx.Args()...)
settings.Options.Arguments = append(settings.Options.Arguments, ctx.Args()...)

if len(settings.Templates) == 0 && !settings.Stdin {
mainName := ""
folderName, err := os.Getwd()
bases := []string{"renderizer"}
if err != nil {
log.Println(err)
mainName = "renderizer"
} else {
mainName = filepath.Base(folderName)
bases = []string{mainName, "renderizer"}
}

if len(settings.Options.Templates) == 0 && !settings.Options.Stdin {
// Try default the template name
folderName, err := os.Getwd()
if err != nil {
log.Println(err)
folderName = "renderizer"
} else {
folderName = filepath.Base(folderName)
}

name := func() string {
for _, base := range []string{folderName, "renderizer"} {
for _, base := range bases {
for _, ext := range []string{".tmpl", ""} {
for _, try := range []string{"yaml", "json", "html", "txt", "xml", ""} {
name := fmt.Sprintf("%s.%s%s", base, try, ext)
if _, err := os.Stat(name); err == nil {
if settings.Verbose {
if settings.Options.Verbose {
log.Printf("using template: %+v", name)
}
return name
Expand All @@ -158,21 +157,21 @@ func main() {
return ""
}()
if name != "" {
settings.Templates = append(settings.Templates, name)
settings.Options.Templates = append(settings.Options.Templates, name)
}
}

if len(settings.Templates) == 0 {
return cli.NewExitError("missing template name", 1)
}
if len(settings.Options.Templates) == 0 {
return cli.NewExitError("missing template name", 1)
}

mainName := strings.Split(strings.TrimLeft(filepath.Base(settings.Templates[0]), "."), ".")[0]
mainName = strings.Split(strings.TrimLeft(filepath.Base(settings.Options.Templates[0]), "."), ".")[0]
}

switch settings.MissingKey {
switch settings.Options.MissingKey {
case "zero", "error", "default", "invalid":
default:
fmt.Fprintf(os.Stderr, "ERROR: Resetting invalid missingkey: %+v", settings.MissingKey)
settings.MissingKey = "error"
fmt.Fprintf(os.Stderr, "ERROR: Resetting invalid missingkey: %+v", settings.Options.MissingKey)
settings.Options.MissingKey = "error"
}

if len(configs) == 0 {
Expand All @@ -194,22 +193,22 @@ func main() {
if err != nil {
return err
}
if settings.Debugging || settings.Verbose {
if settings.Options.Debugging || settings.Options.Verbose {
log.Printf("using settings: %+v", settings.ConfigFiles)
}
loaded = retyper(loaded)
if settings.Debugging {
loaded = settings.Options.Retyper(loaded)
if settings.Options.Debugging {
log.Printf("loaded: %s = %#v", config, loaded)
} else if settings.Verbose {
} else if settings.Options.Verbose {
log.Printf("loaded: %s = %+v", config, loaded)
}
mergo.Merge(&settings.Config, loaded)
mergo.Merge(&settings.Options.Config, loaded)
}
}

if settings.Debugging {
if settings.Options.Debugging {
log.Printf("--settings:%#v", settings)
} else if settings.Verbose {
} else if settings.Options.Verbose {
log.Printf("--settings:%+v", settings)
}

Expand Down Expand Up @@ -241,7 +240,7 @@ func main() {
next = true
}
fallthrough
case "debug", "verbose", "version", "stdin", "help":
case "debug", "verbose", "testing", "version", "stdin", "help":
args = append(args, arg)
continue
}
Expand All @@ -258,14 +257,17 @@ func main() {
continue
}
} else {
settings.Templates = append(settings.Templates, arg)
settings.Options.Templates = append(settings.Options.Templates, arg)
continue
}

settings.Arguments = append(settings.Arguments, arg)
settings.Options.Arguments = append(settings.Options.Arguments, arg)
}
}

app.Action = renderizer
app.Action = func(_ *cli.Context) error {
return renderizer.Render(settings.Options)
}

app.Run(args)
}
16 changes: 16 additions & 0 deletions cmd/renderizer/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main

import "testing"

func Test_main(t *testing.T) {
tests := []struct {
name string
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
main()
})
}
}
2 changes: 2 additions & 0 deletions examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
In each folder, just run:

renderizer

The `examples.sh` script shows examples of commands that produce equivalent output.
8 changes: 8 additions & 0 deletions examples/basic/examples.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
name=$(basename ${PWD})
renderizer
renderizer ${name}.txt.tmpl --settings=.${name}.yaml
renderizer ${name}.txt.tmpl --name=Renderizer --items=one --items=two --items=three
renderizer ${name}.txt.tmpl --name=Renderizer --items=one --items=two --items=three --settings=.${name}.yaml
renderizer ${name}.txt.tmpl --settings .${name}.yaml
renderizer ${name}.txt.tmpl --name=Renderizer --items=one --items=two --items=three --settings .${name}.yaml
36 changes: 36 additions & 0 deletions examples/basic/expect.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Hello: Renderizer!
- 0: one
- 1: two
- 2: three


Hello: Renderizer!
- 0: one
- 1: two
- 2: three


Hello: Renderizer!
- 0: one
- 1: two
- 2: three


Hello: Renderizer!
- 0: one
- 1: two
- 2: three


Hello: Renderizer!
- 0: one
- 1: two
- 2: three


Hello: Renderizer!
- 0: one
- 1: two
- 2: three


8 changes: 8 additions & 0 deletions examples/document/examples.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
name=$(basename ${PWD})
renderizer
renderizer ${name}.html.tmpl --settings=.${name}.yaml
renderizer ${name}.html.tmpl --items=apple --items=banana --items=cherry --foo=true
renderizer ${name}.html.tmpl --items=apple --items=banana --items=cherry --foo=true --settings=.${name}.yaml
renderizer ${name}.html.tmpl --settings .${name}.yaml
renderizer ${name}.html.tmpl --items=apple --items=banana --items=cherry --foo=true --settings .${name}.yaml
Loading

0 comments on commit f011ee1

Please sign in to comment.