#20 Read the top level keys only

This commit is contained in:
Ryan SIU 2020-01-10 16:34:31 +08:00 committed by Mike Farah
parent f18c5161e0
commit 3e83ff7ac8
3 changed files with 41 additions and 0 deletions

View File

@ -0,0 +1,6 @@
a:
b:
c: 1
d:
e: 2
f:

9
yq.go
View File

@ -25,6 +25,7 @@ var writeInplace = false
var writeScript = ""
var outputToJSON = false
var overwriteFlag = false
var keyOnlyFlag = false
var allowEmptyFlag = false
var appendFlag = false
var verbose = false
@ -111,6 +112,7 @@ yq r -- things.yaml --key-starting-with-dashes
}
cmdRead.PersistentFlags().StringVarP(&docIndex, "doc", "d", "0", "process document index number (0 based, * for all documents)")
cmdRead.PersistentFlags().BoolVarP(&outputToJSON, "tojson", "j", false, "output as json")
cmdRead.PersistentFlags().BoolVarP(&keyOnlyFlag, "keyonly", "k", false, "output with top level keys only")
return cmdRead
}
@ -304,6 +306,13 @@ func readProperty(cmd *cobra.Command, args []string) error {
dataBucket = mappedDocs
}
if keyOnlyFlag {
for _, value := range dataBucket.(yaml.MapSlice) {
cmd.Println(value.Key)
}
return nil
}
dataStr, err := toString(dataBucket)
if err != nil {
return err

View File

@ -1,12 +1,14 @@
package main
import (
"bytes"
"fmt"
"runtime"
"testing"
"github.com/mikefarah/yq/v2/pkg/marshal"
"github.com/mikefarah/yq/v2/test"
"github.com/spf13/cobra"
)
func TestMultilineString(t *testing.T) {
@ -58,3 +60,27 @@ func TestNewYaml_WithUnknownScript(t *testing.T) {
}
test.AssertResult(t, expectedOutput, err.Error())
}
func TestReadWithKeyOnly(t *testing.T) {
readCmd := createReadCmd()
expectedResult := `b
d
f
`
actualResult, err := executeTestCommand(readCmd, "test/fixture/keyonly.yaml", "a", "-k")
if err != nil {
t.Error(err.Error())
}
test.AssertResult(t, expectedResult, actualResult)
}
func executeTestCommand(command *cobra.Command, args ...string) (output string, err error) {
buf := new(bytes.Buffer)
command.SetOutput(buf)
command.SetArgs(args)
_, err = command.ExecuteC()
return buf.String(), err
}