diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-04-01 11:01:42 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-04-01 11:01:42 -0700 |
commit | 3b91d4be44b7e7814494a0a58e6491d4c5983dbe (patch) | |
tree | 88e176ba9019630671eaecf218b365b496337b85 /cmd/ponzu/generate.go | |
parent | c78e6d7adec86a7799f9143f021784635f7665a2 (diff) |
adding initial cases to generate input types for field views from command line
Diffstat (limited to 'cmd/ponzu/generate.go')
-rw-r--r-- | cmd/ponzu/generate.go | 75 |
1 files changed, 69 insertions, 6 deletions
diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index e98e3fe..8c4bab4 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -18,10 +18,16 @@ type generateType struct { type generateField struct { Name string + Initial string TypeName string JSONName string + View string } +// following the type, an optional third param could designate the editor.Input-like +// func to call which would output different text based on the element returned +// blog title:string Author:string PostCategory:string content:string:richtext some_thing:int + // blog title:string Author:string PostCategory:string content:string some_thing:int func parseType(args []string) (generateType, error) { t := generateType{ @@ -35,6 +41,10 @@ func parseType(args []string) (generateType, error) { if err != nil { return generateType{}, err } + // NEW + // set initial (1st character of the type's name) on field so we don't need + // to set the template variable like was done in prior version + f.Initial = t.Initial t.Fields = append(t.Fields, f) } @@ -43,16 +53,26 @@ func parseType(args []string) (generateType, error) { } func parseField(raw string) (generateField, error) { - // title:string + // contents:string or // contents:string:richtext if !strings.Contains(raw, ":") { return generateField{}, fmt.Errorf("Invalid generate argument. [%s]", raw) } - pair := strings.Split(raw, ":") + data := strings.Split(raw, ":") + view := `nil` + field := generateField{ - Name: fieldName(pair[0]), - TypeName: strings.ToLower(pair[1]), - JSONName: fieldJSONName(pair[0]), + Name: fieldName(data[0]), + TypeName: strings.ToLower(data[1]), + JSONName: fieldJSONName(data[0]), + View: view, + } + + if len(data) == 3 { + err := setFieldView(&field, data[2]) + if err != nil { + return generateField{}, err + } } return field, nil @@ -116,6 +136,49 @@ func fieldJSONName(name string) string { return name } +// set the specified view inside the editor field for a generated field for a type +func setFieldView(field *generateField, viewType string) error { + var err error + var tmpl *template.Template + buf := &bytes.Buffer{} + + pwd, err := os.Getwd() + if err != nil { + return err + } + + tmplDir := filepath.Join(pwd, "cmd", "ponzu", "templates") + tmplFrom := func(filename string) (*template.Template, error) { + return template.ParseFiles(filepath.Join(tmplDir, filename)) + } + + switch strings.ToLower(viewType) { + case "textarea": + case "richtext": + case "select": + case "input": + tmpl, err = tmplFrom("gen-input.tmpl") + case "checkbox": + case "file": + case "tags": + default: + tmpl, err = tmplFrom("gen-input.tmpl") + } + + if err != nil { + return err + } + + err = tmpl.Execute(buf, field) + if err != nil { + return err + } + + field.View = buf.String() + + return nil +} + func isUpper(char rune) bool { if char >= 'A' && char <= 'Z' { return true @@ -163,7 +226,7 @@ func generateContentType(args []string) error { return fmt.Errorf("Failed to parse type args: %s", err.Error()) } - tmplPath := filepath.Join(pwd, "cmd", "ponzu", "contentType.tmpl") + tmplPath := filepath.Join(pwd, "cmd", "ponzu", "templates", "gen-content.tmpl") tmpl, err := template.ParseFiles(tmplPath) if err != nil { return fmt.Errorf("Failed to parse template: %s", err.Error()) |