diff --git a/lib/rdf/blank_node/generator.ex b/lib/rdf/blank_node/generator.ex index 9c4e6aa..db54f18 100644 --- a/lib/rdf/blank_node/generator.ex +++ b/lib/rdf/blank_node/generator.ex @@ -55,10 +55,10 @@ defmodule RDF.BlankNode.Generator do @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 - GenServer.call(pid, {:generate_for, string}) + def generate_for(pid, value) do + GenServer.call(pid, {:generate_for, value}) end diff --git a/lib/rdf/blank_node/generator_algorithm.ex b/lib/rdf/blank_node/generator_algorithm.ex index 423b305..a03802d 100644 --- a/lib/rdf/blank_node/generator_algorithm.ex +++ b/lib/rdf/blank_node/generator_algorithm.ex @@ -27,6 +27,6 @@ defmodule RDF.BlankNode.Generator.Algorithm do given state and return a tuple consisting of the generated blank node and the 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 diff --git a/lib/rdf/blank_node/increment.ex b/lib/rdf/blank_node/increment.ex index c436f36..b252229 100644 --- a/lib/rdf/blank_node/increment.ex +++ b/lib/rdf/blank_node/increment.ex @@ -36,11 +36,11 @@ defmodule RDF.BlankNode.Increment do end @impl BlankNode.Generator.Algorithm - def generate_for(string, %{map: map, counter: counter} = state) do - case Map.get(map, string) do + def generate_for(value, %{map: map, counter: counter} = state) do + case Map.get(map, value) do nil -> {bnode(counter, state), - %{state | map: Map.put(map, string, counter), counter: counter + 1}} + %{state | map: Map.put(map, value, counter), counter: counter + 1}} previous -> {bnode(previous, state), state} end diff --git a/test/unit/blank_node/increment_test.exs b/test/unit/blank_node/increment_test.exs index 1b82e97..df45ddf 100644 --- a/test/unit/blank_node/increment_test.exs +++ b/test/unit/blank_node/increment_test.exs @@ -65,4 +65,18 @@ defmodule RDF.BlankNode.IncrementTest do assert Generator.generate_for(generator, "foo") == bnode("b2") assert Generator.generate(generator) == bnode("b6") 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