diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/configProvider.go | 13 | ||||
-rw-r--r-- | config/configProvider_test.go | 36 |
2 files changed, 49 insertions, 0 deletions
diff --git a/config/configProvider.go b/config/configProvider.go index 335294d73..a7dc18960 100644 --- a/config/configProvider.go +++ b/config/configProvider.go @@ -16,6 +16,8 @@ package config import ( "strings" + "github.com/spf13/cast" + "github.com/spf13/viper" ) @@ -40,5 +42,16 @@ func FromConfigString(config, configType string) (Provider, error) { return nil, err } return v, nil +} +// GetStringSlicePreserveString returns a string slice from the given config and key. +// It differs from the GetStringSlice method in that if the config value is a string, +// we do not attempt to split it into fields. +func GetStringSlicePreserveString(cfg Provider, key string) []string { + sd := cfg.Get(key) + if sds, ok := sd.(string); ok { + return []string{sds} + } else { + return cast.ToStringSlice(sd) + } } diff --git a/config/configProvider_test.go b/config/configProvider_test.go new file mode 100644 index 000000000..7e9c2223b --- /dev/null +++ b/config/configProvider_test.go @@ -0,0 +1,36 @@ +// Copyright 2018 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package config + +import ( + "testing" + + "github.com/spf13/viper" + "github.com/stretchr/testify/require" +) + +func TestGetStringSlicePreserveString(t *testing.T) { + assert := require.New(t) + cfg := viper.New() + + s := "This is a string" + sSlice := []string{"This", "is", "a", "slice"} + + cfg.Set("s1", s) + cfg.Set("s2", sSlice) + + assert.Equal([]string{s}, GetStringSlicePreserveString(cfg, "s1")) + assert.Equal(sSlice, GetStringSlicePreserveString(cfg, "s2")) + assert.Nil(GetStringSlicePreserveString(cfg, "s3")) +} |