summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/configProvider.go13
-rw-r--r--config/configProvider_test.go36
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"))
+}