Refactor elixir code

This should lead to better overview
This commit is contained in:
Carlos Martín Nieto
2013-06-11 23:01:28 +02:00
parent 44dbf9a78b
commit 2f20e18b56
5 changed files with 27 additions and 81 deletions

View File

@@ -13,4 +13,7 @@ defmodule Geef do
end end
end end
def assert_ok({:ok, ref}), do: ref
def assert_ok({:error, error}), do: raise error
end end

View File

@@ -1,63 +1,30 @@
defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") do defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") do
alias Geef.Repository import Geef
alias Geef.Reference alias Geef.Reference
def lookup(repo, name) do defmacrop rebind(obj) do
case :geef_ref.lookup(repo, name) do quote do
{:ok, ref} -> set_elem(unquote(obj), 0, :geef_reference)
{:ok, Geef.Reference.new ref}
error ->
error
end end
end end
def lookup!(repo, name) do
case lookup(repo, name) do
{:ok, ref} ->
ref
{:error, err} ->
raise err
end
end
def resolve(ref = Geef.Reference[]) do defp maybe_ref({:ok, ref}), do: {:ok, Reference.new ref}
case :geef_ref.resolve(set_elem(ref, 0, :geef_reference)) do defp maybe_ref(err = {:error, _}), do: err
{:ok, ref} ->
{:ok, Geef.Reference.new ref}
error ->
error
end
end
def resolve!(ref = Geef.Reference[]) do def lookup(repo, name), do: :geef_ref.lookup(repo, name) |> maybe_ref
case resolve(ref) do def lookup!(repo, name), do: lookup(repo, name) |> assert_ok
{:ok, resolved} ->
resolved
{:error, err} ->
raise err
end
end
def dwim(repo, name) do def resolve(ref = Reference[]), do: :geef_ref.resolve(rebind(ref)) |> maybe_ref
case :geef_ref.dwim(repo, name) do def resolve!(ref =Reference[]), do: resolve(ref) |> assert_ok
{:ok, ref} ->
{:ok, Geef.Reference.new ref}
error ->
error
end
end
def dwim!(repo, name) do def dwim(repo, name), do: :geef_ref.dwim(repo, name) |> maybe_ref
case dwim(repo, name) do def dwim!(repo, name), do: dwim(repo, name) |> assert_ok
{:ok, ref} -> ref
{:error, err} -> raise err
end
end
def shorthand(Reference[name: name]) do def shorthand(Reference[name: name]) do
:geef_ref.shorthand(name) :geef_ref.shorthand(name)
end end
def shorthane(name) do def shorthand(name) do
:geef_ref.shorthand(name) :geef_ref.shorthand(name)
end end

View File

@@ -1,36 +1,16 @@
defmodule Geef.Repository do defmodule Geef.Repository do
import Geef
def stop(repo), do: :geef_repo.stop(repo) def stop(repo), do: :geef_repo.stop(repo)
def open(path), do: :geef_repo.open(path) def open(path), do: :geef_repo.open(path)
def open!(path) do def open!(path), do: :geef_repo.open(path) |> assert_ok
case :geef_repo.open(path) do
{:ok, pid} ->
pid
{:error, err} ->
raise err
end
end
def init(path, bare), do: :geef_repo.open(path, bare) def init(path, bare), do: :geef_repo.init(path, bare)
def init!(path, bare) do def init!(path, bare), do: :geef_repo.init(path, bare) |> assert_ok
case :geef_repo.init(path, bare) do
{:ok, pid} ->
pid
{:error, err} ->
raise err
end
end
def odb(repo), do: :geef_repo.odb(repo) def odb(repo), do: :geef_repo.odb(repo)
def odb!(repo) do def odb!(repo), do: :geef_repo.odb(repo) |> assert_ok
case :geef_repo.odb(repo) do
{:ok, pid} ->
pid
{:error, err} ->
raise err
end
end
def discover(path), do: :geef_repo.disover(path) def discover(path), do: :geef_repo.disover(path)

View File

@@ -3,7 +3,7 @@ defrecord Geef.Signature, Record.extract(:geef_signature, from: "src/geef_record
def new(name, email), do: :geef_sig.new(name, email) |> maybe_sig def new(name, email), do: :geef_sig.new(name, email) |> maybe_sig
def new(name, email, time), do: :geef_sig.new(name, email, time) |> maybe_sig def new(name, email, time), do: :geef_sig.new(name, email, time) |> maybe_sig
defp maybe_sig({ok, sig}), do: {ok, Geef.Signature.new sig} defp maybe_sig({:ok, sig}), do: Geef.Signature.new(sig)
defp maybe_sig(error), do: error defp maybe_sig({:error, error}), do: raise error
end end

View File

@@ -1,6 +1,7 @@
defmodule Geef.Tag do defmodule Geef.Tag do
alias Geef.Object alias Geef.Object
import :macros, Object import :macros, Object
import Geef
def peel(tag = Object[type: :tag]) do def peel(tag = Object[type: :tag]) do
case :geef_tag.peel(rebind(tag)) do case :geef_tag.peel(rebind(tag)) do
@@ -11,11 +12,6 @@ defmodule Geef.Tag do
end end
end end
def peel!(tag = Object[type: :tag]) do def peel!(tag = Object[type: :tag]), do: peel(tag) |> assert_ok
case peel(tag) do
{:ok, peeled} -> peeled
{:error, err} -> raise err
end
end
end end