mirror of https://github.com/spf13/viper.git
feat: partially revert #1387
1387 introduced a rather serious breaking change that's causing pain throughout the community. Even though it fixed a buggy behavior the previous one was still useful to a lot of people. This change introduces a way to revert back to that old behavior. Signed-off-by: Mark Sagi-Kazar <mark.sagikazar@gmail.com>
This commit is contained in:
parent
961c39613b
commit
40800105e2
|
@ -0,0 +1,7 @@
|
|||
//go:build !viper_1387
|
||||
// +build !viper_1387
|
||||
|
||||
package features
|
||||
|
||||
// Revert1387 reverts the behavior introduced in #1387.
|
||||
var Revert1387 = false
|
|
@ -0,0 +1,7 @@
|
|||
//go:build viper_1387
|
||||
// +build viper_1387
|
||||
|
||||
package features
|
||||
|
||||
// Revert1387 reverts the behavior introduced in #1387.
|
||||
var Revert1387 = true
|
|
@ -0,0 +1,2 @@
|
|||
// Package features allows toggling features in Viper based on build tags.
|
||||
package features
|
9
util.go
9
util.go
|
@ -19,6 +19,8 @@ import (
|
|||
"unicode"
|
||||
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/spf13/viper/internal/features"
|
||||
)
|
||||
|
||||
// ConfigParseError denotes failing to parse configuration file.
|
||||
|
@ -79,8 +81,11 @@ func insensitiviseVal(val interface{}) interface{} {
|
|||
// nested map: recursively insensitivise
|
||||
insensitiviseMap(val.(map[string]interface{}))
|
||||
case []interface{}:
|
||||
// nested array: recursively insensitivise
|
||||
insensitiveArray(val.([]interface{}))
|
||||
// deprecated, drop in Viper v2
|
||||
if !features.Revert1387 {
|
||||
// nested array: recursively insensitivise
|
||||
insensitiveArray(val.([]interface{}))
|
||||
}
|
||||
}
|
||||
return val
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/spf13/viper/internal/features"
|
||||
"github.com/spf13/viper/internal/testutil"
|
||||
)
|
||||
|
||||
|
@ -2672,6 +2673,22 @@ func TestSliceIndexAccess(t *testing.T) {
|
|||
assert.Equal(t, "The Expanse", v.GetString("tv.0.title_i18n.USA"))
|
||||
assert.Equal(t, "エクスパンス -巨獣めざめる-", v.GetString("tv.0.title_i18n.Japan"))
|
||||
|
||||
var expectedtitlei18n map[string]any
|
||||
|
||||
if features.Revert1387 {
|
||||
expectedtitlei18n = map[string]any{
|
||||
"USA": "The Expanse",
|
||||
"Japan": "エクスパンス -巨獣めざめる-",
|
||||
}
|
||||
} else {
|
||||
expectedtitlei18n = map[string]any{
|
||||
"usa": "The Expanse",
|
||||
"japan": "エクスパンス -巨獣めざめる-",
|
||||
}
|
||||
}
|
||||
|
||||
assert.Equal(t, expectedtitlei18n, v.GetStringMap("tv.0.title_i18n"))
|
||||
|
||||
// Test for index out of bounds
|
||||
assert.Equal(t, "", v.GetString("tv.0.seasons.2.first_released"))
|
||||
|
||||
|
|
Loading…
Reference in New Issue