Current section

Files

Jump to
ecto lib mix tasks ecto.gen.repo.ex
Raw

lib/mix/tasks/ecto.gen.repo.ex

defmodule Mix.Tasks.Ecto.Gen.Repo do
use Mix.Task
import Mix.Tasks.Ecto
import Mix.Generator
@shortdoc "Generates a new repository"
@moduledoc """
Generates a new repository.
The repository will be placed in the `lib` directory.
## Examples
mix ecto.gen.repo Repo
"""
def run(args) do
no_umbrella!("ecto.gen.repo")
{repo, _} = parse_repo(args)
config = Mix.Project.config
underscored = Mix.Utils.underscore(inspect(repo))
base = Path.basename(underscored)
file = Path.join("lib", underscored) <> ".ex"
app = config[:app] || :YOUR_APP_NAME
create_directory Path.dirname(file)
create_file file, repo_template(mod: repo, app: app, base: base)
open?(file)
unless config[:build_per_environment] do
Mix.shell.info "We have generated a repo that uses a different database per environment. " <>
"So don't forget to set [build_per_environment: true] in your mix.exs file.\n"
end
Mix.shell.info """
Don't forget to add your new repo to your supervision tree as:
worker(#{inspect repo}, [])
"""
end
embed_template :repo, """
defmodule <%= inspect @mod %> do
use Ecto.Repo, adapter: Ecto.Adapters.Postgres, env: Mix.env
@doc "Adapter configuration"
def conf(env), do: parse_url url(env)
@doc "The URL to reach the database."
defp url(:dev) do
"ecto://user:pass@localhost/<%= @app %>_<%= @base %>_dev"
end
defp url(:test) do
"ecto://user:pass@localhost/<%= @app %>_<%= @base %>_test?size=1&max_overflow=0"
end
defp url(:prod) do
"ecto://user:pass@localhost/<%= @app %>_<%= @base %>_prod"
end
@doc "The priv directory to load migrations and metadata."
def priv do
app_dir(<%= inspect @app %>, "priv/<%= @base %>")
end
end
"""
end