Merge pull request #18 from simia-tech/master

extended Has function to work with paths
This commit is contained in:
Thomas Pelletier
2014-07-10 16:28:49 +02:00
2 changed files with 50 additions and 7 deletions
+28 -7
View File
@@ -18,16 +18,37 @@ import (
// This is the result of the parsing of a TOML file.
type TomlTree map[string]interface{}
// Has returns a boolean indicating if the toplevel tree contains the given
// key.
// Has returns a boolean indicating if the given key exists.
func (t *TomlTree) Has(key string) bool {
mp := (map[string]interface{})(*t)
for k, _ := range mp {
if k == key {
return true
if key == "" {
return false
}
return t.HasPath(strings.Split(key, "."))
}
// Returns true if the given path of keys exists, false otherwise.
func (t *TomlTree) HasPath(keys []string) bool {
if len(keys) == 0 {
return false
}
subtree := t
for _, intermediate_key := range keys[:len(keys)-1] {
_, exists := (*subtree)[intermediate_key]
if !exists {
return false
}
switch node := (*subtree)[intermediate_key].(type) {
case *TomlTree:
subtree = node
case []*TomlTree:
// go to most recent element
if len(node) == 0 {
return false
}
subtree = node[len(node)-1]
}
}
return false
return true
}
// Keys returns the keys of the toplevel tree.
+22
View File
@@ -4,6 +4,28 @@ import (
"testing"
)
func TestTomlHas(t *testing.T) {
tree, _ := Load(`
[test]
key = "value"
`)
if !tree.Has("test.key") {
t.Errorf("Has - expected test.key to exists")
}
}
func TestTomlHasPath(t *testing.T) {
tree, _ := Load(`
[test]
key = "value"
`)
if !tree.HasPath([]string{"test", "key"}) {
t.Errorf("HasPath - expected test.key to exists")
}
}
func TestTomlGetPath(t *testing.T) {
node := make(TomlTree)
//TODO: set other node data