@@ -41,6 +41,8 @@ class Steps[EndDomain, EndGraph, Labels <: HList](val raw: GremlinScala[EndGraph
4141
4242 def head (): EndDomain = converter.toDomain(raw.head)
4343 def headOption (): Option [EndDomain ] = raw.headOption.map(converter.toDomain)
44+ def isDefined : Boolean = headOption().isDefined
45+
4446 override def clone () = new Steps [EndDomain , EndGraph , Labels ](raw.clone())
4547
4648 def dedup (): Steps [EndDomain , EndGraph , Labels ] =
@@ -230,5 +232,31 @@ class Steps[EndDomain, EndGraph, Labels <: HList](val raw: GremlinScala[EndGraph
230232 }
231233 )
232234
235+ /**
236+ * The or step is a filter with multiple or related filter traversals.
237+ */
238+ def or (orTraversals : (Steps [EndDomain , EndGraph , HNil ] => Steps [_, _, _])* )
239+ : Steps [EndDomain , EndGraph , Labels ] = {
240+ val rawOrTraversals = orTraversals.map {
241+ orTraversal => (rawTraversal : GremlinScala [EndGraph ]) =>
242+ orTraversal(
243+ new Steps [EndDomain , EndGraph , HNil ](
244+ rawTraversal.asInstanceOf [GremlinScala .Aux [EndGraph , HNil ]])
245+ ).raw
246+ }
247+
248+ new Steps [EndDomain , EndGraph , Labels ](
249+ raw.or(rawOrTraversals : _* )
250+ )
251+ }
252+
253+ /**
254+ * Step that orders nodes according to f.
255+ * */
256+ def orderBy [A ](fun : EndDomain => A ): Steps [EndDomain , EndGraph , Labels ] =
257+ new Steps [EndDomain , EndGraph , Labels ](raw.order(By { v : EndGraph =>
258+ fun(converter.toDomain(v))
259+ }))
260+
233261 override def toString = s " ${getClass.getSimpleName}( $raw) "
234262}
0 commit comments