Add RDF.IRI.starts_with?/2 and RDF.IRI.ends_with?/2
This commit is contained in:
parent
5919a9c93e
commit
52369c289c
2 changed files with 48 additions and 6 deletions
|
@ -10,6 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- `RDF.Namespace` builders `defnamespace/3` and `create/4`
|
- `RDF.Namespace` builders `defnamespace/3` and `create/4`
|
||||||
|
- `RDF.IRI.starts_with?/2` and `RDF.IRI.ends_with?/2`
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|
|
@ -254,6 +254,8 @@ defmodule RDF.IRI do
|
||||||
|
|
||||||
iex> RDF.IRI.in_namespace?(~I<http://example.com/foo>, ~I<http://example.com/>)
|
iex> RDF.IRI.in_namespace?(~I<http://example.com/foo>, ~I<http://example.com/>)
|
||||||
true
|
true
|
||||||
|
iex> RDF.IRI.in_namespace?(EX.Foo, ~I<http://example.com/>)
|
||||||
|
true
|
||||||
iex> RDF.IRI.in_namespace?(~I<http://example.com/foo/bar>, "http://example.com/")
|
iex> RDF.IRI.in_namespace?(~I<http://example.com/foo/bar>, "http://example.com/")
|
||||||
true
|
true
|
||||||
iex> RDF.IRI.in_namespace?(~I<http://example.com/#foo>, EX)
|
iex> RDF.IRI.in_namespace?(~I<http://example.com/#foo>, EX)
|
||||||
|
@ -262,11 +264,8 @@ defmodule RDF.IRI do
|
||||||
@spec in_namespace?(t | module, String.t() | t | module) :: boolean
|
@spec in_namespace?(t | module, String.t() | t | module) :: boolean
|
||||||
def in_namespace?(iri, namespace)
|
def in_namespace?(iri, namespace)
|
||||||
|
|
||||||
def in_namespace?(%__MODULE__{value: value}, namespace) when is_binary(namespace),
|
def in_namespace?(iri, namespace) when is_binary(namespace),
|
||||||
do: String.starts_with?(value, namespace)
|
do: starts_with?(iri, namespace)
|
||||||
|
|
||||||
def in_namespace?(term, namespace) when maybe_ns_term(term),
|
|
||||||
do: term |> Namespace.resolve_term!() |> in_namespace?(namespace)
|
|
||||||
|
|
||||||
def in_namespace?(iri, namespace) when maybe_ns_term(namespace),
|
def in_namespace?(iri, namespace) when maybe_ns_term(namespace),
|
||||||
do: in_namespace?(iri, coerce_base(namespace))
|
do: in_namespace?(iri, coerce_base(namespace))
|
||||||
|
@ -274,7 +273,49 @@ defmodule RDF.IRI do
|
||||||
def in_namespace?(iri, %__MODULE__{} = namespace),
|
def in_namespace?(iri, %__MODULE__{} = namespace),
|
||||||
do: in_namespace?(iri, __MODULE__.to_string(namespace))
|
do: in_namespace?(iri, __MODULE__.to_string(namespace))
|
||||||
|
|
||||||
# def in_namespace?(_, _), do: false
|
@doc """
|
||||||
|
Checks whether `iri` starts with any of the given prefixes.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> RDF.IRI.starts_with?(~I<http://example.com/foo>, "http://example.com/")
|
||||||
|
true
|
||||||
|
iex> RDF.IRI.starts_with?(EX.Foo, "http://example.com/")
|
||||||
|
true
|
||||||
|
iex> RDF.IRI.starts_with?(~I<http://example.com/foo/bar>, ["http://example.com/", "http://example.org/"])
|
||||||
|
true
|
||||||
|
iex> RDF.IRI.starts_with?(~I<http://example.com/#foo>, "http://example.org/")
|
||||||
|
false
|
||||||
|
"""
|
||||||
|
@spec starts_with?(t | module, String.pattern()) :: boolean
|
||||||
|
def starts_with?(%__MODULE__{} = iri, prefix) do
|
||||||
|
String.starts_with?(iri.value, prefix)
|
||||||
|
end
|
||||||
|
|
||||||
|
def starts_with?(term, prefix) when maybe_ns_term(term),
|
||||||
|
do: term |> Namespace.resolve_term!() |> starts_with?(prefix)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Checks whether `iri` end with any of the given suffixes.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> RDF.IRI.ends_with?(~I<http://example.com/foo>, "foo")
|
||||||
|
true
|
||||||
|
iex> RDF.IRI.ends_with?(EX.Foo, "Foo")
|
||||||
|
true
|
||||||
|
iex> RDF.IRI.ends_with?(~I<http://example.com/foo>, ["foo", "bar"])
|
||||||
|
true
|
||||||
|
iex> RDF.IRI.ends_with?(~I<http://example.com/foo>, "bar")
|
||||||
|
false
|
||||||
|
"""
|
||||||
|
@spec ends_with?(t | module, String.t() | [String.t()]) :: boolean
|
||||||
|
def ends_with?(%__MODULE__{} = iri, suffix) do
|
||||||
|
String.ends_with?(iri.value, suffix)
|
||||||
|
end
|
||||||
|
|
||||||
|
def ends_with?(term, suffix) when maybe_ns_term(term),
|
||||||
|
do: term |> Namespace.resolve_term!() |> ends_with?(suffix)
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Tests for value equality of IRIs.
|
Tests for value equality of IRIs.
|
||||||
|
|
Loading…
Reference in a new issue