Skip to content

Instantly share code, notes, and snippets.

@AdamBrodzinski
Forked from sikanhe/rethinkdb_helpers.ex
Created February 26, 2016 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AdamBrodzinski/cbb10759711c805e765e to your computer and use it in GitHub Desktop.
Save AdamBrodzinski/cbb10759711c805e765e to your computer and use it in GitHub Desktop.
helpers for rethinkdb elixir
defmodule RethinkDB.Helpers do
def run(query) do
query
|> do_run
|> handle_response
end
def handle_response(%RethinkDB.Exception.ConnectionClosed{}) do
raise "Cannot connect to RethinkDB"
end
def handle_response(%{data: data}) do
case data do
# Errors
%{"first_error" => error} -> {:error, error}
%{"r" => errors} ->
# This should always be a DB error, so it is exceptonal (returns 500)
raise List.first errors
# Inserts
%{"errors" => 0, "inserted" => 1, "generated_keys" => keys} ->
{:ok, List.first keys}
%{"errors" => 0, "inserted" => number, "generated_keys" => keys} when number >= 1 ->
{:ok, number}
# Updates
%{"replaced" => 0, "skipped" => 1} -> {:error, :not_found}
%{"replaced" => number, "skipped" => 0} when number > 0 -> {:ok, number}
# Deletes
%{"deleted" => 0, "skipped" => 1} -> {:error, :not_found}
%{"deleted" => number, "skipped" => 0} when number > 0 -> {:ok, number}
_ ->
data
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment