Skip to content

Commit 5bb0934

Browse files
author
Mike Farah
committed
Handle arrays and strings when reading
1 parent cdd78af commit 5bb0934

File tree

5 files changed

+45
-12
lines changed

5 files changed

+45
-12
lines changed

sample_array.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[1,2,3]

sample_text.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hi

vendor/vendor.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"comment": "",
3+
"ignore": "test",
4+
"package": [],
5+
"rootPath": "github.com/mikefarah/yaml"
6+
}

yaml.go

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,26 @@ func readProperty(cmd *cobra.Command, args []string) {
117117
}
118118

119119
func read(args []string) interface{} {
120-
var parsedData yaml.MapSlice
121120

122-
readData(args[0], &parsedData, inputJSON)
121+
var parsedData yaml.MapSlice
122+
var path = ""
123+
if len(args) > 1 {
124+
path = args[1]
125+
}
126+
err := readData(args[0], &parsedData, inputJSON)
127+
if err != nil {
128+
var generalData interface{}
129+
readDataOrDie(args[0], &generalData, inputJSON)
130+
item := yaml.MapItem{Key: "thing", Value: generalData}
131+
parsedData = yaml.MapSlice{item}
132+
path = "thing." + path
133+
}
123134

124-
if len(args) == 1 {
135+
if path == "" {
125136
return parsedData
126137
}
127138

128-
var paths = parsePath(args[1])
139+
var paths = parsePath(path)
129140

130141
return readMap(parsedData, paths[0], paths[1:len(paths)])
131142
}
@@ -141,7 +152,7 @@ func newProperty(cmd *cobra.Command, args []string) {
141152
func newYaml(args []string) interface{} {
142153
var writeCommands yaml.MapSlice
143154
if writeScript != "" {
144-
readData(writeScript, &writeCommands, false)
155+
readDataOrDie(writeScript, &writeCommands, false)
145156
} else if len(args) < 2 {
146157
die("Must provide <path_to_update> <value>")
147158
} else {
@@ -179,7 +190,7 @@ func updateParsedData(parsedData yaml.MapSlice, writeCommands yaml.MapSlice) yam
179190
func updateYaml(args []string) interface{} {
180191
var writeCommands yaml.MapSlice
181192
if writeScript != "" {
182-
readData(writeScript, &writeCommands, false)
193+
readDataOrDie(writeScript, &writeCommands, false)
183194
} else if len(args) < 3 {
184195
die("Must provide <filename> <path_to_update> <value>")
185196
} else {
@@ -188,7 +199,7 @@ func updateYaml(args []string) interface{} {
188199
}
189200

190201
var parsedData yaml.MapSlice
191-
readData(args[0], &parsedData, inputJSON)
202+
readDataOrDie(args[0], &parsedData, inputJSON)
192203

193204
return updateParsedData(parsedData, writeCommands)
194205
}
@@ -234,7 +245,14 @@ func yamlToString(context interface{}) string {
234245
return outStr
235246
}
236247

237-
func readData(filename string, parsedData interface{}, readAsJSON bool) {
248+
func readDataOrDie(filename string, parsedData interface{}, readAsJSON bool) {
249+
err := readData(filename, parsedData, readAsJSON)
250+
if err != nil {
251+
die("error parsing data: ", err)
252+
}
253+
}
254+
255+
func readData(filename string, parsedData interface{}, readAsJSON bool) error {
238256
if filename == "" {
239257
die("Must provide filename")
240258
}
@@ -246,10 +264,7 @@ func readData(filename string, parsedData interface{}, readAsJSON bool) {
246264
rawData = readFile(filename)
247265
}
248266

249-
err := yaml.Unmarshal([]byte(rawData), parsedData)
250-
if err != nil {
251-
die("error parsing data: ", err)
252-
}
267+
return yaml.Unmarshal([]byte(rawData), parsedData)
253268
}
254269

255270
func readStdin() []byte {

yaml_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ func TestRead(t *testing.T) {
2828
assertResult(t, 2, result)
2929
}
3030

31+
func TestReadArray(t *testing.T) {
32+
result := read([]string{"sample_array.yaml", "[1]"})
33+
assertResult(t, 2, result)
34+
}
35+
36+
func TestReadString(t *testing.T) {
37+
result := read([]string{"sample_text.yaml"})
38+
assertResult(t, "hi", result)
39+
}
40+
3141
func TestOrder(t *testing.T) {
3242
result := read([]string{"order.yaml"})
3343
formattedResult := yamlToString(result)

0 commit comments

Comments
 (0)