lib/slurp/iex/commands/new_head_subscriptions.ex

defmodule Slurp.IEx.Commands.NewHeadSubscriptions do
  import Slurp.IEx.Commands.Table, only: [render!: 2]

  @header [
    "Blockchain ID",
    "Enabled",
    "Handler"
  ]

  @type store_id_opt :: {:store_id, atom}
  @type where_opt :: {:where, list}
  @type order_opt :: {:order, list}
  @type options :: [store_id_opt | where_opt | order_opt]

  @spec list(options) :: no_return
  def list(options) do
    options
    |> Slurp.Commander.new_head_subscriptions()
    |> format_rows()
    |> render!(@header)
  end

  defp format_rows(new_head_subscriptions) do
    new_head_subscriptions
    |> Enum.map(fn s ->
      [
        s.blockchain_id,
        s.enabled,
        s.handler
      ]
      |> Enum.map(&format_col/1)
    end)
  end

  defp format_col(nil), do: "-"
  defp format_col({_, _, _} = mfa), do: mfa |> inspect
  defp format_col(val), do: val
end