Don't overload the record constructors

Use 'from_erl' instead of 'new' when transforming erlang records into
elixir records.
This commit is contained in:
Carlos Martín Nieto
2013-08-12 14:35:32 +02:00
parent bd83f2fb0e
commit dea88e5a59
7 changed files with 19 additions and 17 deletions

View File

@@ -5,7 +5,7 @@ defmodule Geef.Blob do
def lookup(repo, id) do def lookup(repo, id) do
case :geef_obj.lookup(repo, id) do case :geef_obj.lookup(repo, id) do
{:ok, obj} -> {:ok, obj} ->
{:ok, Object.new obj} {:ok, Object.from_erl obj}
error -> error ->
error error
end end

View File

@@ -5,7 +5,7 @@ defmodule Geef.Commit do
def lookup(repo, id) do def lookup(repo, id) do
case :geef_commit.lookup(repo, id) do case :geef_commit.lookup(repo, id) do
{:ok, commit} -> {:ok, commit} ->
{:ok, Object.new commit} {:ok, Object.from_erl commit}
error -> error ->
error error
end end

View File

@@ -9,7 +9,8 @@ defrecord Geef.Iterator, Record.extract(:geef_iterator, from: "src/geef_records.
end end
end end
def new(iterator) do @spec from_erl(term()) :: t
def from_erl(iterator) do
set_elem(iterator, 0, Geef.Iterator) set_elem(iterator, 0, Geef.Iterator)
end end
@@ -17,7 +18,7 @@ defrecord Geef.Iterator, Record.extract(:geef_iterator, from: "src/geef_records.
iter = iter =
case :geef_ref.iterator(repo, regexp) do case :geef_ref.iterator(repo, regexp) do
{:ok, iter} -> {:ok, iter} ->
Iterator.new iter Iterator.from_erl iter
{:error, error} -> {:error, error} ->
raise Geef.IteratorError, message: error raise Geef.IteratorError, message: error
end end
@@ -27,7 +28,7 @@ defrecord Geef.Iterator, Record.extract(:geef_iterator, from: "src/geef_records.
defp do_stream(iter = Iterator[type: :ref], acc, fun) do defp do_stream(iter = Iterator[type: :ref], acc, fun) do
case :geef_ref.next(rebind(iter)) do case :geef_ref.next(rebind(iter)) do
{:ok, ref} -> {:ok, ref} ->
do_stream(iter, fun.(Reference.new(ref), acc), fun) do_stream(iter, fun.(Reference.from_erl(ref), acc), fun)
{:error, :iterover} -> {:error, :iterover} ->
acc acc
{:error, error} -> {:error, error} ->

View File

@@ -7,22 +7,22 @@ defrecord Geef.Object, Record.extract(:geef_object, from: "src/geef_records.hrl"
end end
end end
def new(obj) do def from_erl(obj) do
do_new(obj, elem(obj, 0)) do_from_erl(obj, elem(obj, 0))
end end
defp do_new(obj, :geef_tree) do defp do_from_erl(obj, :geef_tree) do
set_elem(obj, 0, Geef.Tree) set_elem(obj, 0, Geef.Tree)
end end
defp do_new(obj, _) do defp do_from_erl(obj, _) do
set_elem(obj, 0, Geef.Object) set_elem(obj, 0, Geef.Object)
end end
def lookup(repo, id) do def lookup(repo, id) do
case :geef_obj.lookup(repo, id) do case :geef_obj.lookup(repo, id) do
{:ok, obj} -> {:ok, obj} ->
{:ok, Geef.Object.new obj} {:ok, Geef.Object.from_erl obj}
error -> error ->
error error
end end

View File

@@ -8,11 +8,11 @@ defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_record
end end
end end
def new(ref) do def from_erl(ref) do
set_elem(ref, 0, Geef.Reference) set_elem(ref, 0, Geef.Reference)
end end
defp maybe_ref({:ok, ref}), do: {:ok, Reference.new ref} defp maybe_ref({:ok, ref}), do: {:ok, Reference.from_erl ref}
defp maybe_ref(err = {:error, _}), do: err defp maybe_ref(err = {:error, _}), do: err
def lookup(repo, name), do: :geef_ref.lookup(repo, name) |> maybe_ref def lookup(repo, name), do: :geef_ref.lookup(repo, name) |> maybe_ref
@@ -34,7 +34,7 @@ defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_record
def iterator(repo, regexp // :undefined) do def iterator(repo, regexp // :undefined) do
case :geef_ref.iterator(repo, regexp) do case :geef_ref.iterator(repo, regexp) do
{:ok, iter} -> {:ok, iter} ->
{:ok, Geef.Iterator.new iter} {:ok, Geef.Iterator.from_erl iter}
other -> other ->
other other
end end

View File

@@ -6,7 +6,7 @@ defmodule Geef.Tag do
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
{:ok, peeled} -> {:ok, peeled} ->
{:ok, Object.new peeled} {:ok, Object.from_erl peeled}
error -> error ->
error error
end end

View File

@@ -1,5 +1,6 @@
defrecord Geef.TreeEntry, Record.extract(:geef_tree_entry, from: "src/geef_records.hrl") do defrecord Geef.TreeEntry, Record.extract(:geef_tree_entry, from: "src/geef_records.hrl") do
def new(obj) do @spec from_erl(term()) :: t
def from_erl(obj) do
set_elem(obj, 0, Geef.TreeEntry) set_elem(obj, 0, Geef.TreeEntry)
end end
end end
@@ -13,13 +14,13 @@ defrecord Geef.Tree, Record.extract(:geef_object, from: "src/geef_records.hrl")
def lookup(repo, id) do def lookup(repo, id) do
case :geef_tree.lookup(repo, id) do case :geef_tree.lookup(repo, id) do
{:ok, obj} -> {:ok, obj} ->
{:ok, Object.new obj} {:ok, Object.from_erl obj}
error -> error ->
error error
end end
end end
defp maybe_entry({:ok, entry}), do: {:ok, TreeEntry.new entry} defp maybe_entry({:ok, entry}), do: {:ok, TreeEntry.from_erl entry}
defp maybe_entry(error = {:error, _}), do: error defp maybe_entry(error = {:error, _}), do: error
def get(tree, path), do: :geef_tree.get(rebind(tree), path) |> maybe_entry def get(tree, path), do: :geef_tree.get(rebind(tree), path) |> maybe_entry