IO ANSI Table v0.1.5 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 key-value collection
and a list of keys
Takes a list of key-value collections
, the (maximum) number of
collections
to format, whether to ring the bell
, a table style
and,
as options
, a list of headers
(keys), a list of key headers
to sort
the collections
on and a list of margins
to position the table
Takes a list of key-value collections
and a list of keys
Uppercases all first characters of a title
(converted to a string).
Patterns “matching” any given term will be replaced by the term as is
Given a list of columns
(string sublists), returns a list containing
the maximum width of each column
Functions
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"]]
Takes a key-value collection
and a list of keys
.
Returns a sort key for the collection
.
Examples
iex> alias IO.ANSI.Table.Formatter
iex> collection = [one: '1', two: "2", three: 3.0, four: 4]
iex> keys = [:three, :one, :four]
iex> Formatter.key_for(collection, keys)
"3.014"
Takes a list of key-value collections
, the (maximum) number of
collections
to format, whether to ring the bell
, a table style
and,
as options
, a list of headers
(keys), a list of key headers
to sort
the collections
on and a list of margins
to position the table.
Prints a table to STDOUT of the values in each selected collection
.
The columns are identified by successive headers
in order.
We calculate the width of each column to fit the longest element
in that column, also considering the header
itself.
If the number of collections
given is positive, we format
the n
first collections
in the list. If negative, the last n
ones.
Parameters
collections
- list of collections (maps or keywords)count
- number of collections to format (integer)bell
- ring the bell? (boolean)style
- table style (atom)options
- headers, key headers, header terms and margins (keyword)
Table styles
:light
- light colors:medium
- medium colors:dark
- dark colors:pretty
- multicolored:cyan
- light cyan background:yellow
- light yellow background:green
- light green background:CYAN
- light cyan border:YELLOW
- light yellow border:GREEN
- light green border:mixed
- fillers revealed:dotted
- slightly colored:dashed
- no colors:plain
- slightly colored:test
- no colors:bare
- no colors:barish
- like bare but colored:green_padded
- like green but with extra padding:green_unpadded
- like green but without padding:GREEN_PADDED
- like GREEN but with extra padding:GREEN_UNPADDED
- like GREEN but without padding:black_alt
- black header, alternating row colors:black_mult
- black header, 3 repeating row colors:green_alt
- green header, alternating row colors:green_mult
- green header, 3 repeating row colors
Options
:headers
- defaults to config value:headers
:key_headers
- defaults to config value:key_headers
:header_terms
- defaults to config value:header_terms
:margins
- defaults to config value:margins
Examples
alias IO.ANSI.Table.Formatter
people = [
%{name: "Mike", likes: "ski, arts", date_of_birth: "1992-04-15"},
%{name: "Mary", likes: "reading" , date_of_birth: "1985-07-11"},
%{name: "Ray" , likes: "cycling" , date_of_birth: "1977-08-28"}
]
Formatter.print_table(
people, 3, true, :dark,
headers: [:name, :date_of_birth, :likes],
key_headers: [:date_of_birth],
header_terms: [" of "],
margins: [top: 2, bottom: 2, left: 2]
)
iex> alias IO.ANSI.Table.Formatter
iex> alias ExUnit.CaptureIO
iex> people = [
...> %{name: "Mike", likes: "ski, arts", date_of_birth: "1992-04-15"},
...> %{name: "Mary", likes: "reading" , date_of_birth: "1985-07-11"},
...> %{name: "Ray" , likes: "cycling" , date_of_birth: "1977-08-28"}
...> ]
iex> CaptureIO.capture_io fn ->
...> Formatter.print_table(
...> people, 3, false, :dashed,
...> headers: [:name, :date_of_birth, :likes],
...> key_headers: [:date_of_birth],
...> header_terms: [" of "],
...> margins: [top: 0, bottom: 0, left: 0]
...> )
...> end
"""
+------+---------------+-----------+
| Name | Date of Birth | Likes |
+------+---------------+-----------+
| Ray | 1977-08-28 | cycling |
| Mary | 1985-07-11 | reading |
| Mike | 1992-04-15 | ski, arts |
+------+---------------+-----------+
"""
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"]]
Uppercases all first characters of a title
(converted to a string).
Patterns “matching” any given term will be replaced by the term as is.
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 ", [" of ", " a "])
"Son of a Gun"
iex> alias IO.ANSI.Table.Formatter
iex> Formatter.titlecase("_date___of_birth_", [" of "])
"Date of Birth"
iex> alias IO.ANSI.Table.Formatter
iex> Formatter.titlecase(:" _an_ _oDD case_ ")
"An ODD Case"
Given a list of columns
(string sublists), 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]