Building out extraction and location code.

adding tests to extactraction functions.

Signed-off-by: Dave Shanley <dave@quobix.com>
This commit is contained in:
Dave Shanley
2022-08-27 13:21:20 -04:00
parent 51e1f62b04
commit 61a1317ffd
3 changed files with 79 additions and 7 deletions

View File

@@ -11,7 +11,6 @@ import (
"gopkg.in/yaml.v3"
"strconv"
"strings"
"sync"
)
func FindItemInMap[T any](item string, collection map[KeyReference[string]]ValueReference[T]) *ValueReference[T] {
@@ -23,8 +22,6 @@ func FindItemInMap[T any](item string, collection map[KeyReference[string]]Value
return nil
}
var mapLock sync.Mutex
func LocateRefNode(root *yaml.Node, idx *index.SpecIndex) *yaml.Node {
if rf, _, rv := utils.IsNodeRefValue(root); rf {
// run through everything and return as soon as we find a match.
@@ -80,7 +77,8 @@ func LocateRefNode(root *yaml.Node, idx *index.SpecIndex) *yaml.Node {
cleaned := strings.ReplaceAll(rv, "#/paths/", "")
cleaned = strings.ReplaceAll(cleaned, "/", ".")
cleaned = strings.ReplaceAll(cleaned, "~1", "/")
path, err := yamlpath.NewPath(fmt.Sprintf("$.paths.%s", cleaned))
yamlPath := fmt.Sprintf("$.paths.%s", cleaned)
path, err := yamlpath.NewPath(yamlPath)
if err == nil {
nodes, fErr := path.Find(idx.GetRootNode())
if fErr == nil {