Packages
pow
1.0.2
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
Security advisory:
This version has known vulnerabilities.
View advisories
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"
@moduledoc """
Generates a user schema.
mix pow.ecto.gen.schema -r MyApp.Repo
mix pow.ecto.gen.schema -r MyApp.Repo Accounts.Organization organizations
"""
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"
@doc false
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
case parsed do
[schema_name, schema_plural | _rest] ->
Map.merge(config, %{schema_name: schema_name, schema_plural: schema_plural})
_ ->
config
end
end
defp create_schema_file(%{binary_id: binary_id} = config) do
context_app = Map.get(config, :context_app, Pow.context_app())
context_base = Pow.context_base(context_app)
schema_name = Map.get(config, :schema_name, "Users.User")
schema_plural = Map.get(config, :schema_plural, "users")
schema = SchemaModule.new(context_base, schema_name, schema_plural, binary_id: binary_id)
content = SchemaModule.gen(schema)
dir_name =
schema.schema_name
|> String.split(".")
|> Enum.slice(0..-2)
|> Enum.join(".")
|> Macro.underscore()
file_name =
schema.module
|> Module.split()
|> List.last()
|> Macro.underscore()
|> Kernel.<>(".ex")
context_app
|> Pow.context_lib_path(dir_name)
|> maybe_create_directory()
|> Path.join(file_name)
|> ensure_unique()
|> Generator.create_file(content)
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