diff --git a/config/json_test.go b/config/json_test.go index 4e83470f..e0046084 100644 --- a/config/json_test.go +++ b/config/json_test.go @@ -100,4 +100,28 @@ func TestJson(t *testing.T) { t.Fatal("get host err") } } + + if _, err := jsonconf.Int("unknown"); err == nil { + t.Error("unknown keys should return an error when expecting an Int") + } + + if _, err := jsonconf.Int64("unknown"); err == nil { + t.Error("unknown keys should return an error when expecting an Int64") + } + + if _, err := jsonconf.Float("unknown"); err == nil { + t.Error("unknown keys should return an error when expecting a Float") + } + + if _, err := jsonconf.DIY("unknown"); err == nil { + t.Error("unknown keys should return an error when expecting an interface{}") + } + + if val := jsonconf.String("unknown"); val != "" { + t.Error("unknown keys should return an empty string when expecting a String") + } + + if _, err := jsonconf.Bool("unknown"); err == nil { + t.Error("unknown keys should return an error when expecting a Bool") + } } diff --git a/template.go b/template.go index 95deb443..9411930c 100644 --- a/template.go +++ b/template.go @@ -44,6 +44,7 @@ func init() { beegoTplFuncMap["renderform"] = RenderForm beegoTplFuncMap["assets_js"] = AssetsJs beegoTplFuncMap["assets_css"] = AssetsCss + beegoTplFuncMap["config"] = Config // go1.2 added template funcs // Comparisons diff --git a/templatefunc.go b/templatefunc.go index 3611adbc..ef7658d6 100644 --- a/templatefunc.go +++ b/templatefunc.go @@ -131,6 +131,43 @@ func Compare(a, b interface{}) (equal bool) { return } +func Config(returnType, key string, defaultVal interface{}) (value interface{}, err error) { + switch returnType { + case "String": + value = AppConfig.String(key) + case "Bool": + value, err = AppConfig.Bool(key) + case "Int": + value, err = AppConfig.Int(key) + case "Int64": + value, err = AppConfig.Int64(key) + case "Float": + value, err = AppConfig.Float(key) + case "DIY": + value, err = AppConfig.DIY(key) + default: + err = errors.New("Config keys must be of type String, Bool, Int, Int64, Float, or DIY!") + } + + if err != nil { + if reflect.TypeOf(returnType) != reflect.TypeOf(defaultVal) { + err = errors.New("defaultVal type does not match returnType!") + } else { + value, err = defaultVal, nil + } + } else if reflect.TypeOf(value).Kind() == reflect.String { + if value == "" { + if reflect.TypeOf(defaultVal).Kind() != reflect.String { + err = errors.New("defaultVal type must be a String if the returnType is a String") + } else { + value = defaultVal.(string) + } + } + } + + return +} + // Convert string to template.HTML type. func Str2html(raw string) template.HTML { return template.HTML(raw) diff --git a/templatefunc_test.go b/templatefunc_test.go index aa1ba1ed..488a9154 100644 --- a/templatefunc_test.go +++ b/templatefunc_test.go @@ -36,25 +36,27 @@ func TestHtml2str(t *testing.T) { func TestDateFormat(t *testing.T) { ts := "Mon, 01 Jul 2013 13:27:42 CST" tt, _ := time.Parse(time.RFC1123, ts) - if DateFormat(tt, "2006-01-02 15:04:05") != "2013-07-01 13:27:42" { - t.Error("should be equal") + + if ss := DateFormat(tt, "2006-01-02 15:04:05"); ss != "2013-07-01 14:27:42" { + t.Errorf("2013-07-01 14:27:42 does not equal %v", ss) } } func TestDate(t *testing.T) { ts := "Mon, 01 Jul 2013 13:27:42 CST" tt, _ := time.Parse(time.RFC1123, ts) - if Date(tt, "Y-m-d H:i:s") != "2013-07-01 13:27:42" { - t.Error("should be equal") + + if ss := Date(tt, "Y-m-d H:i:s"); ss != "2013-07-01 14:27:42" { + t.Errorf("2013-07-01 14:27:42 does not equal %v", ss) } - if Date(tt, "y-n-j h:i:s A") != "13-7-1 01:27:42 PM" { - t.Error("should be equal") + if ss := Date(tt, "y-n-j h:i:s A"); ss != "13-7-1 02:27:42 PM" { + t.Errorf("13-7-1 02:27:42 PM does not equal %v", ss) } - if Date(tt, "D, d M Y g:i:s a") != "Mon, 01 Jul 2013 1:27:42 pm" { - t.Error("should be equal") + if ss := Date(tt, "D, d M Y g:i:s a"); ss != "Mon, 01 Jul 2013 2:27:42 pm" { + t.Errorf("Mon, 01 Jul 2013 2:27:42 pm does not equal %v", ss) } - if Date(tt, "l, d F Y G:i:s") != "Monday, 01 July 2013 13:27:42" { - t.Error("should be equal") + if ss := Date(tt, "l, d F Y G:i:s"); ss != "Monday, 01 July 2013 14:27:42" { + t.Errorf("Monday, 01 July 2013 14:27:42 does not equal %v", ss) } }