Files
elixir-koans/lib/display.ex
2015-12-18 14:44:13 +00:00

53 lines
1.2 KiB
Elixir

defmodule Display do
alias IO.ANSI
@current_dir File.cwd!
def show_failure(%{expr: expr}, module, name) do
IO.puts("")
IO.puts("Now meditate upon #{display_module(module)}")
IO.puts("---------------------------------------")
IO.puts(format_cyan(display_failed_assertion(module, expr)))
IO.puts(display_koan(name))
IO.puts(format_red(Macro.to_string(expr)))
end
def considering(module) do
IO.puts("Considering #{display_module(module)}...")
end
def before_run do
IO.puts("")
IO.puts("")
end
def display_failed_assertion(module, expr) do
"Assertion failed in #{source_file(module)}:#{line_number(expr)}"
end
defp line_number({_, [line: line], _}) do
line
end
defp source_file(module) do
module.__info__(:compile)
|> Dict.get(:source)
|> Path.relative_to(@current_dir)
end
defp format_red(str) do
Enum.join([ANSI.red, str, ANSI.reset], "")
end
defp format_cyan(str) do
Enum.join([ANSI.cyan, str, ANSI.reset], "")
end
defp display_module(module) do
Module.split(module) |> List.last
end
defp display_koan(name) do
String.replace(to_string(name), Koans.prefix, "")
end
end