Current section
Files
Jump to
Current section
Files
lib/utils/dynamic_module.ex
defmodule Tub.DynamicModule do
@moduledoc """
Generate a new module based on AST
"""
defmacro gen(mod_name, preamble, contents, mod_doc \\ false) do
quote bind_quoted: [
mod_name: mod_name,
preamble: preamble,
contents: contents,
mod_doc: mod_doc
] do
moduledoc =
quote do
@moduledoc unquote(mod_doc)
end
name = String.to_atom("Elixir.#{mod_name}")
Module.create(name, [moduledoc] ++ [preamble] ++ [contents], Macro.Env.location(__ENV__))
IO.puts("Module #{mod_name} is generated.")
end
end
end