core: move RDF.Data implementation
This commit is contained in:
parent
25a2d963f6
commit
70e78ee326
5 changed files with 92 additions and 87 deletions
|
@ -54,3 +54,26 @@ defprotocol RDF.Data do
|
|||
def statement_count(data)
|
||||
|
||||
end
|
||||
|
||||
defimpl RDF.Data, for: RDF.Description do
|
||||
def delete(%RDF.Description{subject: subject} = description,
|
||||
%RDF.Description{subject: other_subject})
|
||||
when subject != other_subject,
|
||||
do: description
|
||||
def delete(description, statements), do: RDF.Description.delete(description, statements)
|
||||
def pop(description), do: RDF.Description.pop(description)
|
||||
|
||||
def include?(description, statements),
|
||||
do: RDF.Description.include?(description, statements)
|
||||
|
||||
def statements(description), do: RDF.Description.statements(description)
|
||||
def predicates(description), do: RDF.Description.predicates(description)
|
||||
def objects(description), do: RDF.Description.objects(description)
|
||||
def subjects(%RDF.Description{subject: subject}), do: MapSet.new([subject])
|
||||
|
||||
def resources(%RDF.Description{subject: subject} = description),
|
||||
do: RDF.Description.resources(description) |> MapSet.put(subject)
|
||||
|
||||
def subject_count(_), do: 1
|
||||
def statement_count(description), do: RDF.Description.count(description)
|
||||
end
|
||||
|
|
|
@ -519,26 +519,3 @@ defimpl Enumerable, for: RDF.Description do
|
|||
def member?(desc, triple), do: {:ok, RDF.Description.include?(desc, triple)}
|
||||
def count(desc), do: {:ok, RDF.Description.count(desc)}
|
||||
end
|
||||
|
||||
defimpl RDF.Data, for: RDF.Description do
|
||||
def delete(%RDF.Description{subject: subject} = description,
|
||||
%RDF.Description{subject: other_subject})
|
||||
when subject != other_subject,
|
||||
do: description
|
||||
def delete(description, statements), do: RDF.Description.delete(description, statements)
|
||||
def pop(description), do: RDF.Description.pop(description)
|
||||
|
||||
def include?(description, statements),
|
||||
do: RDF.Description.include?(description, statements)
|
||||
|
||||
def statements(description), do: RDF.Description.statements(description)
|
||||
def predicates(description), do: RDF.Description.predicates(description)
|
||||
def objects(description), do: RDF.Description.objects(description)
|
||||
def subjects(%RDF.Description{subject: subject}), do: MapSet.new([subject])
|
||||
|
||||
def resources(%RDF.Description{subject: subject} = description),
|
||||
do: RDF.Description.resources(description) |> MapSet.put(subject)
|
||||
|
||||
def subject_count(_), do: 1
|
||||
def statement_count(description), do: RDF.Description.count(description)
|
||||
end
|
||||
|
|
|
@ -16,6 +16,8 @@ defmodule RDF.Test.Case do
|
|||
|
||||
import RDF, only: [uri: 1, literal: 1, bnode: 1]
|
||||
import unquote(__MODULE__)
|
||||
|
||||
import RDF.Sigils
|
||||
end
|
||||
end
|
||||
|
||||
|
|
67
test/unit/data_test.exs
Normal file
67
test/unit/data_test.exs
Normal file
|
@ -0,0 +1,67 @@
|
|||
defmodule RDF.DataTest do
|
||||
use RDF.Test.Case
|
||||
|
||||
describe "RDF.Data protocol implementation of RDF.Description" do
|
||||
setup do
|
||||
{:ok,
|
||||
description: Description.new(EX.S, [
|
||||
{EX.p1, [EX.O1, EX.O2]},
|
||||
{EX.p2, EX.O3},
|
||||
{EX.p3, [~B<foo>, ~L"bar"]},
|
||||
])
|
||||
}
|
||||
end
|
||||
|
||||
test "delete", %{description: description} do
|
||||
assert RDF.Data.delete(description, {EX.S, EX.p1, EX.O2}) ==
|
||||
Description.delete(description, {EX.S, EX.p1, EX.O2})
|
||||
|
||||
assert RDF.Data.delete(description, {EX.Other, EX.p1, EX.O2}) == description
|
||||
end
|
||||
|
||||
test "deleting a Description with a different subject does nothing", %{description: description} do
|
||||
assert RDF.Data.delete(description,
|
||||
%Description{description | subject: EX.Other}) == description
|
||||
end
|
||||
|
||||
test "pop", %{description: description} do
|
||||
assert RDF.Data.pop(description) == Description.pop(description)
|
||||
end
|
||||
|
||||
test "include?", %{description: description} do
|
||||
assert RDF.Data.include?(description, {EX.S, EX.p1, EX.O2})
|
||||
refute RDF.Data.include?(description, {EX.Other, EX.p1, EX.O2})
|
||||
end
|
||||
|
||||
test "statements", %{description: description} do
|
||||
assert RDF.Data.statements(description) == Description.statements(description)
|
||||
end
|
||||
|
||||
test "subjects", %{description: description} do
|
||||
assert RDF.Data.subjects(description) == MapSet.new([uri(EX.S)])
|
||||
end
|
||||
|
||||
test "predicates", %{description: description} do
|
||||
assert RDF.Data.predicates(description) == MapSet.new([EX.p1, EX.p2, EX.p3])
|
||||
end
|
||||
|
||||
test "objects", %{description: description} do
|
||||
assert RDF.Data.objects(description) ==
|
||||
MapSet.new([uri(EX.O1), uri(EX.O2), uri(EX.O3), ~B<foo>])
|
||||
end
|
||||
|
||||
test "resources", %{description: description} do
|
||||
assert RDF.Data.resources(description) ==
|
||||
MapSet.new([uri(EX.S), EX.p1, EX.p2, EX.p3, uri(EX.O1), uri(EX.O2), uri(EX.O3), ~B<foo>])
|
||||
end
|
||||
|
||||
test "subject_count", %{description: description} do
|
||||
assert RDF.Data.subject_count(description) == 1
|
||||
end
|
||||
|
||||
test "statement_count", %{description: description} do
|
||||
assert RDF.Data.statement_count(description) == 5
|
||||
end
|
||||
end
|
||||
|
||||
end
|
|
@ -382,68 +382,4 @@ defmodule RDF.DescriptionTest do
|
|||
|
||||
end
|
||||
|
||||
describe "RDF.Data protocol implementation" do
|
||||
setup do
|
||||
{:ok,
|
||||
description: Description.new(EX.S, [
|
||||
{EX.p1, [EX.O1, EX.O2]},
|
||||
{EX.p2, EX.O3},
|
||||
{EX.p3, [~B<foo>, ~L"bar"]},
|
||||
])
|
||||
}
|
||||
end
|
||||
|
||||
test "delete", %{description: description} do
|
||||
assert RDF.Data.delete(description, {EX.S, EX.p1, EX.O2}) ==
|
||||
Description.delete(description, {EX.S, EX.p1, EX.O2})
|
||||
|
||||
assert RDF.Data.delete(description, {EX.Other, EX.p1, EX.O2}) == description
|
||||
end
|
||||
|
||||
test "deleting a Description with a different subject does nothing", %{description: description} do
|
||||
assert RDF.Data.delete(description,
|
||||
%Description{description | subject: EX.Other}) == description
|
||||
end
|
||||
|
||||
test "pop", %{description: description} do
|
||||
assert RDF.Data.pop(description) == Description.pop(description)
|
||||
end
|
||||
|
||||
test "include?", %{description: description} do
|
||||
assert RDF.Data.include?(description, {EX.S, EX.p1, EX.O2})
|
||||
refute RDF.Data.include?(description, {EX.Other, EX.p1, EX.O2})
|
||||
end
|
||||
|
||||
test "statements", %{description: description} do
|
||||
assert RDF.Data.statements(description) == Description.statements(description)
|
||||
end
|
||||
|
||||
test "subjects", %{description: description} do
|
||||
assert RDF.Data.subjects(description) == MapSet.new([uri(EX.S)])
|
||||
end
|
||||
|
||||
test "predicates", %{description: description} do
|
||||
assert RDF.Data.predicates(description) == MapSet.new([EX.p1, EX.p2, EX.p3])
|
||||
end
|
||||
|
||||
test "objects", %{description: description} do
|
||||
assert RDF.Data.objects(description) ==
|
||||
MapSet.new([uri(EX.O1), uri(EX.O2), uri(EX.O3), ~B<foo>])
|
||||
end
|
||||
|
||||
test "resources", %{description: description} do
|
||||
assert RDF.Data.resources(description) ==
|
||||
MapSet.new([uri(EX.S), EX.p1, EX.p2, EX.p3, uri(EX.O1), uri(EX.O2), uri(EX.O3), ~B<foo>])
|
||||
end
|
||||
|
||||
test "subject_count", %{description: description} do
|
||||
assert RDF.Data.subject_count(description) == 1
|
||||
end
|
||||
|
||||
test "statement_count", %{description: description} do
|
||||
assert RDF.Data.statement_count(description) == 5
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue