diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-04-15 08:46:47 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-04-15 08:46:47 -0700 |
commit | 749745449709eb34a55ff586e044ffd019687939 (patch) | |
tree | 1abb2120d2ef2e0012f7a56b2c29462332329dbb /cmd/ponzu/generate.go | |
parent | 217e96c8dd134b7f24c8b9320d82843ff02a0ae1 (diff) |
fix regression bug in CLI field parser, catching reserved field names
Diffstat (limited to 'cmd/ponzu/generate.go')
-rw-r--r-- | cmd/ponzu/generate.go | 59 |
1 files changed, 50 insertions, 9 deletions
diff --git a/cmd/ponzu/generate.go b/cmd/ponzu/generate.go index a4a9d2c..cbe2876 100644 --- a/cmd/ponzu/generate.go +++ b/cmd/ponzu/generate.go @@ -24,6 +24,32 @@ type generateField struct { View string } +var reservedFiledNames = map[string]string{ + "uuid": "UUID", + "item": "Item", + "id": "ID", + "slug": "Slug", + "timestamp": "Timestamp", + "updated": "Updated", +} + +func legalFieldNames(fields ...generateField) (bool, map[string]string) { + conflicts := make(map[string]string) + for _, field := range fields { + for jsonName, fieldName := range reservedFiledNames { + if field.JSONName == jsonName || field.Name == fieldName { + conflicts[jsonName] = fieldName + } + } + } + + if len(conflicts) > 0 { + return false, conflicts + } + + return true, conflicts +} + // blog title:string Author:string PostCategory:string content:string some_thing:int func parseType(args []string) (generateType, error) { t := generateType{ @@ -37,7 +63,7 @@ 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 @@ -45,6 +71,20 @@ func parseType(args []string) (generateType, error) { t.Fields = append(t.Fields, f) } + if ok, nameConflicts := legalFieldNames(t.Fields...); !ok { + for jsonName, fieldName := range nameConflicts { + fmt.Println(fmt.Sprintf("reserved field name: %s (%s)", jsonName, fieldName)) + } + + count := len(nameConflicts) + var c = "conflict" + if count > 1 { + c = "conflicts" + } + + return generateType{}, fmt.Errorf("You have (%d) naming %s - please rename and try again", count, c) + } + return t, nil } @@ -221,14 +261,8 @@ func generateContentType(args []string) error { filePath := filepath.Join(contentDir, fileName) if _, err := os.Stat(filePath); !os.IsNotExist(err) { - return fmt.Errorf("Please remove '%s' before executing this command.", fileName) - } - - // no file exists.. ok to write new one - file, err := os.Create(filePath) - defer file.Close() - if err != nil { - return err + localFile := filepath.Join("content", fileName) + return fmt.Errorf("Please remove '%s' before executing this command", localFile) } // parse type info from args @@ -254,6 +288,13 @@ func generateContentType(args []string) error { return fmt.Errorf("Failed to format template: %s", err.Error()) } + // no file exists.. ok to write new one + file, err := os.Create(filePath) + defer file.Close() + if err != nil { + return err + } + _, err = file.Write(fmtBuf) if err != nil { return fmt.Errorf("Failed to write generated file buffer: %s", err.Error()) |