defmodule LSGWeb.IrcController do use LSGWeb, :controller def index(conn, _) do commands = for mod <- Application.get_env(:lsg, :irc)[:handlers] do mod.irc_doc() end render conn, "index.html", commands: commands end def txt(conn, %{"name" => name}), do: do_txt(conn, name) def txt(conn, _), do: do_txt(conn, nil) defp do_txt(conn, nil) do render conn, "txts.html", data: data() end defp do_txt(conn, txt) do data = data() if Map.has_key?(data, txt) do render(conn, "txt.html", name: txt, data: data[txt]) else conn |> put_status(404) end end defp data() do dir = Application.get_env(:lsg, LSG.IRC.TxtHandler)[:directory] Path.wildcard(dir <> "/*.txt") |> Enum.reduce(%{}, fn(path, m) -> path = String.split(path, "/") file = List.last(path) [key, "txt"] = String.split(file, ".", parts: 2) data = dir <> file |> File.read! |> String.split("\n") |> Enum.reject(fn(line) -> cond do line == "" -> true !line -> true true -> false end end) Map.put(m, key, data) end) |> Enum.sort |> Enum.into(Map.new) end end