From ec0e60e3c854b5266ae2e66d0412698da8483877 Mon Sep 17 00:00:00 2001 From: Marcel Otto Date: Thu, 8 Oct 2020 11:45:34 +0200 Subject: [PATCH] Add RDF.IRI.append/2 --- CHANGELOG.md | 1 + lib/rdf/iri.ex | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cada53..09ae62d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ are specified. - to `RDF.Dataset` - `RDF.Dataset.name/1` - `RDF.Dataset.change_name/2` +- `RDF.IRI.append/2` ### Changed diff --git a/lib/rdf/iri.ex b/lib/rdf/iri.ex index 8aa5447..d5957e6 100644 --- a/lib/rdf/iri.ex +++ b/lib/rdf/iri.ex @@ -69,6 +69,31 @@ defmodule RDF.IRI do def new!(%URI{} = uri), do: uri |> valid!() |> new() def new!(%__MODULE__{} = iri), do: valid!(iri) + @doc """ + Appends a String to a `RDF.IRI`. + + ## Example + + iex> ~I |> RDF.IRI.append("foo") + ~I + + iex> EX.foo |> RDF.IRI.append("bar") + EX.foobar + + iex> EX.Foo |> RDF.IRI.append("bar") + RDF.iri(EX.Foobar) + """ + @spec append(t | module, String.t()) :: t + def append(iri, string) + + def append(%__MODULE__{} = iri, string) do + %__MODULE__{iri | value: iri.value <> string} + end + + def append(term, string) when maybe_ns_term(term) do + term |> Namespace.resolve_term!() |> append(string) + end + @doc """ Coerces an IRI serving as a base IRI.