Current section

Files

Jump to
humo lib humo.ex
Raw

lib/humo.ex

defmodule Humo do
@moduledoc """
Humo keeps the contexts that define your domain
and business logic.
Contexts are also responsible for managing your data, regardless
if it comes from the database, an external API or others.
"""
alias Ecto.Migrator
require Logger
def server_app(), do: Keyword.fetch!(config(), :server_app)
def is_server_app_module(module) when is_atom(module) do
hd(Module.split(module)) == Macro.camelize(to_string(server_app()))
end
def ordered_apps(), do: Keyword.fetch!(config(), :apps)
def migrate() do
{:ok, _, _} =
Migrator.with_repo(Humo.Repo, fn repo ->
for dir <- migration_dirs(),
do: Migrator.run(repo, dir, :up, all: true)
end)
end
defp migration_dirs() do
dirs =
ordered_apps()
|> Enum.flat_map(&[Application.app_dir(&1.app, ["priv", "repo", "migrations"])])
|> Enum.filter(&File.dir?/1)
Logger.debug("Migration dirs #{inspect(dirs, pretty: true, width: 0, limit: :infinity)}")
dirs
end
defp config(), do: Application.fetch_env!(:humo, __MODULE__)
end