Current section
Files
Jump to
Current section
Files
lib/mix/tasks/tenant.mysql.install.ex
defmodule Mix.Tasks.Tenant.Mysql.Install do
@moduledoc """
Generates a migration to create the tenant table
in the default database (MySQL only).
"""
use Mix.Task
require Mix.Generator
alias Ecto.Adapters.MyXQL
alias Ecto.Migrator
alias Mix.Ecto
alias Mix.Generator
alias Mix.Project
@migration_name "create_tenant"
@shortdoc "Generates a migration for the tenant table in the default database"
@doc false
def run(args) do
Ecto.no_umbrella!("ecto.gen.migration")
repos = Ecto.parse_repo(args)
Enum.each(repos, fn repo ->
Ecto.ensure_repo(repo, args)
if repo.__adapter__() != MyXQL do
Mix.raise("the tenant table only makes sense for MySQL repositories")
end
path = Path.relative_to(Migrator.migrations_path(repo), Project.app_path())
file = Path.join(path, "#{Mix.Tenant.timestamp()}_#{@migration_name}.exs")
Generator.create_directory(path)
Generator.create_file(
file,
migration_template(
repo: repo,
migration_name: @migration_name,
tenant_table: Tenant.config().tenant_table
)
)
end)
end
Generator.embed_template(:migration, """
defmodule <%= Module.concat([@repo, Migrations, Macro.camelize(@migration_name)]) %> do
use Ecto.Migration
def change do
create table(:<%= @tenant_table %>) do
add :name, :string
end
create unique_index(:<%= @tenant_table %>, [:name])
end
end
""")
end