I have a Users module:
defmodule Delete.Users do
def get_user, do: nil
end
I have. a module plug:
defmodule DeleteWeb.UserPlug do
def init(_), do: []
def call(conn, _opts) do
Map.put(conn, :user, Delete.Users.get_user())
end
end
I have a controller:
defmodule DeleteWeb.PageController do
use DeleteWeb, :controller
# The Module Plug version creates an implicit compile time dependency with `Users` module:
# plug(DeleteWeb.UserPlug)
# The locally defined function plug does not create an implicit compile time dependency
# with `Users` module:
# defp user_plug(conn, _), do: Map.put(conn, :user, Delete.Users.get_user())
# plug(:user_plug)
def index(conn, _params) do
render(conn, "index.html")
end
end
I have init_mode set in my config:
config :phoenix, :plug_init_mode, :runtime
With the above setup, using the module UserPlug
, updating Users
recompiles PageController
.
As my app grows, I will re-use this plug in all/most of controllers (as well as other similar plugs). Is it possible to share this plug around my various controllers without creating compile time dependencies all over the place?