CILicense: MIT

Gremlex

An Elixir client for Apache TinkerPop™ aka Gremlin.

Gremlex does not support all functions (yet). It is pretty early on in it's development. But you can always use raw Gremlin queries by using Client.query("<Insert gremlin query>")

Installation

Install from Hex.pm:

def deps do
[
{:gremlex, "~> 0.4.2"}
]
end

Examples

Basic Usage

The two main modules that you'll want to use are Gremlex.Graph and Gremlex.Client.

Gremlex.Graph is the module that hosts all the functions needed to build a Gremlin query. The DSL is a simple set of functions that carries over a graph for every step. Once you've defined your query, you can simply call Gremlex.Client.query/1 to perform it.

iex(1)> alias Gremlex.Graph
Gremlex.Graph
iex(2)> alias Gremlex.Client
Gremlex.Client
iex(3)> Graph.g() |> Graph.v() |> Client.query
{:ok,
[
%Gremlex.Vertex{
id: 1,
label: "person",
properties: %{age: [29], name: ["marko"]}
}
]}

Gremlin Query to Gremlex

This gremlin query:

g.V().has("name","marko")
.out("knows")
.out("knows")
.values("name")

Would translate in Gremlex to:

Graph.g()
|> Graph.v()
|> Graph.has("name", "marko")
|> Graph.out("knows")
|> Graph.out("knows")
|> Graph.values("name")
|> Client.query

Raw Queries

Client.query("""
g.V().match(
__.as("a").out("knows").as("b"),
__.as("a").out("created").as("c"),
__.as("b").out("created").as("c"),
__.as("c").in("created").count().is(2)
)
.select("c").by("name")
""")

Configuration

You can configure Gremlex by adding the following to your config.exs:

config :gremlex,
host: "127.0.0.1",
port: 8182,
path: "/gremlin",
pool_size: 10,
max_overflow: 10,
secure: false,
ping_delay: 60_000,
opts: []

Parameters

Contributing

$ git clone https://github.com/coingaming/gremlex.git
$ cd gremlex
$ ./scripts/test.sh