Packages
io_ansi_table
0.3.21
1.0.40
1.0.39
1.0.38
1.0.37
1.0.36
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.32
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Writes data to "stdio" in a table with borders and colors. Can choose a table style to change the look of the table.
Current section
Files
Jump to
Current section
Files
lib/io/ansi/table.ex
# ┌───────────────────────────────────────────────────────────┐
# │ Inspired by the book "Programming Elixir" by Dave Thomas. │
# └───────────────────────────────────────────────────────────┘
defmodule IO.ANSI.Table do
@moduledoc """
Prints data to STDOUT in a table with borders and colors.
Can choose a table style to change the look of the table.
"""
use PersistConfig
alias IO.ANSI.Table.{Server, Style}
@async Application.get_env(@app, :async)
@doc """
Prints data from `maps` to STDOUT in a table tailored by `options`.
All options can be configured and/or passed as a keyword argument.
Each option of the keyword will override its configured counterpart.
You should however configure all options except possibly
`bell`, `count` and `style`.
The columns are identified by the `:headers` option (`map` keys).
We calculate the width of each column to fit the longest element
in that column, also considering the column heading.
However, the `:max_width` option prevails.
If the `:count` option is positive, we format the first _n_
`maps` in the list, once sorted. If negative, the last _n_ ones.
See `IO.ANSI.Table.Options` for examples of all options.
## Parameters
- `maps` - list of maps/keywords/structs (list)
- `options` - up to 10 options all configurable (keyword)
## Options
- `:align_specs` - to align column elements (list)
- `:bell` - ring the bell? (boolean)
- `:count` - number of `maps` to format (integer)
- `:headers` - to identify each column (list)
- `:header_fixes` - to alter the `headers` (map)
- `:margins` - to position the table (keyword)
- `:max_width` - to cap column widths (non_neg_integer)
- `:sort_specs` - to sort the `maps` (list)
- `:sort_symbols` - to denote sort direction (keyword)
- `:style` - table style (atom)
## Table styles
#{Style.texts(" - `&style`&filler - ¬e\n")}
## Examples
alias IO.ANSI.Table
alias IO.ANSI.Table.Server
header_fixes = %{~r[dob]i => "Date of Birth"}
Application.put_env(:io_ansi_table, :headers, [:name, :dob, :likes])
Application.put_env(:io_ansi_table, :header_fixes, header_fixes)
Application.put_env(:io_ansi_table, :sort_specs, [asc: :dob])
Application.put_env(:io_ansi_table, :align_specs, [center: :dob])
Application.put_env(:io_ansi_table, :margins, [top: 2, bottom: 2])
people = [
%{name: "Mike", likes: "ski, arts", dob: "1992-04-15"},
%{name: "Mary", likes: "reading" , dob: "1985-07-11"},
%{name: "Ray" , likes: "cycling" , dob: "1977-08-28"}
]
GenServer.stop(Server, :shutdown)
Table.format(people, style: :light)
Table.format(people, style: :medium)
Table.format(people, style: :dark)
## 
"""
@spec format([Access.container()], Keyword.t()) :: :ok
if @async do
def format(maps, options \\ []) when is_list(options) do
GenServer.cast(Server, {maps, options})
end
else
def format(maps, options \\ []) when is_list(options) do
GenServer.call(Server, {maps, options})
end
end
end