diff --git a/graph/api/api.go b/graph/api/api.go index 95fe85f..4ddc5e3 100644 --- a/graph/api/api.go +++ b/graph/api/api.go @@ -61,9 +61,21 @@ func M(qs graph.QuadStore) *Path { } } +func (p *Path) Reverse() *Path { + newPath := M(p.qs) + for i := len(p.stack) - 1; i >= 0; i-- { + newPath.stack = append(newPath.stack, p.stack[i].Reversal()) + } + return newPath +} + func (p *Path) IsConcrete() bool { return p.it != nil } -func (p *Path) Tag(tags ...string) *Path { p.stack = append(p.stack, TagMorphism(tags...)); return p } +func (p *Path) Tag(tags ...string) *Path { + p.stack = append(p.stack, TagMorphism(tags...)) + return p +} + func (p *Path) Out(via ...interface{}) *Path { p.stack = append(p.stack, OutMorphism(p.qs, via...)) return p diff --git a/graph/api/api_test.go b/graph/api/api_test.go index 2b31327..fa2c407 100644 --- a/graph/api/api_test.go +++ b/graph/api/api_test.go @@ -69,10 +69,15 @@ type test struct { func testSet(qs graph.QuadStore) []test { return []test{ { - message: "out", + message: "use out", path: V(qs, "A").Out("follows"), expect: []string{"B"}, }, + { + message: "use in", + path: V(qs, "B").In("follows"), + expect: []string{"A", "C", "D"}, + }, } }