Add RNode.Map method and test to help decoding.

This commit is contained in:
monopole
2021-01-09 06:57:01 -08:00
parent 6f2f401f6b
commit 1a002005c1
3 changed files with 47 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ require (
github.com/go-openapi/spec v0.19.5 github.com/go-openapi/spec v0.19.5
github.com/go-openapi/strfmt v0.19.5 github.com/go-openapi/strfmt v0.19.5
github.com/go-openapi/validate v0.19.8 github.com/go-openapi/validate v0.19.8
github.com/google/go-cmp v0.3.0
github.com/markbates/pkger v0.17.1 github.com/markbates/pkger v0.17.1
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00
github.com/qri-io/starlib v0.4.2-0.20200213133954-ff2e8cd5ef8d github.com/qri-io/starlib v0.4.2-0.20200213133954-ff2e8cd5ef8d

View File

@@ -785,6 +785,19 @@ func FromMap(m map[string]interface{}) (*RNode, error) {
return Parse(string(c)) return Parse(string(c))
} }
func (rn *RNode) Map() map[string]interface{} {
if rn == nil || rn.value == nil {
return make(map[string]interface{})
}
var result map[string]interface{}
if err := rn.value.Decode(&result); err != nil {
// Should not be able to create an RNode that cannot be decoded;
// this is an unrecoverable error.
log.Fatalf("failed to decode ynode: %v", err)
}
return result
}
// ConvertJSONToYamlNode parses input json string and returns equivalent yaml node // ConvertJSONToYamlNode parses input json string and returns equivalent yaml node
func ConvertJSONToYamlNode(jsonStr string) (*RNode, error) { func ConvertJSONToYamlNode(jsonStr string) (*RNode, error) {
var body map[string]interface{} var body map[string]interface{}

View File

@@ -8,6 +8,7 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@@ -384,6 +385,38 @@ func TestRNodeGetValidatedMetadata(t *testing.T) {
} }
} }
func TestRNodeMapEmpty(t *testing.T) {
assert.Equal(t, 0, len(NewRNode(nil).Map()))
}
func TestRNodeMap(t *testing.T) {
wn := NewRNode(nil)
if err := wn.UnmarshalJSON([]byte(`{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "homer",
"namespace": "simpsons"
}
}`)); err != nil {
t.Fatalf("unexpected unmarshaljson err: %v", err)
}
expected := map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "homer",
"namespace": "simpsons",
},
}
actual := wn.Map()
if diff := cmp.Diff(expected, actual); diff != "" {
t.Fatalf("actual map does not deep equal expected map:\n%v", diff)
}
}
func TestRNodeFromMap(t *testing.T) { func TestRNodeFromMap(t *testing.T) {
testConfigMap := map[string]interface{}{ testConfigMap := map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",