Merge remote-tracking branch 'g3rk6/master' into feature/write-config

This commit is contained in:
Herkermer Sherwood 2016-12-05 12:17:17 -08:00
commit a16df4f05e

View file

@ -20,7 +20,9 @@
package viper package viper
import ( import (
"bufio"
"bytes" "bytes"
"encoding/json"
"fmt" "fmt"
"io" "io"
"log" "log"
@ -30,12 +32,15 @@ import (
"strings" "strings"
"time" "time"
"github.com/BurntSushi/toml"
"github.com/fsnotify/fsnotify" "github.com/fsnotify/fsnotify"
"github.com/mitchellh/mapstructure" "github.com/mitchellh/mapstructure"
"github.com/spf13/afero" "github.com/spf13/afero"
"github.com/spf13/cast" "github.com/spf13/cast"
jww "github.com/spf13/jwalterweatherman" jww "github.com/spf13/jwalterweatherman"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"gopkg.in/fsnotify.v1"
"gopkg.in/yaml.v2"
) )
var v *Viper var v *Viper
@ -1039,6 +1044,50 @@ func (v *Viper) InConfig(key string) bool {
return exists return exists
} }
// Save configuration to file
func SaveConfig() error { return v.SaveConfig() }
func (v *Viper) SaveConfig() error {
jww.INFO.Println("Attempting to write config into the file.")
if !stringInSlice(v.getConfigType(), SupportedExts) {
return UnsupportedConfigError(v.getConfigType())
}
f, err := os.Create(v.getConfigFile())
if err != nil {
return err
}
defer f.Close()
switch v.getConfigType() {
case "json":
b, err := json.MarshalIndent(v.AllSettings(), "", " ")
if err != nil {
jww.FATAL.Println("Panic while encoding into JSON format.")
}
f.WriteString(string(b))
case "toml":
w := bufio.NewWriter(f)
if err := toml.NewEncoder(w).Encode(v.AllSettings()); err != nil {
jww.FATAL.Println("Panic while encoding into TOML format.")
}
w.Flush()
case "yaml", "yml":
b, err := yaml.Marshal(v.AllSettings())
if err != nil {
jww.FATAL.Println("Panic while encoding into YAML format.")
}
f.WriteString(string(b))
}
return nil
}
// SetDefault sets the default value for this key. // SetDefault sets the default value for this key.
// SetDefault is case-insensitive for a key. // SetDefault is case-insensitive for a key.
// Default only used when no value is provided by the user via flag, config or ENV. // Default only used when no value is provided by the user via flag, config or ENV.