Packages

Generate schema code for various libraries, like ecto, absinthe, etc.

Current section

Files

Jump to
tub lib gen ecto schema.ex
Raw

lib/gen/ecto/schema.ex

defmodule Tub.Ecto.Schema do
@moduledoc """
Generate Ecto Schema
Usage:
fields = [
f1: :string,
f2: :integer,
f3: :utc_datetime
]
Tub.Ecto.Schema.gen(Acme.Block, "block", fields)
"""
alias Tub.DynamicModule
require DynamicModule
def gen(mod_name, schema_name, fields, doc \\ false) do
preamble =
quote do
use Ecto.Schema
end
contents =
quote do
schema unquote(schema_name) do
unquote(get_fields(fields))
end
end
DynamicModule.gen(mod_name, preamble, contents, doc)
end
defp get_fields(fields) do
Enum.map(fields, fn {name, type} ->
quote do
field(unquote(name), unquote(type))
end
end)
end
end