Polyn.Naming (polyn_naming v0.1.0)

Utilities for working with Polyn naming conventions

Link to this section Summary

Functions

Convert a colon separated name into a dot separated name

Create a consumer name from a source and type. Uses the configured :source_root as the prefix. Will include an additional source if passed in

Convert a dot separated name into a colon separated name

Determine if a given subject matches a subscription pattern

Remove the :domain prefix from a name

Remove the version suffix from a name

Validate the name of a message.

Validate the name of a message. Raises if invalid

Validate the source of an event

Give a version number to a name

Link to this section Functions

Link to this function

colon_to_dot(str)

@spec colon_to_dot(str :: binary()) :: binary()

Convert a colon separated name into a dot separated name

examples

Examples

iex>Polyn.Naming.colon_to_dot("com:acme:user:created:v1:schema:v1")
"com.acme.user.created.v1.schema.v1"
Link to this function

consumer_name(type, source \\ nil)

Create a consumer name from a source and type. Uses the configured :source_root as the prefix. Will include an additional source if passed in

examples

Examples

iex>Polyn.Naming.consumer_name("user.created.v1")
"user_backend_user_created_v1"

iex>Polyn.Naming.consumer_name("user.created.v1", "notifications")
"user_backend_notifications_user_created_v1"
Link to this function

dot_to_colon(str)

@spec dot_to_colon(str :: binary()) :: binary()

Convert a dot separated name into a colon separated name

examples

Examples

iex>Polyn.Naming.dot_to_colon("com.acme.user.created.v1.schema.v1")
"com:acme:user:created:v1:schema:v1"
Link to this function

subject_matches?(subject, pattern)

Determine if a given subject matches a subscription pattern

Link to this function

trim_domain_prefix(str)

@spec trim_domain_prefix(str :: binary()) :: binary()

Remove the :domain prefix from a name

examples

Examples

iex>Polyn.Naming.trim_domain_prefix("com:acme:user:created:v1:schema:v1")
"user:created:v1:schema:v1"

iex>Polyn.Naming.trim_domain_prefix("com.acme.user.created.v1.schema.v1")
"user.created.v1.schema.v1"
Link to this function

trim_version_suffix(str)

@spec trim_version_suffix(str :: binary()) :: binary()

Remove the version suffix from a name

examples

Examples

iex>Polyn.Naming.trim_version_suffix("com.acme.user.created.v1")
"com.acme.user.created"

iex>Polyn.Naming.trim_version_suffix("com:acme:user:created:v1")
"com:acme:user:created"
Link to this function

validate_message_name(name)

@spec validate_message_name(name :: binary()) :: :ok | {:error, binary()}

Validate the name of a message.

examples

Examples

iex>Polyn.Naming.validate_message_name("user.created")
:ok

iex>Polyn.Naming.validate_message_name("user  created")
{:error, message}
Link to this function

validate_message_name!(name)

@spec validate_message_name!(name :: binary()) :: :ok

Validate the name of a message. Raises if invalid

examples

Examples

iex>Polyn.Naming.validate_message_name!("user.created")
:ok

iex>Polyn.Naming.validate_message_name!("user  created")
Polyn.NamingException
Link to this function

validate_source_name!(name)

@spec validate_source_name!(name :: binary()) :: :ok

Validate the source of an event

examples

Examples

iex>Polyn.Naming.validate_source_name!("user.created")
:ok

iex>Polyn.Naming.validate_source_name!("user:created")
:ok

iex>Polyn.Naming.validate_source_name!("user  created")
Polyn.NamingException
Link to this function

version_suffix(str, version \\ 1)

@spec version_suffix(str :: binary(), version :: non_neg_integer()) :: binary()

Give a version number to a name

examples

Examples

iex>Polyn.Naming.version_suffix("com:acme:user:created:")
"com:acme:user:created:v1"

iex>Polyn.Naming.version_suffix("com.acme.user.created.", 2)
"com.acme.user.created.v2"