diff --git a/lib/vultr/request.ex b/lib/vultr/request.ex index 2295153..0c85607 100644 --- a/lib/vultr/request.ex +++ b/lib/vultr/request.ex @@ -151,54 +151,40 @@ defmodule Vultr.Request do # Documentation helpers defp gen_doc(method, path, desc, params, required_access, api_key) do + summary_table = doc_table([ + ["Method", "Path", "API Key", "Required Access"], + ["------", "----", "-------", "---------------"], + [doc_method(method), path, doc_api_key(api_key), doc_required_access(required_access)], + ]) + + params_rows = Enum.map(params, &[ + "`#{String.downcase(&1.name)}`", + &1.type_string, + doc_optional_default(&1.optional, &1.default), + String.replace(&1.desc, "\n", "
"), + ]) + + params_table = doc_table([ + ["Name", "Type", "Optional", "Description"], + ["----", "----", "--------", "-----------"], + ] ++ params_rows) + """ #{desc} - #{doc_params(params)} - ### Backend - - Method: `#{doc_method(method)}` - - Path: `#{path}` - - API Key: `#{doc_api_key(api_key)}` - - Required Access: `#{doc_required_access(required_access)}` + #{summary_table} + #### Params + #{params_table} """ end - defp doc_params([]), do: "" - defp doc_params(params) do - param_rows = - params - |> Enum.map(&doc_param/1) - |> Enum.join("") - - """ - ### Params - | Name | Type | Optional | Description | - | ---- | ---- | -------- | ----------- | - #{param_rows} - """ - end - - defp doc_param(param) do - columns = [ - "`#{String.downcase(param.name)}`", - param.type_string, - doc_optional_default(param.optional, param.default), - String.replace(param.desc, "\n", "
"), - ] - - "| #{Enum.join(columns, " | ")} |" - end - defp doc_optional_default(optional, default) do - if optional do - optional = "Yes" - - if default == nil do - optional - else - optional <> "
(Default `#{inspect default}`)" - end - else - "No" + cond do + optional && is_nil(default) -> + "Yes" + optional -> + "
(Default `#{inspect default}`)" + true -> + "No" end end @@ -210,5 +196,9 @@ defmodule Vultr.Request do defp doc_required_access(nil), do: "None" defp doc_required_access(atm), do: Atom.to_string(atm) + defp doc_table(rows), do: Enum.map(rows, &doc_table_columns/1) |> Enum.join + + defp doc_table_columns(columns), do: "| #{Enum.join(columns, " | ")} |\n" + defp atom_to_word(atm), do: atm |> Atom.to_string |> String.capitalize end