RDF.BlankNode.Generate can generate blank nodes for every value
- not just strings
This commit is contained in:
parent
adc1d953dc
commit
598fd731e6
4 changed files with 21 additions and 7 deletions
|
@ -55,10 +55,10 @@ defmodule RDF.BlankNode.Generator do
|
||||||
|
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Generates a blank node for a given string according to the `RDF.BlankNode.Generator.Algorithm` set up.
|
Generates a blank node for a given value according to the `RDF.BlankNode.Generator.Algorithm` set up.
|
||||||
"""
|
"""
|
||||||
def generate_for(pid, string) do
|
def generate_for(pid, value) do
|
||||||
GenServer.call(pid, {:generate_for, string})
|
GenServer.call(pid, {:generate_for, value})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,6 @@ defmodule RDF.BlankNode.Generator.Algorithm do
|
||||||
given state and return a tuple consisting of the generated blank node and the
|
given state and return a tuple consisting of the generated blank node and the
|
||||||
new state.
|
new state.
|
||||||
"""
|
"""
|
||||||
@callback generate_for(string :: binary, state :: map) :: {RDF.BlankNode.t, map}
|
@callback generate_for(value :: any, state :: map) :: {RDF.BlankNode.t, map}
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,11 +36,11 @@ defmodule RDF.BlankNode.Increment do
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl BlankNode.Generator.Algorithm
|
@impl BlankNode.Generator.Algorithm
|
||||||
def generate_for(string, %{map: map, counter: counter} = state) do
|
def generate_for(value, %{map: map, counter: counter} = state) do
|
||||||
case Map.get(map, string) do
|
case Map.get(map, value) do
|
||||||
nil ->
|
nil ->
|
||||||
{bnode(counter, state),
|
{bnode(counter, state),
|
||||||
%{state | map: Map.put(map, string, counter), counter: counter + 1}}
|
%{state | map: Map.put(map, value, counter), counter: counter + 1}}
|
||||||
previous ->
|
previous ->
|
||||||
{bnode(previous, state), state}
|
{bnode(previous, state), state}
|
||||||
end
|
end
|
||||||
|
|
|
@ -65,4 +65,18 @@ defmodule RDF.BlankNode.IncrementTest do
|
||||||
assert Generator.generate_for(generator, "foo") == bnode("b2")
|
assert Generator.generate_for(generator, "foo") == bnode("b2")
|
||||||
assert Generator.generate(generator) == bnode("b6")
|
assert Generator.generate(generator) == bnode("b6")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "generator with non-string values" do
|
||||||
|
{:ok, generator} = Generator.start_link(Increment, prefix: "b", hash: true)
|
||||||
|
|
||||||
|
assert Generator.generate(generator) == bnode("b0")
|
||||||
|
assert Generator.generate(generator) == bnode("b1")
|
||||||
|
assert Generator.generate_for(generator, {:foo, 42}) == bnode("b2")
|
||||||
|
assert Generator.generate(generator) == bnode("b3")
|
||||||
|
assert Generator.generate_for(generator, [:bar, 3.14]) == bnode("b4")
|
||||||
|
assert Generator.generate(generator) == bnode("b5")
|
||||||
|
assert Generator.generate_for(generator, {:foo, 42}) == bnode("b2")
|
||||||
|
assert Generator.generate(generator) == bnode("b6")
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue