Current section

Files

Jump to
io_ansi_table lib io ansi table config.ex
Raw

lib/io/ansi/table/config.ex

defmodule IO.ANSI.Table.Config do
@moduledoc """
Gets table properties.
"""
use PersistConfig
alias IO.ANSI.Table.{Column, Style}
@default_align_specs get_env(:default_align_specs)
@default_bell get_env(:default_bell)
@default_count get_env(:default_count)
@default_headers get_env(:default_headers)
@default_header_fixes get_env(:default_header_fixes)
@default_margins get_env(:default_margins)
@default_sort_specs get_env(:default_sort_specs)
@default_sort_symbols get_env(:default_sort_symbols)
@default_style get_env(:default_style)
@max_width_range get_env(:max_width_range)
@lower_max_width @max_width_range.first
@upper_max_width @max_width_range.last
@spec align_specs() :: [Column.align_spec()]
def align_specs() do
get_env(:align_specs, @default_align_specs) |> align_specs()
end
@spec align_specs(any) :: [Column.align_spec()]
def align_specs(any) when is_list(any), do: any
def align_specs(_), do: @default_align_specs
@spec bell() :: boolean
def bell() do
get_env(:bell, @default_bell) |> bell()
end
@spec bell(any) :: boolean
def bell(any) when is_boolean(any), do: any
def bell(_), do: @default_bell
@spec count() :: integer
def count() do
get_env(:count, @default_count) |> count()
end
@spec count(any) :: integer
def count(any) when is_integer(any), do: any
def count(_), do: @default_count
@spec headers() :: [any]
def headers() do
get_env(:headers, @default_headers) |> headers()
end
@spec headers(any) :: [any]
def headers(any) when is_list(any), do: any
def headers(_), do: @default_headers
@spec header_fixes() :: map
def header_fixes() do
get_env(:header_fixes, @default_header_fixes) |> header_fixes()
end
@spec header_fixes(any) :: map
def header_fixes(any) when is_map(any), do: any
def header_fixes(_), do: @default_header_fixes
@spec margins() :: Keyword.t()
def margins() do
get_env(:margins, @default_margins) |> margins()
end
@spec margins(any) :: Keyword.t()
def margins(any) when is_list(any) do
if Keyword.keyword?(any), do: any, else: @default_margins
end
def margins(_), do: @default_margins
@spec max_width() :: Column.width()
def max_width() do
get_env(:max_width, @upper_max_width) |> max_width()
end
@spec max_width(any) :: Column.width()
def max_width(any) when is_integer(any) do
cond do
any < @lower_max_width -> @lower_max_width
any > @upper_max_width -> @upper_max_width
true -> any
end
end
def max_width(_), do: @upper_max_width
@spec sort_specs() :: [Column.sort_spec()]
def sort_specs() do
get_env(:sort_specs, @default_sort_specs) |> sort_specs()
end
@spec sort_specs(any) :: [Column.sort_spec()]
def sort_specs(any) when is_list(any), do: any
def sort_specs(_), do: @default_sort_specs
@spec sort_symbols() :: Keyword.t()
def sort_symbols() do
get_env(:sort_symbols, @default_sort_symbols) |> sort_symbols()
end
@spec sort_symbols(any) :: Keyword.t()
def sort_symbols(any) when is_list(any) do
if Keyword.keyword?(any), do: any, else: @default_sort_symbols
end
def sort_symbols(_), do: @default_sort_symbols
@spec style() :: Style.t()
def style() do
get_env(:style, @default_style) |> style()
end
@spec style(any) :: Style.t()
def style(any) when is_atom(any) do
if Enum.member?(Style.styles(), any), do: any, else: @default_style
end
def style(_), do: @default_style
end