From a80b7bc2212108d0a4e7ac03d8c2d3ae233aa93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 6 Jun 2013 01:48:15 +0200 Subject: [PATCH] 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. --- lib/geef/object.ex | 19 +++++++++++-------- lib/geef/reference.ex | 28 +++++++++++++++++++++------- lib/geef/tag.ex | 20 ++++++++++++++++++++ 3 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 lib/geef/tag.ex 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