Minga.Extension.Registry (Minga v0.1.0)

Copy Markdown View Source

Agent-based registry for declared extensions.

Tracks which extensions have been declared in config, their source (path, git, or hex), config options, runtime status, and supervisor pids. Other modules query this registry to list, start, or stop extensions.

Summary

Types

Registry entry for a single extension.

Internal state: extension name → entry.

Functions

Returns all registered extensions as a list of {name, entry} tuples.

Returns a specification to start this module under a supervisor.

Returns the entry for a single extension, or :error if not registered.

Registers a path-based extension declaration.

Registers a git-based extension declaration.

Registers a hex-based extension declaration.

Removes all registered extensions.

Starts the extension registry.

Removes an extension from the registry.

Updates fields on an existing extension entry.

Types

entry()

@type entry() :: Minga.Extension.Entry.t()

Registry entry for a single extension.

state()

@type state() :: %{required(atom()) => entry()}

Internal state: extension name → entry.

Functions

all()

@spec all() :: [{atom(), entry()}]

Returns all registered extensions as a list of {name, entry} tuples.

all(server)

@spec all(GenServer.server()) :: [{atom(), entry()}]

child_spec(arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

get(name)

@spec get(atom()) :: {:ok, entry()} | :error

Returns the entry for a single extension, or :error if not registered.

get(server, name)

@spec get(GenServer.server(), atom()) :: {:ok, entry()} | :error

register(name, path, config)

@spec register(atom(), String.t(), keyword()) :: :ok

Registers a path-based extension declaration.

Called by the config DSL when extension :name, path: "..." is evaluated. The extension is not started yet; it's just recorded for later loading.

register(server, name, path, config)

@spec register(GenServer.server(), atom(), String.t(), keyword()) :: :ok

register_git(name, url, opts)

@spec register_git(atom(), String.t(), keyword()) :: :ok

Registers a git-based extension declaration.

Called by the config DSL when extension :name, git: "..." is evaluated.

register_git(server, name, url, opts)

@spec register_git(GenServer.server(), atom(), String.t(), keyword()) :: :ok

register_hex(name, package, opts)

@spec register_hex(atom(), String.t(), keyword()) :: :ok

Registers a hex-based extension declaration.

Called by the config DSL when extension :name, hex: "..." is evaluated.

register_hex(server, name, package, opts)

@spec register_hex(GenServer.server(), atom(), String.t(), keyword()) :: :ok

reset()

@spec reset() :: :ok

Removes all registered extensions.

reset(server)

@spec reset(GenServer.server()) :: :ok

start_link(opts \\ [])

@spec start_link(keyword()) :: Agent.on_start()

Starts the extension registry.

unregister(name)

@spec unregister(atom()) :: :ok

Removes an extension from the registry.

unregister(server, name)

@spec unregister(GenServer.server(), atom()) :: :ok

update(name, updates)

@spec update(
  atom(),
  keyword()
) :: :ok

Updates fields on an existing extension entry.

update(server, name, updates)

@spec update(GenServer.server(), atom(), keyword()) :: :ok