This commit is contained in:
Schley Andrew Kutz 2016-07-18 23:08:47 +00:00 committed by GitHub
commit 5da108f6b9
6 changed files with 114 additions and 23 deletions

View file

@ -21,7 +21,6 @@ import (
"strings" "strings"
"unicode" "unicode"
"github.com/BurntSushi/toml"
"github.com/hashicorp/hcl" "github.com/hashicorp/hcl"
"github.com/magiconair/properties" "github.com/magiconair/properties"
"github.com/spf13/cast" "github.com/spf13/cast"
@ -155,7 +154,7 @@ func unmarshallConfigReader(in io.Reader, c map[string]interface{}, configType s
} }
case "toml": case "toml":
if _, err := toml.Decode(buf.String(), &c); err != nil { if err := unmarshalTOML(buf.String(), &c); err != nil {
return ConfigParseError{err} return ConfigParseError{err}
} }

17
util_notoml.go Normal file
View file

@ -0,0 +1,17 @@
// +build !toml
// Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
// Viper is a application configuration system.
// It believes that applications can be configured a variety of ways
// via flags, ENVIRONMENT variables, configuration files retrieved
// from the file system, or a remote key/value store.
package viper
func unmarshalTOML(data string, v interface{}) error {
return nil
}

24
util_toml.go Normal file
View file

@ -0,0 +1,24 @@
// +build toml
// Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
// Viper is a application configuration system.
// It believes that applications can be configured a variety of ways
// via flags, ENVIRONMENT variables, configuration files retrieved
// from the file system, or a remote key/value store.
package viper
import (
"github.com/BurntSushi/toml"
)
func unmarshalTOML(data string, v interface{}) error {
if _, err := toml.Decode(data, v); err != nil {
return err
}
return nil
}

32
viper_notoml_test.go Normal file
View file

@ -0,0 +1,32 @@
// +build !toml
// Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
package viper
import (
"testing"
"time"
)
func initTOML(reset bool) {
if reset {
Reset()
}
v.config["title"] = "TOML Example"
dob, _ := time.Parse(time.RFC3339, "1979-05-27T07:32:00Z")
v.config["owner"] = map[string]interface{}{
"organization": "MongoDB",
"Bio": "MongoDB Chief Developer Advocate & Hacker at Large",
"dob": dob,
}
}
func assertConfigValue(t *testing.T, v *Viper) {
}

View file

@ -45,14 +45,6 @@ type testUnmarshalExtra struct {
Existing bool Existing bool
} }
var tomlExample = []byte(`
title = "TOML Example"
[owner]
organization = "MongoDB"
Bio = "MongoDB Chief Developer Advocate & Hacker at Large"
dob = 1979-05-27T07:32:00Z # First class dates? Why not?`)
var jsonExample = []byte(`{ var jsonExample = []byte(`{
"id": "0001", "id": "0001",
"type": "donut", "type": "donut",
@ -120,9 +112,7 @@ func initConfigs() {
r = bytes.NewReader(propertiesExample) r = bytes.NewReader(propertiesExample)
unmarshalReader(r, v.config) unmarshalReader(r, v.config)
SetConfigType("toml") initTOML(false)
r = bytes.NewReader(tomlExample)
unmarshalReader(r, v.config)
SetConfigType("json") SetConfigType("json")
remote := bytes.NewReader(remoteExample) remote := bytes.NewReader(remoteExample)
@ -153,14 +143,6 @@ func initProperties() {
unmarshalReader(r, v.config) unmarshalReader(r, v.config)
} }
func initTOML() {
Reset()
SetConfigType("toml")
r := bytes.NewReader(tomlExample)
unmarshalReader(r, v.config)
}
func initHcl() { func initHcl() {
Reset() Reset()
SetConfigType("hcl") SetConfigType("hcl")
@ -318,7 +300,7 @@ func TestProperties(t *testing.T) {
} }
func TestTOML(t *testing.T) { func TestTOML(t *testing.T) {
initTOML() initTOML(true)
assert.Equal(t, "TOML Example", Get("title")) assert.Equal(t, "TOML Example", Get("title"))
} }
@ -722,7 +704,7 @@ func TestDirsSearch(t *testing.T) {
err = v.ReadInConfig() err = v.ReadInConfig()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, `value is `+path.Base(v.configPaths[0]), v.GetString(`key`)) assertConfigValue(t, v)
} }
func TestWrongDirsSearchNotFound(t *testing.T) { func TestWrongDirsSearchNotFound(t *testing.T) {

37
viper_toml_test.go Normal file
View file

@ -0,0 +1,37 @@
// +build toml
// Copyright © 2014 Steve Francia <spf@spf13.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
package viper
import (
"bytes"
"path"
"testing"
"github.com/stretchr/testify/assert"
)
var tomlExample = []byte(`
title = "TOML Example"
[owner]
organization = "MongoDB"
Bio = "MongoDB Chief Developer Advocate & Hacker at Large"
dob = 1979-05-27T07:32:00Z # First class dates? Why not?`)
func initTOML(reset bool) {
if reset {
Reset()
}
SetConfigType("toml")
r := bytes.NewReader(tomlExample)
unmarshalReader(r, v.config)
}
func assertConfigValue(t *testing.T, v *Viper) {
assert.Equal(t, `value is `+path.Base(v.configPaths[0]), v.GetString(`key`))
}