diff --git a/lib/rdf/prefix_map.ex b/lib/rdf/prefix_map.ex index b672583..05fd18b 100644 --- a/lib/rdf/prefix_map.ex +++ b/lib/rdf/prefix_map.ex @@ -128,6 +128,17 @@ defmodule RDF.PrefixMap do (existing_namespace = Map.get(map, prefix)) && existing_namespace != namespace end + @doc """ + Merges two `RDF.PrefixMap`s and raises an exception in error cases. + """ + def merge!(prefix_map1, prefix_map2) do + with {:ok, new_prefix_map} <- merge(prefix_map1, prefix_map2) do + new_prefix_map + else + {:error, error} -> raise error + end + end + @doc """ Deletes a prefix mapping from the given `RDF.PrefixMap`.. """ diff --git a/test/unit/prefix_map_test.exs b/test/unit/prefix_map_test.exs index 0b67dcf..bbc0e8d 100644 --- a/test/unit/prefix_map_test.exs +++ b/test/unit/prefix_map_test.exs @@ -127,6 +127,19 @@ defmodule RDF.PrefixMapTest do end end + describe "merge!/2" do + test "when the prefix maps can be merged" do + other_prefix_map = PrefixMap.new(ex3: @ex_ns3) + assert PrefixMap.merge!(@example2, other_prefix_map) == @example3 + end + + test "when the prefix maps can not be merged" do + assert_raise RuntimeError, "conflicting prefix mappings: :ex2", fn -> + PrefixMap.merge!(@example2, ex2: @ex_ns3) + end + end + end + describe "delete/2" do test "when a mapping of the given prefix exists" do assert PrefixMap.delete(@example2, :ex2) == @example1