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"
|
"unicode"
|
||||||
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
|
|
||||||
|
"github.com/spf13/viper/internal/features"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ConfigParseError denotes failing to parse configuration file.
|
// ConfigParseError denotes failing to parse configuration file.
|
||||||
|
@ -79,8 +81,11 @@ func insensitiviseVal(val interface{}) interface{} {
|
||||||
// nested map: recursively insensitivise
|
// nested map: recursively insensitivise
|
||||||
insensitiviseMap(val.(map[string]interface{}))
|
insensitiviseMap(val.(map[string]interface{}))
|
||||||
case []interface{}:
|
case []interface{}:
|
||||||
// nested array: recursively insensitivise
|
// deprecated, drop in Viper v2
|
||||||
insensitiveArray(val.([]interface{}))
|
if !features.Revert1387 {
|
||||||
|
// nested array: recursively insensitivise
|
||||||
|
insensitiveArray(val.([]interface{}))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/spf13/viper/internal/features"
|
||||||
"github.com/spf13/viper/internal/testutil"
|
"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, "The Expanse", v.GetString("tv.0.title_i18n.USA"))
|
||||||
assert.Equal(t, "エクスパンス -巨獣めざめる-", v.GetString("tv.0.title_i18n.Japan"))
|
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
|
// Test for index out of bounds
|
||||||
assert.Equal(t, "", v.GetString("tv.0.seasons.2.first_released"))
|
assert.Equal(t, "", v.GetString("tv.0.seasons.2.first_released"))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue