diff --git a/depgraph/graph.go b/depgraph/graph.go index ab980ccbc8..a7d92403eb 100644 --- a/depgraph/graph.go +++ b/depgraph/graph.go @@ -109,6 +109,17 @@ func (g *Graph) CheckConstraints() error { return nil } +// Noun returns the noun with the given name, or nil if it cannot be found. +func (g *Graph) Noun(name string) *Noun { + for _, n := range g.Nouns { + if n.Name == name { + return n + } + } + + return nil +} + // String generates a little ASCII string of the graph, useful in // debugging output. func (g *Graph) String() string { diff --git a/depgraph/graph_test.go b/depgraph/graph_test.go index 1251cfd86a..a6dc60a1f2 100644 --- a/depgraph/graph_test.go +++ b/depgraph/graph_test.go @@ -55,6 +55,28 @@ func NounMapToList(m map[string]*Noun) []*Noun { return list } +func TestGraph_Noun(t *testing.T) { + nodes := ParseNouns(`a -> b +a -> c +b -> d +b -> e +c -> d +c -> e`) + + g := &Graph{ + Name: "Test", + Nouns: NounMapToList(nodes), + } + + n := g.Noun("a") + if n == nil { + t.Fatal("should not be nil") + } + if n.Name != "a" { + t.Fatalf("bad: %#v", n) + } +} + func TestGraph_String(t *testing.T) { nodes := ParseNouns(`a -> b a -> c