Packages

Low-level driver for ArangoDB

Current section

Files

Jump to
arango lib arangoex database.ex
Raw

lib/arangoex/database.ex

defmodule Arangoex.Database do
@moduledoc "ArangoDB Database methods"
alias Arangoex.Endpoint
defstruct [:id, :name, :isSystem, :path, :users]
use ExConstructor
@type t :: %__MODULE__{
id: String.t,
name: String.t,
isSystem: boolean,
path: String.t,
users: [String.t],
}
@doc """
Create database
POST /_api/database
"""
@spec create(Endpoint.t, Database.t) :: Arangoex.ok_error(any())
def create(endpoint, db) do
endpoint
|> Endpoint.with_db("_system")
|> Endpoint.post("database", db)
|> decode_result
end
@doc """
Drop database
DELETE /_api/database/{database-name}
"""
@spec drop(%Arangoex.Endpoint{}, String.t) :: Arangoex.ok_error(true)
def drop(endpoint, db) do
endpoint
|> Endpoint.with_db("_system")
|> Endpoint.delete("database/#{db}")
|> decode_result
end
@doc """
Information about a database
GET /_api/database/current
"""
@spec database(Endpoint.t, String.t) :: Arangoex.ok_error(t)
def database(endpoint, db) do
endpoint
|> Endpoint.with_db(db)
|> Endpoint.get("database/current")
|> decode_result
end
@doc """
List of databases
GET /_api/database
"""
@spec databases(Endpoint.t) :: Arangoex.ok_error([String.t])
def databases(endpoint) do
endpoint
|> Endpoint.with_db("_system")
|> Endpoint.get("database")
|> decode_result
end
@doc """
List of accessible databases
GET /_api/database/user
"""
@spec user_databases(Endpoint.t) :: Arangoex.ok_error([String.t])
def user_databases(endpoint) do
endpoint
|> Endpoint.with_db("_system")
|> Endpoint.get("database/user")
|> decode_result
end
@spec decode_result(Arangoex.ok_error(any())) :: Arangoex.ok_error(any())
defp decode_result({:ok, %{"result" => %{} = result}}), do: {:ok, new(result)}
defp decode_result({:ok, %{"result" => result}}), do: {:ok, result}
defp decode_result({:error, _} = e), do: e
end