Packages
io_ansi_table
1.0.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/spec/rows.ex
defmodule IO.ANSI.Table.Spec.Rows do
@moduledoc """
Derives the rows of a table.
Also transposes rows into columns.
"""
alias IO.ANSI.Table.{Column, Header, Row, Spec}
# Reset log files at compile time to log debug messages.
# May need `mix compile --force` and `mix test --force`.
{:ok, _apps} = Application.ensure_all_started(:log_reset)
@doc """
Derives the rows of a table given `spec` and `maps`.
## Examples
iex> alias IO.ANSI.Table.Spec.Rows
iex> alias IO.ANSI.Table.Spec
iex> spec = Spec.new([:c4, :c1, :c2])
iex> maps = [%{c1: 11, c2: 12, c4: 14}, %{c1: 21, c2: 22, c4: 24}]
iex> %Spec{rows: rows} = Rows.derive_and_put(spec, maps)
iex> rows
[["14", "11", "12"], ["24", "21", "22"]]
"""
@spec derive_and_put(Spec.t(), [Access.container()]) :: Spec.t()
def derive_and_put(
%Spec{
count: count,
headers: headers,
sort_specs: specs
} = spec,
maps
) do
require MapSorter
rows = MapSorter.sort(maps, specs) |> Enum.take(count) |> select(headers)
put_in(spec.rows, rows)
end
@doc """
Transposes `rows` into columns.
## Examples
iex> alias IO.ANSI.Table.Spec.Rows
iex> rows = [
...> ["1", "2", "3"],
...> ["4", "5", "6"]
...> ]
iex> Rows.transpose(rows)
[["1", "4"], ["2", "5"], ["3", "6"]]
"""
@spec transpose([Row.t()]) :: [Column.t()]
def transpose(rows), do: Enum.zip(rows) |> Enum.map(&Tuple.to_list/1)
## Private functions
# @doc """
# Gets the values for `headers` in `maps` and returns a list of rows.
# ## Examples
# iex> alias IO.ANSI.Table.Spec.Rows
# iex> maps = [
# ...> %{a: 1, b: 2, c: 3},
# ...> %{a: 4, b: 5, c: 6}
# ...> ]
# iex> Rows.select(maps, [:c, :a])
# [["3", "1"], ["6", "4"]]
# iex> alias IO.ANSI.Table.Spec.Rows
# iex> maps = [
# ...> %{:one => "1", '2' => 2.0, "3" => :three},
# ...> %{:one => '4', '2' => "5", "3" => 000006}
# ...> ]
# iex> Rows.select(maps, ["3", :one, '2'])
# [["three", "1", "2.0"], ["6", "4", "5"]]
# """
@spec select([Access.container()], [Header.t()]) :: [Row.t()]
defp select(maps, headers) do
for map <- maps do
for header <- headers, do: map[header] |> to_string()
end
end
end