From 110492b3001269a0777997fcbe68a60828fac4cb Mon Sep 17 00:00:00 2001 From: akutz Date: Mon, 26 Oct 2015 17:52:14 -0500 Subject: [PATCH] Bugfix for Nested Key Casing This patch fixes a bug with how Viper handle's key casing when keys are nested. While Viper is generally case-insensitive, this was not the case with regards to nested keys. This patch makes nested keys insensitive as well. --- viper.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index 7c98c6f..4a5b1eb 100644 --- a/viper.go +++ b/viper.go @@ -404,7 +404,17 @@ func (v *Viper) searchMap(source map[string]interface{}, path []string) interfac return source } - if next, ok := source[path[0]]; ok { + var ok bool + var next interface{} + for k, v := range source { + if strings.ToLower(k) == strings.ToLower(path[0]) { + ok = true + next = v + break + } + } + + if ok { switch next.(type) { case map[interface{}]interface{}: return v.searchMap(cast.ToStringMap(next), path[1:]) @@ -454,7 +464,7 @@ func (v *Viper) Get(key string) interface{} { val := v.find(lcaseKey) if val == nil { - source := v.find(path[0]) + source := v.find(strings.ToLower(path[0])) if source != nil { if reflect.TypeOf(source).Kind() == reflect.Map { val = v.searchMap(cast.ToStringMap(source), path[1:])