diff options
Diffstat (limited to 'config/configProvider.go')
-rw-r--r-- | config/configProvider.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/config/configProvider.go b/config/configProvider.go new file mode 100644 index 000000000..432948d74 --- /dev/null +++ b/config/configProvider.go @@ -0,0 +1,56 @@ +// Copyright 2017-present 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 ( + "strings" + + "github.com/spf13/cast" + + "github.com/spf13/viper" +) + +// Provider provides the configuration settings for Hugo. +type Provider interface { + GetString(key string) string + GetInt(key string) int + GetBool(key string) bool + GetStringMap(key string) map[string]interface{} + GetStringMapString(key string) map[string]string + GetStringSlice(key string) []string + Get(key string) interface{} + Set(key string, value interface{}) + IsSet(key string) bool +} + +// FromConfigString creates a config from the given YAML, JSON or TOML config. This is useful in tests. +func FromConfigString(config, configType string) (Provider, error) { + v := viper.New() + v.SetConfigType(configType) + if err := v.ReadConfig(strings.NewReader(config)); err != nil { + 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} + } + return cast.ToStringSlice(sd) +} |