IO ANSI Table v0.4.6 IO.ANSI.Table View Source
Prints data to STDOUT in a table with borders and colors.
Can choose a table style to change the look of the table.
Inspired by the book Programming Elixir by Dave Thomas.
Link to this section Summary
Functions
Prints data from maps
to STDOUT in a table tailored by options
Link to this section Functions
format([Access.container()], Keyword.t()) :: :ok
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 ofmaps
to format (integer):headers
- to identify each column (list):header_fixes
- to alter theheaders
(map):margins
- to position the table (keyword):max_width
- to cap column widths (non_neg_integer):sort_specs
- to sort themaps
(list):sort_symbols
- to denote sort direction (keyword):style
- table style (atom)
Table styles
:bare
- no colors:barish
- like bare but colored:cyan
- cyan background:cyan_alt
- cyan header, alternating row colors:cyan_border
- light cyan border:cyan_mult
- cyan header, 3 repeating row colors:dark
- dark colors:dark_alt
- dark colors, alternating row colors:dark_mult
- dark colors, 3 repeating row colors:dashed
- no colors:dotted
- slightly colored:dotted_alt
- slightly colored, alternating row colors:dotted_mult
- slightly colored, 3 repeating row colors:game
- game board:green
- green background:green_alt
- green header, alternating row colors:green_border
- light green border:green_border_padded
- light green border with extra padding:green_border_unpadded
- light green border without padding:green_mult
- green header, 3 repeating row colors:green_padded
- like green but with extra padding:green_unpadded
- like green but without padding:light
- light colors:light_alt
- light colors, alternating row colors:light_mult
- light colors, 3 repeating row colors:medium
- medium colors:medium_alt
- medium colors, alternating row colors:medium_mult
- medium colors, 3 repeating row colors:mixed
- fillers revealed:plain
- slightly colored:pretty
- multicolored:pretty_alt
- multicolored, alternating row colors:pretty_mult
- multicolored, 3 repeating row colors:test
- no colors:yellow
- light yellow background:yellow_border
- light yellow border
Examples
# Assuming the following config:
# config :io_ansi_table, headers: [:name, :dob, :likes]
# config :io_ansi_table, header_fixes: %{~r[dob]i => "Date of Birth"}
# config :io_ansi_table, sort_specs: [asc: :dob]
# config :io_ansi_table, align_specs: [center: :dob]
# config :io_ansi_table, margins: [top: 2, bottom: 2]
alias IO.ANSI.Table
people = [
%{name: "Mike", likes: "ski, arts", dob: "1992-04-15", bmi: 23.9},
%{name: "Mary", likes: "travels" , dob: "1992-04-15", bmi: 26.8},
%{name: "Ann" , likes: "reading" , dob: "1992-04-15", bmi: 24.7},
%{name: "Ray" , likes: "cycling" , dob: "1977-08-28", bmi: 19.1},
%{name: "Bill", likes: "karate" , dob: "1977-08-28", bmi: 18.1},
%{name: "Joe" , likes: "boxing" , dob: "1977-08-28", bmi: 20.8},
%{name: "Jill", likes: "cooking" , dob: "1976-09-28", bmi: 25.8}
]
Table.format(people, style: :light)
Table.format(people, style: :light_alt)
Table.format(people, style: :light_mult)
Table.format(people, style: :cyan_alt)
Table.format(people, style: :cyan_mult)