Current section
Files
Jump to
Current section
Files
lib/mix/mix_amnesia.ex
defmodule Mix.Amnesia do
@moduledoc false
@doc """
Given an atom, checks whether it is a module created with
`Amnesia.defdatabase/2`.
"""
@spec ensure_database_module(binary) :: atom
def ensure_database_module(database) when is_binary(database) do
module = Module.concat([database])
# inspired in Mix.Ecto
Mix.Task.run "loadpaths", []
Mix.Task.run "compile", []
case Code.ensure_compiled(module) do
{:module, _} ->
if function_exported?(module, :metadata, 0) do
unless %Amnesia.Metadata{database: module} == module.metadata() do
Mix.raise "module #{module} is not an Amnesia.Database. " <>
"Please pass a proper database with the --database option."
end
module
else
Mix.raise "module #{inspect module} is not an Amnesia.Database. " <>
"Please pass a proper database with the --database option."
end
{:error, error} ->
Mix.raise "could not load #{inspect module}, error: #{inspect error}. " <>
"Please pass a proper database with the --database option."
end
end
end