Current section
Files
Jump to
Current section
Files
lib/mix/tasks/terminator.create.role.ex
defmodule Mix.Tasks.Terminator.Create.Role do
use Mix.Task
alias Terminator.Role
alias Terminator.Repo
@shortdoc "Create new role"
# @opts [strict: [name: :string, abilities: [:string, :keep]], aliases: [n: :name]]
def run(argv) do
Application.ensure_all_started(:terminator)
%{args: args} =
Optimus.new!(
name: "terminator.create.role",
args: [
role: [
value_name: "role_identifier",
help: "Role identifier (:atom)",
required: true,
parser: :string
],
name: [
value_name: "role_name",
help: "Role human name (:string)",
required: true,
parser: :string
],
abilities: [
value_name: "abilities",
help: "Role abilities (:string,:string)",
required: true,
parser: :string
]
]
)
|> Optimus.parse!(argv)
args = Map.put(args, :abilities, String.split(args.abilities, ","))
create_role(args)
end
defp create_role(%{abilities: abilities, name: name, role: role}) do
changeset =
Role.changeset(%Role{}, %{
identifier: role,
name: name,
abilities: abilities
})
result = Repo.insert(changeset)
case result do
{:ok, _} ->
IO.puts("Role created")
{:error, error} ->
IO.puts("Error while creating role")
IO.inspect(error.errors)
end
end
end