diff --git a/lib/geef/object.ex b/lib/geef/object.ex index 7be72a9..b8958e4 100644 --- a/lib/geef/object.ex +++ b/lib/geef/object.ex @@ -1,10 +1,16 @@ -defrecord :geef_object, Record.extract(:geef_object, from: "src/geef_records.hrl") +defrecord Geef.Object, Record.extract(:geef_object, from: "src/geef_records.hrl") do -defmodule Geef.Object do - - def lookup(repo, id), do: :geef_obj.lookup(repo, id) - def lookup!(repo, id) do + def lookup(repo, id) do case :geef_obj.lookup(repo, id) do + {:ok, obj} -> + {:ok, Geef.Object.new obj} + error -> + error + end + end + + def lookup!(repo, id) do + case lookup(repo, id) do {:ok, obj} -> obj {:error, err} -> @@ -12,7 +18,4 @@ defmodule Geef.Object do end end - - def lookup(repo, id, type), do: :geef_obj.lookup(repo, id, type) - end diff --git a/lib/geef/reference.ex b/lib/geef/reference.ex index 2c4bac5..521ebb2 100644 --- a/lib/geef/reference.ex +++ b/lib/geef/reference.ex @@ -1,9 +1,15 @@ -defrecord :geef_reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") - -defmodule Geef.Reference do +defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") do alias Geef.Repository - def lookup(repo, name), do: :geef_ref.lookup(repo, name) + def lookup(repo, name) do + case :geef_ref.lookup(repo, name) do + {:ok, ref} -> + {:ok, Geef.Reference.new ref} + error -> + error + end + end + def lookup!(repo, name) do case lookup(repo, name) do {:ok, ref} -> @@ -13,9 +19,17 @@ defmodule Geef.Reference do end end - def resolve(ref), do: :geef_ref.resolve(ref) - def resolve!(ref) do - case :geef_ref.resolve(ref) do + def resolve(ref = Geef.Reference[]) do + case :geef_ref.resolve(set_elem(ref, 0, :geef_reference)) do + {:ok, ref} -> + {:ok, Geef.Reference.new ref} + error -> + error + end + end + + def resolve!(ref = Geef.Reference[]) do + case resolve(ref) do {:ok, resolved} -> resolved {:error, err} -> diff --git a/lib/geef/tag.ex b/lib/geef/tag.ex new file mode 100644 index 0000000..d005f34 --- /dev/null +++ b/lib/geef/tag.ex @@ -0,0 +1,20 @@ +defmodule Geef.Tag do + alias Geef.Object + + def peel(tag = Object[type: :tag]) do + case :geef_tag.peel(set_elem(tag, 0, :geef_object)) do + {:ok, peeled} -> + {:ok, Object.new peeled} + error -> + error + end + end + + def peel!(tag = Object[type: :tag]) do + case peel(tag) do + {:ok, peeled} -> peeled + {:error, err} -> raise err + end + end + +end \ No newline at end of file