Packages
tableau
0.2.0
0.30.0
0.29.0
0.28.0
0.27.1
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.1
0.17.0
0.16.0
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.2
0.1.1
0.1.0
Static site generator for elixir
Current section
Files
Jump to
Current section
Files
lib/tableau/code_reloader.ex
defmodule Tableau.CodeReloader do
@moduledoc false
# Handles automatic code reloading.
# Taken from [Still](https://github.com/still-ex/still/blob/277f4b546f0abf1ba56167a7ae894a49069b3c6c/lib/still/web/code_reloader.ex), which is taken from [Phoenix](https://github.com/phoenixframework/phoenix/blob/431c51e20d8840fa1f851160b659f78c6bb484c6/lib/phoenix/code_reloader/server.ex).
use GenServer
require Logger
def start_link(_) do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
@doc """
Reloads the code.
"""
def reload do
GenServer.call(__MODULE__, :reload)
end
def init(_opts) do
{:ok, :nostate}
end
def handle_call(:reload, from, state) do
froms = all_waiting([from])
mix_compile(Code.ensure_loaded(Mix.Task))
Enum.each(froms, &GenServer.reply(&1, :ok))
{:noreply, state}
end
defp all_waiting(acc) do
receive do
{:"$gen_call", from, :reload} -> all_waiting([from | acc])
after
0 -> acc
end
end
defp mix_compile({:error, _reason}) do
Logger.error("Could not find Mix")
end
defp mix_compile({:module, Mix.Task}) do
Mix.Task.reenable("compile.elixir")
Mix.Task.run("compile.elixir")
end
end