mirror of
https://github.com/mikefarah/yq.git
synced 2024-12-19 20:19:04 +00:00
Fixed write bug: can now update yaml with single key in path
This commit is contained in:
parent
8409be1cdf
commit
7db31006da
@ -7,12 +7,16 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func write(context map[interface{}]interface{}, head string, tail []string, value interface{}) {
|
func write(context map[interface{}]interface{}, head string, tail []string, value interface{}) {
|
||||||
|
if len(tail) == 0 {
|
||||||
|
context[head] = value
|
||||||
|
} else {
|
||||||
// e.g. if updating a.b.c, we need to get the 'b' map...
|
// e.g. if updating a.b.c, we need to get the 'b' map...
|
||||||
toUpdate := readMap(context, head, tail[0:len(tail)-1]).(map[interface{}]interface{})
|
toUpdate := readMap(context, head, tail[0:len(tail)-1]).(map[interface{}]interface{})
|
||||||
// and then set the 'c' key.
|
// and then set the 'c' key.
|
||||||
key := (tail[len(tail)-1])
|
key := (tail[len(tail)-1])
|
||||||
toUpdate[key] = value
|
toUpdate[key] = value
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func readMap(context map[interface{}]interface{}, head string, tail []string) interface{} {
|
func readMap(context map[interface{}]interface{}, head string, tail []string) interface{} {
|
||||||
value := context[head]
|
value := context[head]
|
||||||
|
@ -68,6 +68,14 @@ func TestWrite_simple(t *testing.T) {
|
|||||||
assertResult(t, "4", b["c"].(string))
|
assertResult(t, "4", b["c"].(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWrite_with_no_tail(t *testing.T) {
|
||||||
|
|
||||||
|
write(parsedData, "b", []string{}, "4")
|
||||||
|
|
||||||
|
b := parsedData["b"]
|
||||||
|
assertResult(t, "4", fmt.Sprintf("%v", b))
|
||||||
|
}
|
||||||
|
|
||||||
func assertResult(t *testing.T, expectedValue interface{}, actualValue interface{}) {
|
func assertResult(t *testing.T, expectedValue interface{}, actualValue interface{}) {
|
||||||
if expectedValue != actualValue {
|
if expectedValue != actualValue {
|
||||||
t.Error("Expected <", expectedValue, "> but got <", actualValue, ">", fmt.Sprintf("%T", actualValue))
|
t.Error("Expected <", expectedValue, "> but got <", actualValue, ">", fmt.Sprintf("%T", actualValue))
|
||||||
|
Loading…
Reference in New Issue
Block a user