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]
