Packages
moon
2.78.1
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon_web/schema/user.ex
defmodule MoonWeb.Schema.User do
@moduledoc "Ecto schema for stub User. Initiated as a copy of MoonWeb.Pages.Tutorials.AddDataUsingForm.User"
use Ecto.Schema
import Ecto.Changeset
@required_fields ~w(name email gender username password authentication)a
@optional_fields ~w(document_filename agrees_to_marketing_emails agrees_to_terms_of_service permissions role phone country)a
schema "users" do
field(:username, :string, default: "johndoe")
field(:password, :string, default: "verysecret123")
field(:name, :string, default: "First Last")
field(:email, :string, default: "joe@doe.com")
field(:phone, :string)
field(:country, :string)
field(:gender, :string, default: "male")
field(:document_filename)
field(:agrees_to_terms_of_service, :boolean, default: true)
field(:agrees_to_marketing_emails, :boolean, default: true)
field(:permissions, {:array, :integer})
field(:role, :integer)
field(:authentication, :string)
end
def gender_options() do
[
%{key: "Female", value: "female"},
%{key: "Male", value: "male"},
%{key: "Invalid choice", value: "invalid"},
%{key: "I identify as God and this is not important", value: "god", disabled: true}
]
end
def available_permissions() do
[
%{value: 1, key: "Read"},
%{value: 2, key: "Write"},
%{value: 3, key: "Update"},
%{value: 4, key: "Delete"},
%{value: 5, key: "Nuclear war", disabled: true}
]
end
def available_permissions_with_left_icon() do
[
%{value: 1, key: "Read", left_icon: [Moon.Icon, %{name: "generic_user"}]},
%{value: 2, key: "Write", left_icon: [Moon.Icon, %{name: "generic_star"}]},
%{value: 3, key: "Update", left_icon: [Moon.Icon, %{name: "text_increase_indent"}]},
%{value: 4, key: "Delete", left_icon: [Moon.Icon, %{name: "generic_edit"}]},
%{value: 5, key: "Nuclear war", left_icon: [Moon.Icon, %{name: "files_file"}]}
]
end
def available_roles() do
[
%{value: 1, key: "User"},
%{value: 2, key: "Editor"},
%{value: 3, key: "Admin"}
]
end
def available_roles_with_icon() do
[
%{value: 1, key: "User", icon: "generic_user"},
%{value: 2, key: "Editor", icon: "generic_edit"},
%{value: 3, key: "Admin", icon: "generic_star"}
]
end
def available_roles_with_right_icon() do
[
%{value: 1, key: "User", right_icon: [Moon.Icon, %{name: "generic_user"}]},
%{value: 2, key: "Editor", right_icon: [Moon.Icon, %{name: "generic_edit"}]},
%{value: 3, key: "Admin", right_icon: [Moon.Icon, %{name: "generic_star"}]}
]
end
def available_roles_with_left_icon_flag() do
[first, second, third | _] = Moon.Helpers.CountryFlags.list_all()
[
%{value: 1, key: "User", left_icon: [Moon.CountryFlag, %{name: first}]},
%{value: 2, key: "Editor", left_icon: [Moon.CountryFlag, %{name: second}]},
%{value: 3, key: "Admin", left_icon: [Moon.CountryFlag, %{name: third}]}
]
end
def available_roles_with_left_icon_flag_and_right_icon() do
[first, second, third] = Moon.Helpers.CountryFlags.list_all() |> Enum.take(3)
[
%{
value: 1,
key: "User",
left_icon: [Moon.CountryFlag, %{name: first}],
right_icon: [Moon.Icon, %{name: "generic_user"}]
},
%{
value: 2,
key: "Editor",
left_icon: [Moon.CountryFlag, %{name: second}],
right_icon: [Moon.Icon, %{name: "generic_edit"}]
},
%{
value: 3,
key: "Admin",
left_icon: [Moon.CountryFlag, %{name: third}],
right_icon: [Moon.Icon, %{name: "generic_star"}]
}
]
end
def changeset(user = %__MODULE__{}, params \\ %{}) do
user
|> cast(params, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
|> validate_length(:username, min: 4)
|> validate_length(:authentication, min: 4)
|> validate_inclusion(:password, ["password"],
message: "sorry, correct password is 'verysecret123'"
)
|> validate_format(:email, ~r/@/)
|> validate_inclusion(:gender, ["female", "male", "other"])
|> validate_inclusion(:agrees_to_terms_of_service, [true],
message: "please accept terms of service"
)
end
end