Calendrical. Supervisor
(Calendrical v2.2.0)
Copy Markdown
The :calendrical runtime supervisor.
Owns the processes Calendrical needs at runtime and registers Calendrical with Localize as the provider of its calendars:
Calendrical.YearCacheowns the table in which the calendars reckoned by astronomy keep what they work out about a year.Calendrical.Compilercreates the calendars made at runtime, such as a territory's reform calendar or a calendar made withCalendrical.new/3, one at a time.
This supervisor is started when the :calendrical application starts,
so most applications need do nothing. An application that prefers to
start Calendrical alongside its own processes can turn that off and
add this supervisor to its own supervision tree instead.
Supervising Calendrical yourself
Mark the dependency runtime: false in mix.exs, so that the
:calendrical application is not started:
# mix.exs
def deps do
[
{:calendrical, "~> 2.1", runtime: false}
]
endThen add the supervisor to the application's tree, after
Localize.Supervisor when Localize is supervised the same way:
# lib/my_app/application.ex
def start(_type, _args) do
children = [
MyApp.Repo,
Calendrical.Supervisor,
MyAppWeb.Endpoint
]
Supervisor.start_link(children, strategy: :one_for_one)
endCalendrical's own dependencies are then not started either, and its
calendars need two of them. Astro loads the JPL ephemeris the
calendars reckoned by astronomy use: list Astro.Supervisor before
this supervisor, or let this supervisor start the :astro
application, which it does when Astro is not started. Localize
formats, parses and localizes dates: list Localize.Supervisor
before the processes that use them. The
supervision guide describes both, and what a
release needs.
Summary
Functions
Returns the specification to start Calendrical.Supervisor under
another supervisor.
Starts the Calendrical supervisor.
Functions
@spec child_spec(keyword()) :: Supervisor.child_spec()
Returns the specification to start Calendrical.Supervisor under
another supervisor.
Lets an application list Calendrical.Supervisor, or
{Calendrical.Supervisor, []}, among its own children.
Arguments
optionsis a keyword list passed tostart_link/1.
Options
- There are none. See
start_link/1.
Returns
- A
Supervisor.child_spec/0map.
Examples
iex> Calendrical.Supervisor.child_spec([])
%{
id: Calendrical.Supervisor,
start: {Calendrical.Supervisor, :start_link, [[]]},
type: :supervisor
}
@spec start_link(keyword()) :: Supervisor.on_start()
Starts the Calendrical supervisor.
Starts the :astro application when neither it nor Astro.Supervisor
is running, then Calendrical.YearCache and Calendrical.Compiler,
then registers Calendrical as Localize's calendar provider, which
Localize.Calendar.register_provider/1 describes. Registering again
is harmless. The supervisor is registered as Calendrical.Supervisor.
Arguments
optionsis a keyword list.
Options
- There are none.
optionsis accepted so that{Calendrical.Supervisor, []}can be listed as a child.
Returns
{:ok, pid}on success.{:error, {:astro_not_started, reason}}if Astro was not started and could not be, as when its ephemeris cannot be found.{:error, reason}if the supervisor or a child could not be started.
Examples
Calendrical starts this supervisor itself. Start it only when the
:calendrical application is not started:
children = [
{Calendrical.Supervisor, []}
]
Supervisor.start_link(children, strategy: :one_for_one)