From b671c5110e33752b51d0aa54f55c35be07695ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 12 Jun 2013 00:05:04 +0200 Subject: [PATCH] Implement Access for Geef.Tree Make Geef.Tree its own record so we can define the protocol implementation for it. There shouldn't be any generic functions you'd want to call on a tree record. --- lib/geef/tree.ex | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/geef/tree.ex b/lib/geef/tree.ex index 9ef57bb..728f3b3 100644 --- a/lib/geef/tree.ex +++ b/lib/geef/tree.ex @@ -1,6 +1,6 @@ defrecord Geef.TreeEntry, Record.extract(:geef_tree_entry, from: "src/geef_records.hrl") -defmodule Geef.Tree do +defrecord Geef.Tree, Record.extract(:geef_object, from: "src/geef_records.hrl") do alias Geef.Object alias Geef.TreeEntry @@ -9,13 +9,13 @@ defmodule Geef.Tree do def lookup(repo, id) do case :geef_tree.lookup(repo, id) do {:ok, obj} -> - {:ok, Object.new obj} + {:ok, new obj} error -> error end end - def get(tree = Object[type: :tree], path) do + def get(tree, path) do case :geef_tree.get(rebind(tree), path) do {:ok, entry} -> {:ok, TreeEntry.new entry} @@ -25,3 +25,14 @@ defmodule Geef.Tree do end end + +defimpl Access, for: Geef.Tree do + + def access(tree, key) do + case Geef.Tree.get(tree, key) do + {:ok, entry} -> entry + {:error, _} -> nil + end + end + +end