////
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
////
image::apache-tinkerpop-logo.png[width=500,link="https://tinkerpop.apache.org"]

*x.y.z*

:toc-position: left

= Recipes

image:gremlin-chef.png[width=120,float=left] All programming languages tend to have
link:https://en.wikipedia.org/wiki/Software_design_pattern[patterns of usage] for commonly occurring problems. Gremlin
is not different in that respect. There are many commonly occurring traversal themes that have general applicability
to any graph. Gremlin Recipes present these common traversal patterns and methods of usage that will
provide some basic building blocks for virtually any graph in any domain.

Recipes assume general familiarity with Gremlin and the Apache TinkerPop™ stack. Be sure to have read the
link:https://tinkerpop.apache.org/docs/x.y.z/tutorials/getting-started[Getting Started] tutorial and the
link:https://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/[The Gremlin Console] tutorial.

= Traversal Recipes

include::between-vertices.asciidoc[]

include::centrality.asciidoc[]

include::collections.asciidoc[]

include::connected-components.asciidoc[]

include::cycle-detection.asciidoc[]

include::duplicate-edge.asciidoc[]

include::duplicate-vertex.asciidoc[]

include::edge-move.asciidoc[]

include::element-existence.asciidoc[]

include::if-then-based-grouping.asciidoc[]

include::pagination.asciidoc[]

include::recommendation.asciidoc[]

include::shortest-path.asciidoc[]

include::traversal-induced-values.asciidoc[]

include::tree.asciidoc[]

include::olap-spark-yarn.asciidoc[]

= Anti-Patterns

image:gremlin-anti-gremlin.png[width=250]

include::anti-patterns.asciidoc[]

= Implementation Recipes

include::style-guide.asciidoc[]

include::traversal-component-reuse.asciidoc[]

[[contributing]]
= How to Contribute a Recipe

Recipes are generated under the same system as all TinkerPop documentation and is stored directly in the source code
repository. TinkerPop documentation is all link:http://asciidoc.org/[asciidoc] based and can be generated locally with
either link:https://tinkerpop.apache.org/docs/x.y.z/dev/developer/#building-testing[shell script/Maven] or
link:https://tinkerpop.apache.org/docs/x.y.z/dev/developer/#docker-integration[Docker] build commands. Once
changes are complete, submit a pull request for review by TinkerPop committers.

NOTE: Please review existing recipes and attempt to conform to their writing and visual style. It may also be a good
idea to discuss ideas for a recipe on the link:+++https://lists.apache.org/list.html?dev@tinkerpop.apache.org+++[developer mailing list]
prior to starting work on it, as the community might provide insight on the approach and idea that would be helpful.
It is preferable that a link:https://issues.apache.org/jira/browse/TINKERPOP[JIRA issue] be opened that describes the nature
of the recipe so that the eventual pull request can be bound to that issue.

IMPORTANT: Please read TinkerPop's link:https://tinkerpop.apache.org/docs/x.y.z/dev/developer/#_contributing[policy on contributing]
prior to submitting a recipe.

To contribute a recipe, first clone the repository:

[source,shell]
git clone https://github.com/apache/tinkerpop.git

The recipes can be found in this directory:

[source,shell]
ls docs/src/recipes

Each recipe exists within a separate `.asciidoc` file.  The file name should match the name of the recipe. Recipe names
should be short, but descriptive (as they need to fit in the left-hand table of contents when generated). The
`index.asciidoc` is the parent document that "includes" the content of each individual recipe file. A recipe file is
included in the `index.asciidoc` with an entry like this: `include::my-recipe.asciidoc[]`

Documentation should be generated locally for review prior to submitting a pull request. TinkerPop documentation is
"live" in that it is bound to a specific version when generated. Furthermore, code examples (those that are
`gremlin-groovy` based) are executed at document generation time with the results written directly into the output.
The following command will generate the documentation with:

[source,shell]
bin/process-docs.sh

The generated documentation can be found at `target/docs/htmlsingle/recipes`. This process can be long on the first
run of the documentation as it is generating all of the documentation locally (e.g. reference documentation,
tutorials, etc). To generate just the recipes, follow this process:

[source,shell]
bin/process-docs.sh -f docs/src/recipes

The `bin/process-docs.sh` approach requires that Hadoop is installed. To avoid that prerequisite, try using Docker:

[source,shell]
docker/build.sh -d

The downside to using Docker is that the process will take longer as each run will require the entire documentation set
to be generated.

The final step to submitting a recipe is to issue a link:https://help.github.com/articles/using-pull-requests/[pull request through GitHub].
It is helpful to prefix the name of the pull request with the JIRA issue number, so that TinkerPop's automation between
GitHub and JIRA are linked.  As mentioned earlier in this section, the recipe will go under review by TinkerPop
committers prior to merging. This process may take several days to complete. We look forward to receiving your
submissions!

include::appendix.asciidoc[]
