Packages
pow
1.0.39
1.0.39
1.0.38
1.0.37
1.0.36
1.0.35
1.0.34
1.0.33
1.0.32
1.0.31
1.0.30
1.0.29
1.0.28
1.0.27
1.0.26
1.0.25
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.1.0-rc.1
0.1.0-alpha.8
0.1.0-alpha.7
retired
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha
Robust user authentication solution
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/ecto/pow.ecto.gen.schema.ex
defmodule Mix.Tasks.Pow.Ecto.Gen.Schema do
@shortdoc "Generates user schema module"
@moduledoc """
Generates a user schema.
mix pow.ecto.gen.schema
mix pow.ecto.gen.schema --context-app my_app Accounts.Account accounts
This generator will add a schema module file in `lib/my_app/users/user.ex`.
## Arguments
* `--binary-id` - use binary id for primary key and references
* `--context-app` - context app to use for path and module names
"""
use Mix.Task
alias Pow.Ecto.Schema.Module, as: SchemaModule
alias Mix.{Generator, Pow}
@switches [context_app: :string, binary_id: :boolean]
@default_opts [binary_id: false]
@mix_task "pow.ecto.gen.schema"
@impl true
def run(args) do
Pow.no_umbrella!(@mix_task)
Pow.ensure_ecto!(@mix_task, args)
args
|> Pow.parse_options(@switches, @default_opts)
|> parse()
|> create_schema_file()
end
defp parse({config, parsed, _invalid}) do
parsed
|> Pow.validate_schema_args!(@mix_task)
|> Map.merge(config)
end
defp create_schema_file(%{binary_id: binary_id, schema_name: schema_name, schema_plural: schema_plural} = config) do
context_app = Map.get(config, :context_app) || Pow.otp_app()
context_base = Pow.app_base(context_app)
schema = SchemaModule.new(context_base, schema_name, schema_plural, binary_id: binary_id)
content = SchemaModule.gen(schema)
dir_name = dir_name(schema_name)
file_name = file_name(schema.module)
context_app
|> Pow.context_lib_path(dir_name)
|> maybe_create_directory()
|> Path.join(file_name)
|> ensure_unique()
|> Generator.create_file(content)
end
defp dir_name(schema_name) do
schema_name
|> String.split(".")
|> Enum.slice(0..-2//1)
|> Enum.join(".")
|> Macro.underscore()
end
defp file_name(module) do
module
|> Module.split()
|> List.last()
|> Macro.underscore()
|> Kernel.<>(".ex")
end
defp maybe_create_directory(path) do
Generator.create_directory(path)
path
end
defp ensure_unique(path) do
path
|> File.exists?()
|> case do
false -> path
_ -> Mix.raise("schema file can't be created, there is already a schema file in #{path}.")
end
end
end