# Unreal

Unofficial SurrealDB client for Elixir. Supports both WebSocket and HTTP connection.

**NOTE**: Currently, Unreal is complete library for simple projects. But I am trying to improve it for large projects.

## Installation

Add `unreal` to your list of dependencies in `mix.exs`:

def deps do
    {:unreal, "~> 0.1.0"}

## Usage

### Simple WebSocket Connection

config = %Unreal.Core.Config{
  host: "ws://",
  username: "root",
  password: "root",
  database: "test",
  namespace: "test"

{:ok, pid} = Unreal.start_link(protocol: :websocket, config: config, name: :database)

Unreal.insert(pid, "users", "bob", %{age: 18, active: true})
Unreal.get(:database, "users")

### With Supervisor

children = [
    protocol: :websocket,
    config: %Unreal.Core.Config{
      host: "ws://",
      username: "root",
      password: "root",
      namespace: "test",
      database: "test"
    name: :database}

opts = [strategy: :one_for_one, name: Example.Supervisor]

Supervisor.start_link(children, opts)
Unreal.insert(:database, "users", "bob", %{age: 18, active: true})

### With Tables

This macro allows you to use a table directly. Adds `insert`, `update`, `get`, `change`, `modify` and `delete` functions.

defmodule Users do
  # name: the name of the connection
  # table: table to use
  use Unreal.Table, name: :database, table: "users"


### Queries

**NOTE**: Sending a variable to query is not supported in HTTP connection.

Unreal.query(:database, "SELECT * FROM users")
Unreal.query(:database, "SELECT * FROM users WHERE age > $age", %{
  age: 30

## Documentation

Documentation is avaible at [HexDocs](

## Contributing

- Please don't send any pull request to main branch.
- Report bugs or request features [here](
- Always use `mix format` before sending a pull request.

## License

Unreal is licensed under the MIT License.