IO ANSI Table v0.1.1 IO.ANSI.Table.Formatter

Prints a table applying a table style. Each row is a list of values identified by successive headers.

Summary

Functions

Takes a list of key-value collections and a list of keys

Takes a list of key-value collections, how many to format, whether to ring the bell, a table style and, as options, a list of headers (keys) and a key header to sort the collections on

Takes a list of key-value collections and a list of keys

Capitalizes every word of a title (converted to string if applicable)

Given a list of sublists, where each sublist contains the strings of a column, returns a list containing the maximum width of each column

Functions

columns(collections, keys)
columns([map | Keyword.t], [any]) :: [[String.t]]

Takes a list of key-value collections and a list of keys.

Returns a list of columns, each column being a list of string values selected from each collection on a given key and repeatedly on successive keys in order.

Examples

iex> alias IO.ANSI.Table.Formatter
iex> list = [
...>   %{"a" => "1", "b" => "2", "c" => "3"},
...>   %{"a" => "4", "b" => "5", "c" => "6"}
...> ]
iex> Formatter.columns(list, ["c", "a"])
[["3", "6"], ["1", "4"]]

iex> alias IO.ANSI.Table.Formatter
iex> list = [
...>   %{:one => "1", '2' => 2.0, 3 => :three},
...>   %{:one => '4', '2' => "5", 3 => 000006}
...> ]
iex> Formatter.columns(list, [3, :one, '2'])
[["three", "6"], ["1", "4"], ["2.0", "5"]]
rows(collections, keys)
rows([map | Keyword.t], [any]) :: [[String.t]]

Takes a list of key-value collections and a list of keys.

Returns a list of rows, each row being a list of string values orderly selected on successive keys from a given collection and repeatedly for each collection in turn.

Examples

iex> alias IO.ANSI.Table.Formatter
iex> list = [
...>   %{"a" => "1", "b" => "2", "c" => "3"},
...>   %{"a" => "4", "b" => "5", "c" => "6"}
...> ]
iex> Formatter.rows(list, ["c", "a"])
[["3", "1"], ["6", "4"]]

iex> alias IO.ANSI.Table.Formatter
iex> list = [
...>   %{:one => "1", '2' => 2.0, 3 => :three},
...>   %{:one => '4', '2' => "5", 3 => 000006}
...> ]
iex> Formatter.rows(list, [3, :one, '2'])
[["three", "1", "2.0"], ["6", "4", "5"]]
titlecase(title)
titlecase(any) :: String.t

Capitalizes every word of a title (converted to string if applicable).

Any underscore is considered a space and consecutive whitespace characters are treated as a single occurrence. Leading and trailing whitespace characters are removed.

Examples

iex> alias IO.ANSI.Table.Formatter
iex> Formatter.titlecase(" son   of a gun ")
"Son Of A Gun"

iex> alias IO.ANSI.Table.Formatter
iex> Formatter.titlecase("_date___of_birth_")
"Date Of Birth"

iex> alias IO.ANSI.Table.Formatter
iex> Formatter.titlecase(:" _aN_ _oDD cASe_ ")
"An Odd Case"
widths(columns)
widths([[String.t]]) :: [non_neg_integer]

Given a list of sublists, where each sublist contains the strings of a column, returns a list containing the maximum width of each column.

Examples

iex> alias IO.ANSI.Table.Formatter
iex> data = [["cat", "wombat", "elk"], ["mongoose", "ant", "gnu"]]
iex> Formatter.widths(data)
[6, 8]

iex> alias IO.ANSI.Table.Formatter
iex> data = [[":cat", "{1, 2}", "007"], ["mongoose", ":ant", "3.1416"]]
iex> Formatter.widths(data)
[6, 8]