Current section
Files
Jump to
Current section
Files
lib/mongo_helpers.ex
defmodule Mongo.Helpers do
@moduledoc "Helper macros"
defmacro __using__(_opts) do
quote do
import Mongo.Helpers
end
end
@doc """
Helps defining a function like `count!` calling function `count`
When `count` returns `{:ok, value}`, `count!` returns `value`
When `count` returns `{:error, reason}`, `count!` raises an exception
"""
defmacro defbang({ name, _, args }) do
unless args |> is_list do
args = []
end
{:__block__, [], quoted} =
quote bind_quoted: [name: Macro.escape(name), args: Macro.escape(args)] do
def unquote(to_string(name) <> "!" |> String.to_atom)(unquote_splicing(args)) do
case unquote(name)(unquote_splicing(args)) do
:ok -> :ok
nil -> nil
{ :ok, result } -> result
{ :error, reason } -> raise Mongo.Bang, msg: reason, acc: unquote(args)
%{msg: msg, acc: acc}=err -> raise Mongo.Bang, msg: msg, acc: acc
end
end
end
{:__block__, [], [{:@, [context: Mongo.Helpers, import: Kernel], [{:doc, [], ["See "<>to_string(name)<>"/"<>to_string(args |> length)]}]}|quoted]}
end
@doc """
Feeds sample data into a collection of database `test`
"""
def test_collection(collname) do
mongo = Mongo.connect!
db = Mongo.db(mongo, "test")
collection = Mongo.Db.collection(db, collname)
Mongo.Collection.drop collection
[
%{a: 0, value: 0},
%{a: 1, value: 1},
%{a: 2, value: 1},
%{a: 3, value: 1},
%{a: 4, value: 1},
%{a: 5, value: 3} ] |> Mongo.Collection.insert(collection)
collection
end
end