From 8244057d756d0ec1894b1a70b4f5876a75a3f856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Fri, 7 Jun 2013 10:58:24 +0200 Subject: [PATCH] Use a macro to convert Geef.Object to :geef_object --- lib/geef/blob.ex | 5 +++-- lib/geef/commit.ex | 3 ++- lib/geef/object.ex | 7 +++++++ lib/geef/tag.ex | 3 ++- lib/geef/tree.ex | 4 +++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/geef/blob.ex b/lib/geef/blob.ex index beb73dd..a0d3769 100644 --- a/lib/geef/blob.ex +++ b/lib/geef/blob.ex @@ -1,5 +1,6 @@ defmodule Geef.Blob do alias Geef.Object + import :macros, Object def lookup(repo, id) do case :geef_obj.lookup(repo, id) do @@ -11,11 +12,11 @@ defmodule Geef.Blob do end def size(obj = Object[type: :blob]) do - :geef_blob.size(set_elem(obj, 0, :geef_object)) + :geef_blob.size(rebind(obj)) end def content(obj = Object[type: :blob]) do - :geef_blob.content(set_elem(obj, 0, :geef_object)) + :geef_blob.content(rebind(obj)) end end diff --git a/lib/geef/commit.ex b/lib/geef/commit.ex index de3f005..d18e5a3 100644 --- a/lib/geef/commit.ex +++ b/lib/geef/commit.ex @@ -1,5 +1,6 @@ defmodule Geef.Commit do alias Geef.Object + import :macros, Object def lookup(repo, id) do case :geef_commit.lookup(repo, id) do @@ -11,7 +12,7 @@ defmodule Geef.Commit do end def tree_id(commit = Object[type: :commit]) do - :geef_commit.tree_id(set_elem(commit, 0, :geef_object)) + :geef_commit.tree_id(rebind(commit)) end end diff --git a/lib/geef/object.ex b/lib/geef/object.ex index b8958e4..3a07313 100644 --- a/lib/geef/object.ex +++ b/lib/geef/object.ex @@ -1,5 +1,12 @@ defrecord Geef.Object, Record.extract(:geef_object, from: "src/geef_records.hrl") do + @doc false + defmacro rebind(obj) do + quote do + set_elem(unquote(obj), 0, :geef_object) + end + end + def lookup(repo, id) do case :geef_obj.lookup(repo, id) do {:ok, obj} -> diff --git a/lib/geef/tag.ex b/lib/geef/tag.ex index d005f34..dcc8844 100644 --- a/lib/geef/tag.ex +++ b/lib/geef/tag.ex @@ -1,8 +1,9 @@ defmodule Geef.Tag do alias Geef.Object + import :macros, Object def peel(tag = Object[type: :tag]) do - case :geef_tag.peel(set_elem(tag, 0, :geef_object)) do + case :geef_tag.peel(rebind(tag)) do {:ok, peeled} -> {:ok, Object.new peeled} error -> diff --git a/lib/geef/tree.ex b/lib/geef/tree.ex index a76b896..9ef57bb 100644 --- a/lib/geef/tree.ex +++ b/lib/geef/tree.ex @@ -4,6 +4,8 @@ defmodule Geef.Tree do alias Geef.Object alias Geef.TreeEntry + import :macros, Geef.Object + def lookup(repo, id) do case :geef_tree.lookup(repo, id) do {:ok, obj} -> @@ -14,7 +16,7 @@ defmodule Geef.Tree do end def get(tree = Object[type: :tree], path) do - case :geef_tree.get(set_elem(tree, 0, :geef_object), path) do + case :geef_tree.get(rebind(tree), path) do {:ok, entry} -> {:ok, TreeEntry.new entry} error ->