defmodule SoftBank.Accountant.Supervisor do
use DynamicSupervisor
@name __MODULE__
def child_spec([args]) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, args},
type: :supervisor
}
end
def start_child(args \\ nil, required \\ false) do
case required do
false ->
spec = {SoftBank.Accountant, args}
DynamicSupervisor.start_child(__MODULE__, spec)
true ->
case String.length(String.trim(args.account_number)) do
0 ->
{:error, nil}
_ ->
spec = {SoftBank.Accountant, args}
DynamicSupervisor.start_child(__MODULE__, spec)
end
end
end
def start_link(args \\ []) do
DynamicSupervisor.start_link(__MODULE__, args, name: @name)
end
def start() do
start_link()
end
def stop(id) do
Process.exit(id, :shutdown)
:ok
end
def init(args) do
DynamicSupervisor.init(
strategy: :one_for_one,
extra_arguments: args
)
end
end