From e0393b721ced07de32ae3d57e20b1fcd214d97e6 Mon Sep 17 00:00:00 2001 From: Joshua Santos Date: Thu, 30 Jun 2016 10:32:53 -0700 Subject: [PATCH] Change meta to required, and refactor a bit to cover edge cases --- templatefunc.go | 9 +++------ templatefunc_test.go | 24 ++++++++++++++++++------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/templatefunc.go b/templatefunc.go index d6afaf15..36442984 100644 --- a/templatefunc.go +++ b/templatefunc.go @@ -475,13 +475,10 @@ func parseFormTag(fieldT reflect.StructField) (label, name, fType string, id str id = fieldT.Tag.Get("id") class = fieldT.Tag.Get("class") - meta := strings.Split(fieldT.Tag.Get("meta"), ",") required = false - switch len(meta) { - case 1: - if len(meta[0]) > 0 && meta[0] != "-" { - required = true - } + required_field := fieldT.Tag.Get("required") + if required_field != "-" && required_field != "" { + required, _ = strconv.ParseBool(required_field) } switch len(tags) { diff --git a/templatefunc_test.go b/templatefunc_test.go index 6f337928..86de37ae 100644 --- a/templatefunc_test.go +++ b/templatefunc_test.go @@ -214,12 +214,14 @@ func TestRenderFormField(t *testing.T) { func TestParseFormTag(t *testing.T) { // create struct to contain field with different types of struct-tag `form` type user struct { - All int `form:"name,text,年龄:"` - NoName int `form:",hidden,年龄:"` - OnlyLabel int `form:",,年龄:"` - OnlyName int `form:"name" id:"name" class:"form-name"` - Ignored int `form:"-"` - Required int `form:"name" meta:"true"` + All int `form:"name,text,年龄:"` + NoName int `form:",hidden,年龄:"` + OnlyLabel int `form:",,年龄:"` + OnlyName int `form:"name" id:"name" class:"form-name"` + Ignored int `form:"-"` + Required int `form:"name" required:"true"` + IgnoreRequired int `form:"name"` + NotRequired int `form:"name" required:"false"` } objT := reflect.TypeOf(&user{}).Elem() @@ -255,6 +257,16 @@ func TestParseFormTag(t *testing.T) { t.Errorf("Form Tag containing only name and required was not correctly parsed.") } + label, name, fType, id, class, ignored, required = parseFormTag(objT.Field(6)) + if !(name == "name" && required == false) { + t.Errorf("Form Tag containing only name and ignore required was not correctly parsed.") + } + + label, name, fType, id, class, ignored, required = parseFormTag(objT.Field(7)) + if !(name == "name" && required == false) { + t.Errorf("Form Tag containing only name and not required was not correctly parsed.") + } + } func TestMapGet(t *testing.T) {