Current section
Files
Jump to
Current section
Files
lib/mix/tasks/shards.ex
defmodule Mix.Tasks.Shards do
@moduledoc false
alias EctoSharding.Configuration, as: Config
defmacro __using__(_) do
quote do
use Mix.Task
alias Mix.Tasks.Shards
end
end
def execute(func, args) when func == Mix.Tasks.Ecto.Dump, do: run_first_shard(func, args)
def execute(func, args) when func == Mix.Tasks.Ecto.Gen.Migration, do: run_first_shard(func, args)
def execute(func, args), do: run_all_shards(func, args)
defp set_repo(repo, args) do
{parsed, args, other} = OptionParser.parse(args, aliases: [r: :repo])
permitted =
parsed
|> Keyword.merge(repo: repo)
|> OptionParser.to_argv()
[args, permitted, other]
|> List.flatten()
end
defp run_all_shards(func, args) do
Enum.each(Config.shard_repos(), fn({_name, repo}) ->
set_repo(repo, args)
|> func.run
end)
end
defp run_first_shard(func, args) do
Config.shard_repos()
|> Map.values
|> List.first
|> set_repo(args)
|> func.run
end
end