lib/command_supervisor.ex

defmodule HonchoSupervisor.CommandSupervisor do
  use Supervisor

  alias Honcho.Command

  def start_link(commands) do
    System.no_halt(true)
    Supervisor.start_link(__MODULE__, commands, name: __MODULE__)
  end

  #### Callbacks

  def init(commands),
    do:
      commands
      |> children()
      |> Supervisor.init(strategy: :one_for_one)

  #### Private

  defp children(commands),
    do: commands |> Enum.map(&child/1)

  defp child({name, command}),
    do: %{id: name, start: {Command, :start_link, [[name: name, command: command]]}}
end