mirror of
https://github.com/spf13/viper
synced 2024-11-16 10:07:00 +00:00
Add SubSlice to return slice of sub vipers
This commit is contained in:
parent
97ee7adfef
commit
deb8393798
2 changed files with 46 additions and 0 deletions
22
viper.go
22
viper.go
|
@ -787,6 +787,28 @@ func (v *Viper) Sub(key string) *Viper {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SubSlice returns a slice of new Viper instances representing a sub tree of this instance.
|
||||||
|
// Sub is case-insensitive for a key.
|
||||||
|
func SubSlice(key string) []*Viper { return v.SubSlice(key) }
|
||||||
|
func (v *Viper) SubSlice(key string) []*Viper {
|
||||||
|
data := v.Get(key)
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if reflect.TypeOf(data).Kind() == reflect.Slice {
|
||||||
|
var vList []*Viper
|
||||||
|
for _, item := range data.([]interface{}) {
|
||||||
|
subv := New()
|
||||||
|
subv.config = cast.ToStringMap(item)
|
||||||
|
vList = append(vList, subv)
|
||||||
|
}
|
||||||
|
return vList
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// GetString returns the value associated with the key as a string.
|
// GetString returns the value associated with the key as a string.
|
||||||
func GetString(key string) string { return v.GetString(key) }
|
func GetString(key string) string { return v.GetString(key) }
|
||||||
func (v *Viper) GetString(key string) string {
|
func (v *Viper) GetString(key string) string {
|
||||||
|
|
|
@ -1253,6 +1253,30 @@ func TestSub(t *testing.T) {
|
||||||
assert.Equal(t, (*Viper)(nil), subv)
|
assert.Equal(t, (*Viper)(nil), subv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSubSlice(t *testing.T) {
|
||||||
|
var yamlList = []byte(`map:
|
||||||
|
foo: bar
|
||||||
|
list:
|
||||||
|
- foo: 0
|
||||||
|
bar: 0
|
||||||
|
- foo: 1
|
||||||
|
bar: 1
|
||||||
|
`)
|
||||||
|
|
||||||
|
v := New()
|
||||||
|
v.SetConfigType("yaml")
|
||||||
|
v.ReadConfig(bytes.NewBuffer(yamlList))
|
||||||
|
|
||||||
|
subvSlice := v.SubSlice("list")
|
||||||
|
for idx, subv := range subvSlice {
|
||||||
|
assert.Equal(t, subv.GetInt("foo"), idx)
|
||||||
|
assert.Equal(t, subv.GetInt("bar"), idx)
|
||||||
|
}
|
||||||
|
|
||||||
|
subvSlice = v.SubSlice("map")
|
||||||
|
assert.Equal(t, ([]*Viper)(nil), subvSlice)
|
||||||
|
}
|
||||||
|
|
||||||
var hclWriteExpected = []byte(`"foos" = {
|
var hclWriteExpected = []byte(`"foos" = {
|
||||||
"foo" = {
|
"foo" = {
|
||||||
"key" = 1
|
"key" = 1
|
||||||
|
|
Loading…
Reference in a new issue