Current section

Files

Jump to
io_ansi_table lib ie.ex
Raw

lib/ie.ex

defmodule IE do
@moduledoc false
alias IO.ANSI.Table.{Formatter, Style}
# Functions for iex session...
#
# Examples:
# require IE
# IE.use
# print_people :green_mult
# print_people :green_mult, 9
# print_people :as_keywords, :cyan_mult
# print_people :as_keywords, :cyan_mult, 9
# styles()
# people()
# people :as_keywords
# people_sorted()
# key_for(List.first people())
# key_for(List.first people :as_keywords)
defmacro use do
quote do
import IE
alias IO.ANSI.Table.{Config, Formatter, Formatter.Helper, Style}
:ok
end
end
def people do
[ %{name: "Mike", likes: "ski, arts", date_of_birth: "1992-04-15",
height: ~s[6' 0"], weight: "176 lb", bmi: 23.9
},
%{name: "Mary", likes: "travels" , date_of_birth: "1992-04-15",
height: ~s[5' 6"], weight: "166 lb", bmi: 26.8
},
%{name: "Ann" , likes: "reading" , date_of_birth: "1992-04-15",
height: ~s[6' 1"], weight: "187 lb", bmi: 24.7
},
%{name: "Ray" , likes: "cycling" , date_of_birth: "1977-08-28",
height: ~s[6' 0"], weight: "141 lb", bmi: 19.1
},
%{name: "Bill", likes: "karate" , date_of_birth: "1977-08-28",
height: ~s[5' 8"], weight: "119 lb", bmi: 18.1
},
%{name: "Joe" , likes: "boxing" , date_of_birth: "1977-08-28",
height: "1.82 m", weight: "69 kg", bmi: 20.8
},
%{name: "Jill", likes: "cooking" , date_of_birth: "1976-09-28",
height: "1.76 m", weight: "80 kg", bmi: 25.8
}
]
end
def people(:as_keywords) do
Enum.map IE.people, &Keyword.new/1 # people as keywords
end
def headers do
[:name, :date_of_birth, :likes, :height, :weight, :bmi]
end
def key_headers do
[:date_of_birth, :likes]
end
def header_fixes do
%{~r/^bmi$/i => "BMI" ,
~r/ of /i => " of "
}
end
def align_attrs do
%{:date_of_birth => :center,
:weight => :right
}
end
def margins do
[top: 0, bottom: 0, left: 2]
end
def print_people(style) do
Formatter.print_table(
people(), length(people()), true, style,
headers: headers(), key_headers: key_headers(),
header_fixes: header_fixes(), margins: margins(),
align_attrs: align_attrs()
)
end
def print_people(:as_keywords, style) do
Formatter.print_table(
people(:as_keywords), length(people()), true, style,
headers: headers(), key_headers: key_headers(),
header_fixes: header_fixes(), margins: margins(),
align_attrs: align_attrs()
)
end
def print_people(style, max_width) do
Formatter.print_table(
people(), length(people()), true, style,
headers: headers(), key_headers: key_headers(),
header_fixes: header_fixes(), margins: margins(),
align_attrs: align_attrs(), max_width: max_width
)
end
def print_people(:as_keywords, style, max_width) do
Formatter.print_table(
people(:as_keywords), length(people()), true, style,
headers: headers(), key_headers: key_headers(),
header_fixes: header_fixes(), margins: margins(),
align_attrs: align_attrs(), max_width: max_width
)
end
def styles do
format = IO.ANSI.format [
:light_magenta, " &style&filler" ,
:reset , " - &rank - &note"
]
"#{format}"
|> Style.texts(&IO.puts/1)
|> length
end
def people_sorted do
Enum.sort_by people(), &key_for/1
end
def key_for(person) do
Formatter.key_for person, key_headers()
end
end