Merge pull request #18 from simia-tech/master
extended Has function to work with paths
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user