From 4f9d97846609baaf6670102af7aebbde54942478 Mon Sep 17 00:00:00 2001 From: Kevin Gimbel Date: Thu, 1 Jun 2017 13:22:11 +0200 Subject: [PATCH] (template): WIP: Inital version. Updates #45 --- main.go | 6 ++++ pkg/fakedata/template.go | 67 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 pkg/fakedata/template.go diff --git a/main.go b/main.go index 37e4400..d0ef5dc 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,7 @@ var limitFlag = flag.IntP("limit", "l", 10, "limits rows up to n") var formatFlag = flag.StringP("format", "f", "", "generators rows in f format. Available formats: csv|tab|sql") var versionFlag = flag.BoolP("version", "v", false, "shows version information") var tableFlag = flag.StringP("table", "t", "TABLE", "table name of the sql format") +var templateFlag = flag.StringP("template", "", "", "Use template") func getFormatter(format string) (f fakedata.Formatter) { switch format { @@ -64,6 +65,11 @@ func main() { os.Exit(0) } + if *templateFlag != "" { + fakedata.ParseTemplate(*templateFlag) + os.Exit(0) + } + if len(flag.Args()) == 0 { flag.Usage() os.Exit(0) diff --git a/pkg/fakedata/template.go b/pkg/fakedata/template.go new file mode 100644 index 0000000..657a8aa --- /dev/null +++ b/pkg/fakedata/template.go @@ -0,0 +1,67 @@ +package fakedata + +import ( + "fmt" + "html/template" + "os" + "strings" +) + +var fakeColumn = Column{"Fake", "fakecolumn", ""} + +var generatorFunctions = template.FuncMap{ + "Name": func() string { + return generators["name"].Func(fakeColumn) + }, + "Email": func() string { + return generators["email"].Func(fakeColumn) + }, + "Int": func(a, b int) string { + return generators["int"].Func(Column{"Int", "int", fmt.Sprintf("%d..%d", a, b)}) + }, + "Enum": func(keywords ...string) string { + constraints := createConstraints(keywords) + return generators["enum"].Func(Column{"Enum", "enu", constraints}) + }, + "Generator": func(name string) string { + return generators[name].Func(fakeColumn) + }, + "Loop": func(i int) []int { + c := make([]int, i) + + return c + }, + "Odd": func(i int) bool { + if i%2 != 0 { + return true + } + return false + }, + "Even": func(i int) bool { + if i%2 == 0 { + return true + } + return false + }, +} + +func createConstraints(params []string) string { + return strings.Join(params, "..") +} + +func getTemplateNameFromPath(name string) string { + ts := strings.Split(name, "/") + tn := ts[len(ts)-1] + return tn +} + +func ParseTemplate(path string) { + tn := getTemplateNameFromPath(path) + tmp, err := template.New(tn).Funcs(generatorFunctions).ParseFiles(path) + if err != nil { + fmt.Println(err) + } + + tmp.Execute(os.Stdout, generators) + +}