Skip to content

Commit f011ee1

Browse files
committed
closes #14. also added new funcmap functions to examples/functions.
1 parent 899842b commit f011ee1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1060
-424
lines changed

.goreleaser-darwin.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ project_name: renderizer
22
builds:
33
-
44
binary: renderizer
5+
main: ./cmd/renderizer/main.go
56
goos:
67
- darwin
78
goarch:
89
- amd64
910
ldflags: '-s -w -X main.version={{.Version}} -X main.tag={{.Tag}} -X main.commit={{.Commit}} -X main.date={{ time "20060102" }}'
1011

11-
dist: build/dist
12+
dist: release/dist
1213

1314
release:
1415
draft: true

.goreleaser.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ project_name: renderizer
22
builds:
33
-
44
binary: renderizer
5+
main: ./cmd/renderizer/main.go
56
goos:
67
- windows
78
- darwin

.travis.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ notificaitons:
1414
on_success: change
1515
on_failure: always
1616
install:
17-
- go get -t ./...
17+
- go get -t ./pkg/... ./cmd/...
1818
script:
19-
- go test -v
19+
- go test -v ./pkg/... ./cmd/...

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ build: # Build darwin
1818

1919
release: ## Build releases
2020
goreleaser --rm-dist --skip-publish --skip-validate
21+
scripts/rename-release
2122

2223
vet test: build ## Run tests or vet
2324
go $@ ./...

main.go cmd/renderizer/main.go

+71-69
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import (
88
"path/filepath"
99
"strings"
1010

11+
"github.com/gomatic/renderizer/pkg/renderizer"
1112
"github.com/imdario/mergo"
1213
"github.com/kardianos/osext"
1314
"github.com/urfave/cli"
1415
"gopkg.in/yaml.v2"
1516
)
1617

1718
var (
18-
version = "2.0.4"
19+
version = "2.0.5"
1920
commit = "unknown"
2021
date = "20060102T150405"
2122
selfn, _ = osext.Executable()
@@ -26,42 +27,25 @@ var (
2627

2728
//
2829
type Settings struct {
29-
// Capitalization is a positional toggles. The following variable names are capitalized (title-case).
30-
Capitalize bool
31-
// Set the Missing Key template option. Defaults to "error".
32-
MissingKey string
30+
Defaulted bool
3331
// Configuration yaml
3432
ConfigFiles cli.StringSlice
35-
Defaulted bool
36-
Config map[string]interface{}
3733
//
38-
Arguments []string
39-
//
40-
Templates []string
41-
// Add the environment map to the variables.
42-
Environment string
43-
//
44-
OutputExtension string
45-
//
46-
TimeFormat string
47-
//
48-
Stdin bool
49-
//
50-
Debugging bool
51-
//
52-
Verbose bool
34+
Options renderizer.Options
5335
}
5436

5537
//
5638
var settings = Settings{
57-
Capitalize: true,
58-
MissingKey: "error",
59-
TimeFormat: "20060102T150405",
60-
Environment: "env",
61-
Config: map[string]interface{}{},
6239
ConfigFiles: []string{},
63-
Arguments: []string{},
64-
Templates: []string{},
40+
Options: renderizer.Options{
41+
Config: map[string]interface{}{},
42+
Capitalize: true,
43+
MissingKey: "error",
44+
TimeFormat: "20060102T150405",
45+
Environment: "env",
46+
Arguments: []string{},
47+
Templates: []string{},
48+
},
6549
}
6650

6751
//
@@ -73,6 +57,8 @@ func main() {
7357
app.Version = appver
7458
app.EnableBashCompletion = true
7559

60+
os.Setenv("RENDERIZER_VERSION", appver)
61+
7662
configs := cli.StringSlice{}
7763

7864
app.Commands = []cli.Command{
@@ -98,56 +84,69 @@ func main() {
9884
Usage: "the 'missingkey' template option (default|zero|error)",
9985
Value: "error",
10086
EnvVar: "RENDERIZER_MISSINGKEY",
101-
Destination: &settings.MissingKey,
87+
Destination: &settings.Options.MissingKey,
10288
},
10389
cli.StringFlag{
104-
Name: "environment, env, E, e",
105-
Usage: "load the environment into the variable name instead of as 'env'",
106-
Value: settings.Environment,
107-
EnvVar: "RENDERIZER_ENVIRONMENT",
90+
Name: "environment, env, E, e",
91+
Usage: "load the environment into the variable name instead of as 'env'",
92+
Value: settings.Options.Environment,
93+
EnvVar: "RENDERIZER_ENVIRONMENT",
94+
Destination: &settings.Options.Environment,
10895
},
10996
cli.BoolFlag{
11097
Name: "stdin, c",
11198
Usage: "read from stdin",
112-
Destination: &settings.Stdin,
99+
Destination: &settings.Options.Stdin,
100+
},
101+
cli.BoolFlag{
102+
Name: "testing, T",
103+
Usage: "configure runtime to provide consistent output",
104+
EnvVar: "RENDERIZER_TESTING",
105+
Destination: &settings.Options.Testing,
113106
},
114107
cli.BoolFlag{
115108
Name: "debugging, debug, D",
116109
Usage: "enable debugging server",
117-
Destination: &settings.Debugging,
110+
EnvVar: "RENDERIZER_DEBUG",
111+
Destination: &settings.Options.Debugging,
118112
},
119113
cli.BoolFlag{
120114
Name: "verbose, V",
121115
Usage: "enable verbose output",
122-
Destination: &settings.Verbose,
116+
EnvVar: "RENDERIZER_VEBOSE",
117+
Destination: &settings.Options.Verbose,
123118
},
124119
}
125120

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

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

130-
settings.Stdin = settings.Stdin || (fi.Mode()&os.ModeCharDevice) == 0
125+
settings.Options.Stdin = settings.Options.Stdin || (fi.Mode()&os.ModeCharDevice) == 0
131126

132-
settings.Arguments = append(settings.Arguments, ctx.Args()...)
127+
settings.Options.Arguments = append(settings.Options.Arguments, ctx.Args()...)
133128

134-
if len(settings.Templates) == 0 && !settings.Stdin {
129+
mainName := ""
130+
folderName, err := os.Getwd()
131+
bases := []string{"renderizer"}
132+
if err != nil {
133+
log.Println(err)
134+
mainName = "renderizer"
135+
} else {
136+
mainName = filepath.Base(folderName)
137+
bases = []string{mainName, "renderizer"}
138+
}
139+
140+
if len(settings.Options.Templates) == 0 && !settings.Options.Stdin {
135141
// Try default the template name
136-
folderName, err := os.Getwd()
137-
if err != nil {
138-
log.Println(err)
139-
folderName = "renderizer"
140-
} else {
141-
folderName = filepath.Base(folderName)
142-
}
143142

144143
name := func() string {
145-
for _, base := range []string{folderName, "renderizer"} {
144+
for _, base := range bases {
146145
for _, ext := range []string{".tmpl", ""} {
147146
for _, try := range []string{"yaml", "json", "html", "txt", "xml", ""} {
148147
name := fmt.Sprintf("%s.%s%s", base, try, ext)
149148
if _, err := os.Stat(name); err == nil {
150-
if settings.Verbose {
149+
if settings.Options.Verbose {
151150
log.Printf("using template: %+v", name)
152151
}
153152
return name
@@ -158,21 +157,21 @@ func main() {
158157
return ""
159158
}()
160159
if name != "" {
161-
settings.Templates = append(settings.Templates, name)
160+
settings.Options.Templates = append(settings.Options.Templates, name)
162161
}
163-
}
164162

165-
if len(settings.Templates) == 0 {
166-
return cli.NewExitError("missing template name", 1)
167-
}
163+
if len(settings.Options.Templates) == 0 {
164+
return cli.NewExitError("missing template name", 1)
165+
}
168166

169-
mainName := strings.Split(strings.TrimLeft(filepath.Base(settings.Templates[0]), "."), ".")[0]
167+
mainName = strings.Split(strings.TrimLeft(filepath.Base(settings.Options.Templates[0]), "."), ".")[0]
168+
}
170169

171-
switch settings.MissingKey {
170+
switch settings.Options.MissingKey {
172171
case "zero", "error", "default", "invalid":
173172
default:
174-
fmt.Fprintf(os.Stderr, "ERROR: Resetting invalid missingkey: %+v", settings.MissingKey)
175-
settings.MissingKey = "error"
173+
fmt.Fprintf(os.Stderr, "ERROR: Resetting invalid missingkey: %+v", settings.Options.MissingKey)
174+
settings.Options.MissingKey = "error"
176175
}
177176

178177
if len(configs) == 0 {
@@ -194,22 +193,22 @@ func main() {
194193
if err != nil {
195194
return err
196195
}
197-
if settings.Debugging || settings.Verbose {
196+
if settings.Options.Debugging || settings.Options.Verbose {
198197
log.Printf("using settings: %+v", settings.ConfigFiles)
199198
}
200-
loaded = retyper(loaded)
201-
if settings.Debugging {
199+
loaded = settings.Options.Retyper(loaded)
200+
if settings.Options.Debugging {
202201
log.Printf("loaded: %s = %#v", config, loaded)
203-
} else if settings.Verbose {
202+
} else if settings.Options.Verbose {
204203
log.Printf("loaded: %s = %+v", config, loaded)
205204
}
206-
mergo.Merge(&settings.Config, loaded)
205+
mergo.Merge(&settings.Options.Config, loaded)
207206
}
208207
}
209208

210-
if settings.Debugging {
209+
if settings.Options.Debugging {
211210
log.Printf("--settings:%#v", settings)
212-
} else if settings.Verbose {
211+
} else if settings.Options.Verbose {
213212
log.Printf("--settings:%+v", settings)
214213
}
215214

@@ -241,7 +240,7 @@ func main() {
241240
next = true
242241
}
243242
fallthrough
244-
case "debug", "verbose", "version", "stdin", "help":
243+
case "debug", "verbose", "testing", "version", "stdin", "help":
245244
args = append(args, arg)
246245
continue
247246
}
@@ -258,14 +257,17 @@ func main() {
258257
continue
259258
}
260259
} else {
261-
settings.Templates = append(settings.Templates, arg)
260+
settings.Options.Templates = append(settings.Options.Templates, arg)
262261
continue
263262
}
264263

265-
settings.Arguments = append(settings.Arguments, arg)
264+
settings.Options.Arguments = append(settings.Options.Arguments, arg)
266265
}
267266
}
268267

269-
app.Action = renderizer
268+
app.Action = func(_ *cli.Context) error {
269+
return renderizer.Render(settings.Options)
270+
}
271+
270272
app.Run(args)
271273
}

cmd/renderizer/main_test.go

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package main
2+
3+
import "testing"
4+
5+
func Test_main(t *testing.T) {
6+
tests := []struct {
7+
name string
8+
}{
9+
// TODO: Add test cases.
10+
}
11+
for _, tt := range tests {
12+
t.Run(tt.name, func(t *testing.T) {
13+
main()
14+
})
15+
}
16+
}

examples/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
In each folder, just run:
44

55
renderizer
6+
7+
The `examples.sh` script shows examples of commands that produce equivalent output.

examples/basic/examples.sh

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/usr/bin/env bash
2+
name=$(basename ${PWD})
3+
renderizer
4+
renderizer ${name}.txt.tmpl --settings=.${name}.yaml
5+
renderizer ${name}.txt.tmpl --name=Renderizer --items=one --items=two --items=three
6+
renderizer ${name}.txt.tmpl --name=Renderizer --items=one --items=two --items=three --settings=.${name}.yaml
7+
renderizer ${name}.txt.tmpl --settings .${name}.yaml
8+
renderizer ${name}.txt.tmpl --name=Renderizer --items=one --items=two --items=three --settings .${name}.yaml

examples/basic/expect.txt

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
Hello: Renderizer!
2+
- 0: one
3+
- 1: two
4+
- 2: three
5+
6+
7+
Hello: Renderizer!
8+
- 0: one
9+
- 1: two
10+
- 2: three
11+
12+
13+
Hello: Renderizer!
14+
- 0: one
15+
- 1: two
16+
- 2: three
17+
18+
19+
Hello: Renderizer!
20+
- 0: one
21+
- 1: two
22+
- 2: three
23+
24+
25+
Hello: Renderizer!
26+
- 0: one
27+
- 1: two
28+
- 2: three
29+
30+
31+
Hello: Renderizer!
32+
- 0: one
33+
- 1: two
34+
- 2: three
35+
36+

examples/document/examples.sh

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/usr/bin/env bash
2+
name=$(basename ${PWD})
3+
renderizer
4+
renderizer ${name}.html.tmpl --settings=.${name}.yaml
5+
renderizer ${name}.html.tmpl --items=apple --items=banana --items=cherry --foo=true
6+
renderizer ${name}.html.tmpl --items=apple --items=banana --items=cherry --foo=true --settings=.${name}.yaml
7+
renderizer ${name}.html.tmpl --settings .${name}.yaml
8+
renderizer ${name}.html.tmpl --items=apple --items=banana --items=cherry --foo=true --settings .${name}.yaml

0 commit comments

Comments
 (0)