Skip to content

Commit 182dacf

Browse files
committed
add additional delimiter for yaml paths
1 parent bc11990 commit 182dacf

File tree

9 files changed

+85
-6
lines changed

9 files changed

+85
-6
lines changed

cmd/goml/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func main() {
2020
}
2121
cmd.Name = "goml"
2222
cmd.Usage = "CLI Tool to do CRUD like manipulation on YAML files"
23-
cmd.Version = "0.2.0"
23+
cmd.Version = "0.3.0"
2424
cmd.Commands = []cli.Command{
2525
{
2626
Name: "get",

delete.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func Delete(yml *simpleyaml.Yaml, path string) error {
8282
return nil
8383
}
8484

85-
if strings.Contains(propName, ":") {
85+
if strings.Contains(propName, ":") || strings.Contains(propName, "|") {
8686
tmp, props := get(yml, newPath)
8787
prop, err := tmp.Array()
8888
if err != nil {

delete_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,41 @@ mapArray:
8383
_, err = Get(yml, "mapArray.foo:bar.arr.:two")
8484
Expect(err).To(MatchError("property not found"))
8585
})
86+
87+
Context("Using the | delimiter", func() {
88+
It("should delete a value from an array ", func() {
89+
err = Delete(yml, "array.0")
90+
Expect(err).NotTo(HaveOccurred())
91+
92+
_, err := Get(yml, "array.|bar")
93+
Expect(err).To(MatchError("property not found"))
94+
95+
err = Delete(yml, "array.|zar")
96+
Expect(err).NotTo(HaveOccurred())
97+
_, err = Get(yml, "array.|zar")
98+
Expect(err).To(MatchError("property not found"))
99+
})
100+
101+
It("should delete a value from an map inside an array ", func() {
102+
err = Delete(yml, "mapArray.foo|bar.zoo")
103+
Expect(err).NotTo(HaveOccurred())
104+
105+
_, err := Get(yml, "mapArray.foo|bar.zoo")
106+
Expect(err).To(HaveOccurred())
107+
})
108+
109+
It("should delete a value from an array inside a map which in turn is inside an array ", func() {
110+
err = Delete(yml, "mapArray.foo|bar.arr.0")
111+
Expect(err).NotTo(HaveOccurred())
112+
113+
_, err := Get(yml, "mapArray.foo|bar.arr.|one")
114+
Expect(err).To(MatchError("property not found"))
115+
116+
err = Delete(yml, "mapArray.foo|bar.arr.|two")
117+
Expect(err).NotTo(HaveOccurred())
118+
119+
_, err = Get(yml, "mapArray.foo|bar.arr.|two")
120+
Expect(err).To(MatchError("property not found"))
121+
})
122+
})
86123
})

get.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func get(yml *simpleyaml.Yaml, path string) (*simpleyaml.Yaml, []string) {
6565
continue
6666
}
6767

68-
if strings.Contains(p, ":") {
68+
if strings.Contains(p, ":") || strings.Contains(p, "|") {
6969
if prop, err := yml.Array(); err == nil {
7070
index, err := returnIndexForProp(p, prop)
7171
if err != nil {

get20.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package goml
22

3-
func Get(file []byte, path string) (string, error) {
3+
//func Get(file []byte, path string) (string, error) {
44

5-
}
5+
//}

get_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,24 @@ mapArray:
6060
Expect(err).NotTo(HaveOccurred())
6161
Expect(value).To(Equal("one"))
6262
})
63+
64+
Context("Using the | delimiter", func() {
65+
It("should get a value from a array inside a map", func() {
66+
value, err := Get(yml, "mapArray.foo|bar.arr.0")
67+
Expect(err).NotTo(HaveOccurred())
68+
Expect(value).To(Equal("one"))
69+
})
70+
71+
It("should get a vlaue from a map", func() {
72+
value, err := Get(yml, "mapArray.foo|var.boo")
73+
Expect(err).NotTo(HaveOccurred())
74+
Expect(value).To(Equal("laa"))
75+
})
76+
77+
It("should get a value form an array", func() {
78+
value, err := Get(yml, "array.|var")
79+
Expect(err).NotTo(HaveOccurred())
80+
Expect(value).To(Equal("var"))
81+
})
82+
})
6383
})

set.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func Set(yml *simpleyaml.Yaml, path string, val interface{}) error {
118118
return nil
119119
}
120120

121-
if strings.Contains(propName, ":") {
121+
if strings.Contains(propName, ":") || strings.Contains(propName, "|") {
122122
tmp, props := get(yml, newPath)
123123
prop, err := tmp.Array()
124124
if err != nil {

set_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,18 @@ mapArray:
6969
Expect(Get(yml, "mapArray.luffy:gomugomuno.beat")).To(Equal("katakuri"))
7070
})
7171
})
72+
73+
Context("using the | delimiter", func() {
74+
It("should add an value to an array", func() {
75+
err = Set(yml, "mapArray.foo|var.boo", "baymax")
76+
Expect(err).NotTo(HaveOccurred())
77+
Expect(Get(yml, "mapArray.foo|var.boo")).To(Equal("baymax"))
78+
err = Set(yml, "array.+", "pikachu")
79+
Expect(Get(yml, "array.|pikachu")).To(Equal("pikachu"))
80+
err = Set(yml, "array.|pikachu", "ruffy")
81+
Expect(Get(yml, "array.|ruffy")).To(Equal("ruffy"))
82+
err = Set(yml, "mapArray.foo|bar.arr.0", "new")
83+
Expect(Get(yml, "mapArray.foo|bar.arr.0")).To(Equal("new"))
84+
})
85+
})
7286
})

utils.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ func ReadYamlFromFile(filename string) (*simpleyaml.Yaml, error) {
108108

109109
func returnIndexForProp(propName string, array []interface{}) (int, error) {
110110
keyVal := strings.Split(propName, ":")
111+
if len(keyVal) < 2 {
112+
keyVal = strings.Split(propName, "|")
113+
}
114+
111115
key, val := keyVal[0], keyVal[1]
112116

113117
for i, _ := range array {
@@ -131,6 +135,10 @@ func returnIndexForProp(propName string, array []interface{}) (int, error) {
131135

132136
func createArrayEntry(propName string, array *[]interface{}) int {
133137
keyVal := strings.Split(propName, ":")
138+
if len(keyVal) < 2 {
139+
keyVal = strings.Split(propName, "|")
140+
}
141+
134142
key, val := keyVal[0], keyVal[1]
135143
fmt.Println("KEY:", key, "VAL", val)
136144
m := make(map[interface{}]interface{})

0 commit comments

Comments
 (0)