Sayfa.ContentType (Sayfa v0.5.0)

Copy Markdown View Source

Registry and lookup functions for content types.

Maps directory names and type names to content type modules. By default, five built-in types are registered: article, note, project, talk, and page.

Custom types can be added via application config:

config :sayfa, :content_types, [MyApp.ContentTypes.Recipe | Sayfa.ContentType.default_types()]

Examples

iex> Sayfa.ContentType.find_by_name(:article)
Sayfa.ContentTypes.Article

iex> Sayfa.ContentType.find_by_directory("articles")
Sayfa.ContentTypes.Article

iex> Sayfa.ContentType.find_by_directory("unknown")
nil

Summary

Functions

Returns all registered content type modules.

Returns the list of built-in content type modules.

Finds a content type module by its directory name.

Finds a content type module by its atom name.

Functions

all()

@spec all() :: [module()]

Returns all registered content type modules.

Reads from application config, falling back to default_types/0.

Examples

iex> types = Sayfa.ContentType.all()
iex> is_list(types)
true

default_types()

@spec default_types() :: [module()]

Returns the list of built-in content type modules.

Examples

iex> length(Sayfa.ContentType.default_types())
5

find_by_directory(directory)

@spec find_by_directory(String.t()) :: module() | nil

Finds a content type module by its directory name.

Examples

iex> Sayfa.ContentType.find_by_directory("articles")
Sayfa.ContentTypes.Article

iex> Sayfa.ContentType.find_by_directory("nonexistent")
nil

find_by_name(name)

@spec find_by_name(atom()) :: module() | nil

Finds a content type module by its atom name.

Examples

iex> Sayfa.ContentType.find_by_name(:article)
Sayfa.ContentTypes.Article

iex> Sayfa.ContentType.find_by_name(:unknown)
nil