Use a macro to convert Geef.Object to :geef_object

This commit is contained in:
Carlos Martín Nieto
2013-06-07 10:58:24 +02:00
parent a0ded06b7a
commit 8244057d75
5 changed files with 17 additions and 5 deletions

View File

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

View File

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

View File

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

View File

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

View File

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