@@ -1,6 +1,10 @@
|
||||
require Record
|
||||
|
||||
defmodule Geef.Object do
|
||||
@behaviour Access
|
||||
alias Geef.Object
|
||||
alias Geef.Tree
|
||||
|
||||
defstruct type: nil, id: nil, handle: nil
|
||||
|
||||
def lookup(repo, id) do
|
||||
@@ -32,4 +36,24 @@ defmodule Geef.Object do
|
||||
end
|
||||
end
|
||||
|
||||
def fetch(tree = %Object{type: :tree}, key) when is_number(key) do
|
||||
Tree.nth(tree, key)
|
||||
end
|
||||
|
||||
def fetch(tree = %Object{type: :tree}, key) do
|
||||
Tree.get(tree, key)
|
||||
end
|
||||
|
||||
def get(tree = %Object{type: :tree}, key) do
|
||||
case fetch(tree, key) do
|
||||
{:ok, entry} -> entry
|
||||
{:error, _} -> nil
|
||||
end
|
||||
end
|
||||
|
||||
# Git data is immutable
|
||||
def get_and_update(_tree, _key, _fun) do
|
||||
raise ArgumentError
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -33,31 +33,6 @@ defmodule Geef.Tree do
|
||||
|
||||
end
|
||||
|
||||
defimpl Access, for: Geef.Object do
|
||||
alias Geef.Object
|
||||
alias Geef.Tree
|
||||
|
||||
def get(tree = %Object{type: :tree}, key) when is_number(key) do
|
||||
case Tree.nth(tree, key) do
|
||||
{:ok, entry} -> entry
|
||||
{:error, _} -> nil
|
||||
end
|
||||
end
|
||||
|
||||
def get(tree = %Object{type: :tree}, key) do
|
||||
case Tree.get(tree, key) do
|
||||
{:ok, entry} -> entry
|
||||
{:error, _} -> nil
|
||||
end
|
||||
end
|
||||
|
||||
# Git data is immutable
|
||||
def get_and_update(_tree, _key, _fun) do
|
||||
raise ArgumentError
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
defmodule Geef.TreeError do
|
||||
defexception [reason: nil]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user