Packages
tai
0.0.69
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/tai.gen.migration.ex
defmodule Mix.Tasks.Tai.Gen.Migration do
@shortdoc "Generates migrations for tai"
@moduledoc """
Generates database migrations for tai repos:
- Tai.Orders.OrderRepo
"""
use Mix.Task
import Mix.Ecto
import Mix.Generator
@doc false
def run(args) do
# TODO: Is this check actually required?
# no_umbrella!("ecto.gen.migration")
tai_app_dir = Application.app_dir(:tai)
args
|> tai_repos()
|> Enum.each(fn repo ->
ensure_repo(repo, args)
repo_migrations_destination_dir_path = Ecto.Migrator.migrations_path(repo)
create_directory(repo_migrations_destination_dir_path)
tai_migration_templates_dir_path =
Path.join(tai_app_dir, "priv/repo_templates/#{repo_template_dir(repo)}/migrations")
tai_migration_templates_dir_path
|> File.ls!()
|> Enum.map(&Path.join(tai_migration_templates_dir_path, &1))
|> Enum.map(fn migration_template_path ->
basename = Path.basename(migration_template_path, ".eex")
destination_path = Path.join(repo_migrations_destination_dir_path, basename)
generated_migration = EEx.eval_file(migration_template_path, module_prefix: app_module())
create_file(destination_path, generated_migration)
end)
end)
end
@tai_repos [Tai.Orders.OrderRepo]
defp tai_repos(args) do
args
|> parse_repo()
|> Enum.filter(fn r -> Enum.member?(@tai_repos, r) end)
end
defp repo_template_dir(repo) do
repo
|> Module.split()
|> List.last()
|> Macro.underscore()
end
defp app_module do
Mix.Project.config()
|> Keyword.fetch!(:app)
|> to_string()
|> Macro.camelize()
end
end