Use elixir names for elixir records

Follow the example set by elixir's use of FileInfo and use elixir-y
names for refs and objects, and convert them to :geef_reference and
:geef_object when we pass them down to erlang geef.
This commit is contained in:
Carlos Martín Nieto
2013-06-06 01:48:15 +02:00
parent d21d2cb9b0
commit a80b7bc221
3 changed files with 52 additions and 15 deletions

View File

@@ -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
def lookup(repo, id), do: :geef_obj.lookup(repo, id)
def lookup!(repo, id) do
case :geef_obj.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} -> {:ok, obj} ->
obj obj
{:error, err} -> {:error, err} ->
@@ -12,7 +18,4 @@ defmodule Geef.Object do
end end
end end
def lookup(repo, id, type), do: :geef_obj.lookup(repo, id, type)
end end

View File

@@ -1,9 +1,15 @@
defrecord :geef_reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") defrecord Geef.Reference, Record.extract(:geef_reference, from: "src/geef_records.hrl") do
defmodule Geef.Reference do
alias Geef.Repository 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 def lookup!(repo, name) do
case lookup(repo, name) do case lookup(repo, name) do
{:ok, ref} -> {:ok, ref} ->
@@ -13,9 +19,17 @@ defmodule Geef.Reference do
end end
end end
def resolve(ref), do: :geef_ref.resolve(ref) def resolve(ref = Geef.Reference[]) do
def resolve!(ref) do case :geef_ref.resolve(set_elem(ref, 0, :geef_reference)) do
case :geef_ref.resolve(ref) do {:ok, ref} ->
{:ok, Geef.Reference.new ref}
error ->
error
end
end
def resolve!(ref = Geef.Reference[]) do
case resolve(ref) do
{:ok, resolved} -> {:ok, resolved} ->
resolved resolved
{:error, err} -> {:error, err} ->

20
lib/geef/tag.ex Normal file
View File

@@ -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