Don't overload the record constructors
Use 'from_erl' instead of 'new' when transforming erlang records into elixir records.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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} ->
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user