Current section

Files

Jump to
ecto3_mnesia lib ecto adapters mnesia config.ex
Raw

lib/ecto/adapters/mnesia/config.ex

defmodule Ecto.Adapters.Mnesia.Config do
@moduledoc false
require Logger
@default %{timeout: 15_000}
def new(config) when is_map(config) do
@default
|> Map.merge(config)
|> set_path()
|> set_nodes()
end
def new(options) when is_list(options) do
new(Map.new(options))
end
def ensure_mnesia_config(config) do
mnesia_dir = to_string(:mnesia.system_info(:directory))
if config.path != mnesia_dir do
Logger.info("Set mnesia storage directory")
Application.stop(:mnesia)
Application.put_env(:mnesia, :dir, '#{config.path}', persistent: true)
{:ok, _} = Application.ensure_all_started(:mnesia)
end
config
end
###
### Priv
###
defp set_path(%{path: _path} = config), do: config
defp set_path(%{} = config) do
default_dir =
case config do
%{otp_app: otp_app} -> Application.app_dir(otp_app, "priv/mnesia")
_ -> './priv/mnesia'
end
Map.merge(config, %{path: to_string(Application.get_env(:mnesia, :dir, default_dir))})
end
defp set_nodes(%{nodes: nodes} = config) when is_list(nodes),
do: config
defp set_nodes(config), do: Map.put(config, :nodes, [node()])
end