From e0ac714681753f0a59887343ad941bb372633d96 Mon Sep 17 00:00:00 2001 From: shibao Date: Wed, 23 Nov 2022 20:46:41 -0500 Subject: [PATCH] improve changesets and typespecs --- CHANGELOG.md | 3 + CONTRIBUTING.md | 4 +- lib/cannery/accounts.ex | 75 ++++++++++--------- lib/cannery/accounts/user.ex | 39 +++++----- lib/cannery/activity_log.ex | 8 +- lib/cannery/activity_log/shot_group.ex | 7 +- lib/cannery/ammo.ex | 12 +-- lib/cannery/ammo/ammo_group.ex | 9 +-- lib/cannery/ammo/ammo_type.ex | 7 +- lib/cannery/containers.ex | 6 +- lib/cannery/containers/container.ex | 7 +- lib/cannery/containers/container_tag.ex | 4 +- lib/cannery/invites.ex | 9 +-- lib/cannery/invites/invite.ex | 10 +-- lib/cannery/tags.ex | 7 +- lib/cannery/tags/tag.ex | 5 +- .../user_registration_controller.ex | 3 +- .../live/invite_live/form_component.ex | 2 +- mix.exs | 2 +- priv/gettext/de/LC_MESSAGES/default.po | 2 +- priv/gettext/de/LC_MESSAGES/errors.po | 22 +++--- priv/gettext/de/LC_MESSAGES/prompts.po | 2 +- priv/gettext/default.pot | 2 +- priv/gettext/en/LC_MESSAGES/default.po | 2 +- priv/gettext/en/LC_MESSAGES/errors.po | 22 +++--- priv/gettext/en/LC_MESSAGES/prompts.po | 2 +- priv/gettext/errors.pot | 22 +++--- priv/gettext/es/LC_MESSAGES/default.po | 2 +- priv/gettext/es/LC_MESSAGES/errors.po | 22 +++--- priv/gettext/es/LC_MESSAGES/prompts.po | 2 +- priv/gettext/fr/LC_MESSAGES/default.po | 2 +- priv/gettext/fr/LC_MESSAGES/errors.po | 22 +++--- priv/gettext/fr/LC_MESSAGES/prompts.po | 2 +- priv/gettext/ga/LC_MESSAGES/default.po | 2 +- priv/gettext/ga/LC_MESSAGES/errors.po | 22 +++--- priv/gettext/ga/LC_MESSAGES/prompts.po | 2 +- priv/gettext/prompts.pot | 2 +- test/cannery/accounts_test.exs | 5 +- 38 files changed, 191 insertions(+), 189 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccaa4dd6..5ab8e234 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# v0.7.2 +- Code improvements + # v0.7.1 - Fix table component alignment and styling - Fix toggle button styling diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9632e55c..3acad328 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,8 +17,8 @@ If you're multilingual, this project can use your translations! Visit functions as short as possible while keeping variable names descriptive! For instance, use inline `do:` blocks for short functions and make your aliases as short as possible without introducing ambiguity. - - I.e. since there's only one `Changeset` in the app, please alias - `Changeset.t(Type.t())` instead of using `Ecto.Changeset.t(Long.Type.t())` + - I.e. since there's only one `AmmoGroup` in the app, please alias + `AmmoGroup.t()` instead of using `Cannery.Ammo.AmmoGroup.t()` - Use pipelines when possible. If only calling a single method, a pipeline isn't strictly necessary but still encouraged for future modification. - Please add typespecs to your functions! Even your private functions may be diff --git a/lib/cannery/accounts.ex b/lib/cannery/accounts.ex index c1d038af..f088fac8 100644 --- a/lib/cannery/accounts.ex +++ b/lib/cannery/accounts.ex @@ -23,7 +23,7 @@ defmodule Cannery.Accounts do nil """ - @spec get_user_by_email(String.t()) :: User.t() | nil + @spec get_user_by_email(email :: String.t()) :: User.t() | nil def get_user_by_email(email) when is_binary(email), do: Repo.get_by(User, email: email) @doc """ @@ -38,7 +38,7 @@ defmodule Cannery.Accounts do nil """ - @spec get_user_by_email_and_password(String.t(), String.t()) :: + @spec get_user_by_email_and_password(email :: String.t(), password :: String.t()) :: User.t() | nil def get_user_by_email_and_password(email, password) when is_binary(email) and is_binary(password) do @@ -86,7 +86,7 @@ defmodule Cannery.Accounts do [%User{}] """ - @spec list_users_by_role(:admin | :user) :: [User.t()] + @spec list_users_by_role(User.role()) :: [User.t()] def list_users_by_role(role) do role = role |> to_string() Repo.all(from u in User, where: u.role == ^role, order_by: u.email) @@ -106,15 +106,21 @@ defmodule Cannery.Accounts do {:error, %Changeset{}} """ - @spec register_user(map()) :: {:ok, User.t()} | {:error, Changeset.t(User.new_user())} + @spec register_user(attrs :: map()) :: {:ok, User.t()} | {:error, User.changeset()} def register_user(attrs) do - # if no registered users, make first user an admin - role = - if Repo.one!(from u in User, select: count(u.id), distinct: true) == 0, - do: "admin", - else: "user" + Multi.new() + |> Multi.one(:users_count, from(u in User, select: count(u.id), distinct: true)) + |> Multi.insert(:add_user, fn %{users_count: count} -> + # if no registered users, make first user an admin + role = if count == 0, do: "admin", else: "user" - %User{} |> User.registration_changeset(attrs |> Map.put("role", role)) |> Repo.insert() + User.registration_changeset(attrs) |> User.role_changeset(role) + end) + |> Repo.transaction() + |> case do + {:ok, %{add_user: user}} -> {:ok, user} + {:error, :add_user, changeset, _changes_so_far} -> {:error, changeset} + end end @doc """ @@ -126,12 +132,10 @@ defmodule Cannery.Accounts do %Changeset{data: %User{}} """ - @spec change_user_registration(User.t() | User.new_user()) :: - Changeset.t(User.t() | User.new_user()) - @spec change_user_registration(User.t() | User.new_user(), map()) :: - Changeset.t(User.t() | User.new_user()) - def change_user_registration(user, attrs \\ %{}), - do: User.registration_changeset(user, attrs, hash_password: false) + @spec change_user_registration() :: User.changeset() + @spec change_user_registration(attrs :: map()) :: User.changeset() + def change_user_registration(attrs \\ %{}), + do: User.registration_changeset(attrs, hash_password: false) ## Settings @@ -144,7 +148,8 @@ defmodule Cannery.Accounts do %Changeset{data: %User{}} """ - @spec change_user_email(User.t(), map()) :: Changeset.t(User.t()) + @spec change_user_email(User.t()) :: User.changeset() + @spec change_user_email(User.t(), attrs :: map()) :: User.changeset() def change_user_email(user, attrs \\ %{}), do: User.email_changeset(user, attrs) @doc """ @@ -156,7 +161,7 @@ defmodule Cannery.Accounts do %Changeset{data: %User{}} """ - @spec change_user_role(User.t(), atom()) :: Changeset.t(User.t()) + @spec change_user_role(User.t(), User.role()) :: User.changeset() def change_user_role(user, role), do: User.role_changeset(user, role) @doc """ @@ -172,8 +177,8 @@ defmodule Cannery.Accounts do {:error, %Changeset{}} """ - @spec apply_user_email(User.t(), String.t(), map()) :: - {:ok, User.t()} | {:error, Changeset.t(User.t())} + @spec apply_user_email(User.t(), email :: String.t(), attrs :: map()) :: + {:ok, User.t()} | {:error, User.changeset()} def apply_user_email(user, password, attrs) do user |> User.email_changeset(attrs) @@ -187,7 +192,7 @@ defmodule Cannery.Accounts do If the token matches, the user email is updated and the token is deleted. The confirmed_at date is also updated to the current time. """ - @spec update_user_email(User.t(), String.t()) :: :ok | :error + @spec update_user_email(User.t(), token :: String.t()) :: :ok | :error def update_user_email(user, token) do context = "change:#{user.email}" @@ -200,7 +205,7 @@ defmodule Cannery.Accounts do end end - @spec user_email_multi(User.t(), String.t(), String.t()) :: Multi.t() + @spec user_email_multi(User.t(), email :: String.t(), context :: String.t()) :: Multi.t() defp user_email_multi(user, email, context) do changeset = user |> User.email_changeset(%{email: email}) |> User.confirm_changeset() @@ -218,7 +223,8 @@ defmodule Cannery.Accounts do {:ok, %{to: ..., body: ...}} """ - @spec deliver_update_email_instructions(User.t(), String.t(), function) :: Job.t() + @spec deliver_update_email_instructions(User.t(), current_email :: String.t(), function) :: + Job.t() def deliver_update_email_instructions(user, current_email, update_email_url_fun) when is_function(update_email_url_fun, 1) do {encoded_token, user_token} = UserToken.build_email_token(user, "change:#{current_email}") @@ -235,7 +241,7 @@ defmodule Cannery.Accounts do %Changeset{data: %User{}} """ - @spec change_user_password(User.t(), map()) :: Changeset.t(User.t()) + @spec change_user_password(User.t(), attrs :: map()) :: User.changeset() def change_user_password(user, attrs \\ %{}), do: User.password_changeset(user, attrs, hash_password: false) @@ -251,8 +257,8 @@ defmodule Cannery.Accounts do {:error, %Changeset{}} """ - @spec update_user_password(User.t(), String.t(), map()) :: - {:ok, User.t()} | {:error, Changeset.t(User.t())} + @spec update_user_password(User.t(), String.t(), attrs :: map()) :: + {:ok, User.t()} | {:error, User.changeset()} def update_user_password(user, password, attrs) do changeset = user @@ -278,7 +284,7 @@ defmodule Cannery.Accounts do %Changeset{data: %User{}} """ - @spec change_user_locale(User.t()) :: Changeset.t(User.t()) + @spec change_user_locale(User.t()) :: User.changeset() def change_user_locale(%{locale: locale} = user), do: User.locale_changeset(user, locale) @doc """ @@ -294,7 +300,7 @@ defmodule Cannery.Accounts do """ @spec update_user_locale(User.t(), locale :: String.t()) :: - {:ok, User.t()} | {:error, Changeset.t(User.t())} + {:ok, User.t()} | {:error, User.changeset()} def update_user_locale(user, locale), do: user |> User.locale_changeset(locale) |> Repo.update() @@ -310,7 +316,7 @@ defmodule Cannery.Accounts do %User{} """ - @spec delete_user!(User.t(), User.t()) :: User.t() + @spec delete_user!(user_to_delete :: User.t(), User.t()) :: User.t() def delete_user!(user, %User{role: :admin}), do: user |> Repo.delete!() def delete_user!(%User{id: user_id} = user, %User{id: user_id}), do: user |> Repo.delete!() @@ -329,7 +335,7 @@ defmodule Cannery.Accounts do @doc """ Gets the user with the given signed token. """ - @spec get_user_by_session_token(String.t()) :: User.t() + @spec get_user_by_session_token(token :: String.t()) :: User.t() def get_user_by_session_token(token) do {:ok, query} = UserToken.verify_session_token_query(token) Repo.one(query) @@ -338,7 +344,7 @@ defmodule Cannery.Accounts do @doc """ Deletes the signed token with the given context. """ - @spec delete_session_token(String.t()) :: :ok + @spec delete_session_token(token :: String.t()) :: :ok def delete_session_token(token) do Repo.delete_all(UserToken.token_and_context_query(token, "session")) :ok @@ -394,7 +400,7 @@ defmodule Cannery.Accounts do If the token matches, the user account is marked as confirmed and the token is deleted. """ - @spec confirm_user(String.t()) :: {:ok, User.t()} | atom() + @spec confirm_user(token :: String.t()) :: {:ok, User.t()} | :error def confirm_user(token) do with {:ok, query} <- UserToken.verify_email_token_query(token, "confirm"), %User{} = user <- Repo.one(query), @@ -443,7 +449,7 @@ defmodule Cannery.Accounts do nil """ - @spec get_user_by_reset_password_token(String.t()) :: User.t() | nil + @spec get_user_by_reset_password_token(token :: String.t()) :: User.t() | nil def get_user_by_reset_password_token(token) do with {:ok, query} <- UserToken.verify_email_token_query(token, "reset_password"), %User{} = user <- Repo.one(query) do @@ -465,7 +471,8 @@ defmodule Cannery.Accounts do {:error, %Changeset{}} """ - @spec reset_user_password(User.t(), map()) :: {:ok, User.t()} | {:error, Changeset.t(User.t())} + @spec reset_user_password(User.t(), attrs :: map()) :: + {:ok, User.t()} | {:error, User.changeset()} def reset_user_password(user, attrs) do Multi.new() |> Multi.update(:user, User.password_changeset(user, attrs)) diff --git a/lib/cannery/accounts/user.ex b/lib/cannery/accounts/user.ex index 3ecab160..ef98e000 100644 --- a/lib/cannery/accounts/user.ex +++ b/lib/cannery/accounts/user.ex @@ -39,7 +39,7 @@ defmodule Cannery.Accounts.User do password: String.t(), hashed_password: String.t(), confirmed_at: NaiveDateTime.t(), - role: atom(), + role: role(), locale: String.t() | nil, invites: [Invite.t()], inserted_at: NaiveDateTime.t(), @@ -47,6 +47,8 @@ defmodule Cannery.Accounts.User do } @type new_user :: %User{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_user()) + @type role :: :admin | :user | String.t() @doc """ A user changeset for registration. @@ -65,26 +67,24 @@ defmodule Cannery.Accounts.User do validations on a LiveView form), this option can be set to `false`. Defaults to `true`. """ - @spec registration_changeset(t() | new_user(), attrs :: map()) :: Changeset.t(t() | new_user()) - @spec registration_changeset(t() | new_user(), attrs :: map(), opts :: keyword()) :: - Changeset.t(t() | new_user()) - def registration_changeset(user, attrs, opts \\ []) do - user - |> cast(attrs, [:email, :password, :role, :locale]) + @spec registration_changeset(attrs :: map()) :: changeset() + @spec registration_changeset(attrs :: map(), opts :: keyword()) :: changeset() + def registration_changeset(attrs, opts \\ []) do + %User{} + |> cast(attrs, [:email, :password, :locale]) |> validate_email() |> validate_password(opts) end @doc """ A user changeset for role. - """ - @spec role_changeset(t(), role :: atom()) :: Changeset.t(t()) + @spec role_changeset(t() | new_user() | changeset(), role()) :: changeset() def role_changeset(user, role) do user |> cast(%{"role" => role}, [:role]) end - @spec validate_email(Changeset.t(t() | new_user())) :: Changeset.t(t() | new_user()) + @spec validate_email(changeset()) :: changeset() defp validate_email(changeset) do changeset |> validate_required([:email]) @@ -96,8 +96,8 @@ defmodule Cannery.Accounts.User do |> unique_constraint(:email) end - @spec validate_password(Changeset.t(t() | new_user()), opts :: keyword()) :: - Changeset.t(t() | new_user()) + @spec validate_password(changeset(), opts :: keyword()) :: + changeset() defp validate_password(changeset, opts) do changeset |> validate_required([:password]) @@ -108,8 +108,7 @@ defmodule Cannery.Accounts.User do |> maybe_hash_password(opts) end - @spec maybe_hash_password(Changeset.t(t() | new_user()), opts :: keyword()) :: - Changeset.t(t() | new_user()) + @spec maybe_hash_password(changeset(), opts :: keyword()) :: changeset() defp maybe_hash_password(changeset, opts) do hash_password? = Keyword.get(opts, :hash_password, true) password = get_change(changeset, :password) @@ -128,7 +127,7 @@ defmodule Cannery.Accounts.User do It requires the email to change otherwise an error is added. """ - @spec email_changeset(t(), attrs :: map()) :: Changeset.t(t()) + @spec email_changeset(t(), attrs :: map()) :: changeset() def email_changeset(user, attrs) do user |> cast(attrs, [:email]) @@ -151,8 +150,8 @@ defmodule Cannery.Accounts.User do validations on a LiveView form), this option can be set to `false`. Defaults to `true`. """ - @spec password_changeset(t(), attrs :: map()) :: Changeset.t(t()) - @spec password_changeset(t(), attrs :: map(), opts :: keyword()) :: Changeset.t(t()) + @spec password_changeset(t(), attrs :: map()) :: changeset() + @spec password_changeset(t(), attrs :: map(), opts :: keyword()) :: changeset() def password_changeset(user, attrs, opts \\ []) do user |> cast(attrs, [:password]) @@ -163,7 +162,7 @@ defmodule Cannery.Accounts.User do @doc """ Confirms the account by setting `confirmed_at`. """ - @spec confirm_changeset(t() | Changeset.t(t())) :: Changeset.t(t()) + @spec confirm_changeset(t() | changeset()) :: changeset() def confirm_changeset(user_or_changeset) do now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) user_or_changeset |> change(confirmed_at: now) @@ -189,7 +188,7 @@ defmodule Cannery.Accounts.User do @doc """ Validates the current password otherwise adds an error to the changeset. """ - @spec validate_current_password(Changeset.t(t()), String.t()) :: Changeset.t(t()) + @spec validate_current_password(changeset(), String.t()) :: changeset() def validate_current_password(changeset, password) do if valid_password?(changeset.data, password), do: changeset, @@ -199,7 +198,7 @@ defmodule Cannery.Accounts.User do @doc """ A changeset for changing the user's locale """ - @spec locale_changeset(t() | Changeset.t(t()), locale :: String.t() | nil) :: Changeset.t(t()) + @spec locale_changeset(t() | changeset(), locale :: String.t() | nil) :: changeset() def locale_changeset(user_or_changeset, locale) do user_or_changeset |> cast(%{"locale" => locale}, [:locale]) diff --git a/lib/cannery/activity_log.ex b/lib/cannery/activity_log.ex index 911ee670..272df314 100644 --- a/lib/cannery/activity_log.ex +++ b/lib/cannery/activity_log.ex @@ -5,7 +5,7 @@ defmodule Cannery.ActivityLog do import Ecto.Query, warn: false alias Cannery.{Accounts.User, ActivityLog.ShotGroup, Ammo.AmmoGroup, Repo} - alias Ecto.{Changeset, Multi} + alias Ecto.Multi @doc """ Returns the list of shot_groups. @@ -58,7 +58,7 @@ defmodule Cannery.ActivityLog do """ @spec create_shot_group(attrs :: map(), User.t(), AmmoGroup.t()) :: - {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil} + {:ok, ShotGroup.t()} | {:error, ShotGroup.changeset() | nil} def create_shot_group(attrs, user, ammo_group) do Multi.new() |> Multi.insert( @@ -99,7 +99,7 @@ defmodule Cannery.ActivityLog do """ @spec update_shot_group(ShotGroup.t(), attrs :: map(), User.t()) :: - {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t()) | nil} + {:ok, ShotGroup.t()} | {:error, ShotGroup.changeset() | nil} def update_shot_group( %ShotGroup{count: count, user_id: user_id} = shot_group, attrs, @@ -149,7 +149,7 @@ defmodule Cannery.ActivityLog do """ @spec delete_shot_group(ShotGroup.t(), User.t()) :: - {:ok, ShotGroup.t()} | {:error, Changeset.t(ShotGroup.t())} + {:ok, ShotGroup.t()} | {:error, ShotGroup.changeset()} def delete_shot_group( %ShotGroup{user_id: user_id} = shot_group, %User{id: user_id} diff --git a/lib/cannery/activity_log/shot_group.ex b/lib/cannery/activity_log/shot_group.ex index c3221d12..c0efb709 100644 --- a/lib/cannery/activity_log/shot_group.ex +++ b/lib/cannery/activity_log/shot_group.ex @@ -44,6 +44,7 @@ defmodule Cannery.ActivityLog.ShotGroup do } @type new_shot_group :: %ShotGroup{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_shot_group()) @doc false @spec create_changeset( @@ -51,8 +52,7 @@ defmodule Cannery.ActivityLog.ShotGroup do User.t() | any(), AmmoGroup.t() | any(), attrs :: map() - ) :: - Changeset.t(new_shot_group()) + ) :: changeset() def create_changeset( shot_group, %User{id: user_id}, @@ -87,8 +87,7 @@ defmodule Cannery.ActivityLog.ShotGroup do end @doc false - @spec update_changeset(t() | new_shot_group(), User.t(), attrs :: map()) :: - Changeset.t(t() | new_shot_group()) + @spec update_changeset(t() | new_shot_group(), User.t(), attrs :: map()) :: changeset() def update_changeset( %ShotGroup{user_id: user_id} = shot_group, %User{id: user_id} = user, diff --git a/lib/cannery/ammo.ex b/lib/cannery/ammo.ex index 02b9a55c..5c0a8902 100644 --- a/lib/cannery/ammo.ex +++ b/lib/cannery/ammo.ex @@ -182,7 +182,7 @@ defmodule Cannery.Ammo do """ @spec create_ammo_type(attrs :: map(), User.t()) :: - {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.new_ammo_type())} + {:ok, AmmoType.t()} | {:error, AmmoType.changeset()} def create_ammo_type(attrs \\ %{}, %User{} = user), do: %AmmoType{} |> AmmoType.create_changeset(user, attrs) |> Repo.insert() @@ -199,7 +199,7 @@ defmodule Cannery.Ammo do """ @spec update_ammo_type(AmmoType.t(), attrs :: map(), User.t()) :: - {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.t())} + {:ok, AmmoType.t()} | {:error, AmmoType.changeset()} def update_ammo_type(%AmmoType{user_id: user_id} = ammo_type, attrs, %User{id: user_id}), do: ammo_type |> AmmoType.update_changeset(attrs) |> Repo.update() @@ -216,7 +216,7 @@ defmodule Cannery.Ammo do """ @spec delete_ammo_type(AmmoType.t(), User.t()) :: - {:ok, AmmoType.t()} | {:error, Changeset.t(AmmoType.t())} + {:ok, AmmoType.t()} | {:error, AmmoType.changeset()} def delete_ammo_type(%AmmoType{user_id: user_id} = ammo_type, %User{id: user_id}), do: ammo_type |> Repo.delete() @@ -549,7 +549,7 @@ defmodule Cannery.Ammo do """ @spec create_ammo_groups(attrs :: map(), multiplier :: non_neg_integer(), User.t()) :: {:ok, {count :: non_neg_integer(), [AmmoGroup.t()] | nil}} - | {:error, Changeset.t(AmmoGroup.new_ammo_group())} + | {:error, AmmoGroup.changeset()} def create_ammo_groups( %{"ammo_type_id" => ammo_type_id, "container_id" => container_id} = attrs, multiplier, @@ -628,7 +628,7 @@ defmodule Cannery.Ammo do """ @spec update_ammo_group(AmmoGroup.t(), attrs :: map(), User.t()) :: - {:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())} + {:ok, AmmoGroup.t()} | {:error, AmmoGroup.changeset()} def update_ammo_group( %AmmoGroup{user_id: user_id} = ammo_group, attrs, @@ -649,7 +649,7 @@ defmodule Cannery.Ammo do """ @spec delete_ammo_group(AmmoGroup.t(), User.t()) :: - {:ok, AmmoGroup.t()} | {:error, Changeset.t(AmmoGroup.t())} + {:ok, AmmoGroup.t()} | {:error, AmmoGroup.changeset()} def delete_ammo_group(%AmmoGroup{user_id: user_id} = ammo_group, %User{id: user_id}), do: ammo_group |> Repo.delete() diff --git a/lib/cannery/ammo/ammo_group.ex b/lib/cannery/ammo/ammo_group.ex index 58ca747d..f5c7f5c5 100644 --- a/lib/cannery/ammo/ammo_group.ex +++ b/lib/cannery/ammo/ammo_group.ex @@ -59,6 +59,7 @@ defmodule Cannery.Ammo.AmmoGroup do } @type new_ammo_group :: %AmmoGroup{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_ammo_group()) @doc false @spec create_changeset( @@ -67,7 +68,7 @@ defmodule Cannery.Ammo.AmmoGroup do Container.t() | nil, User.t(), attrs :: map() - ) :: Changeset.t(new_ammo_group()) + ) :: changeset() def create_changeset( ammo_group, %AmmoType{id: ammo_type_id}, @@ -97,8 +98,7 @@ defmodule Cannery.Ammo.AmmoGroup do end @doc false - @spec update_changeset(t() | new_ammo_group(), attrs :: map(), User.t()) :: - Changeset.t(t() | new_ammo_group()) + @spec update_changeset(t() | new_ammo_group(), attrs :: map(), User.t()) :: changeset() def update_changeset(ammo_group, attrs, user) do ammo_group |> cast(attrs, [:count, :price_paid, :notes, :staged, :purchased_on, :container_id]) @@ -121,8 +121,7 @@ defmodule Cannery.Ammo.AmmoGroup do This range changeset is used when "using up" ammo groups, and allows for updating the count to 0 """ - @spec range_changeset(t() | new_ammo_group(), attrs :: map()) :: - Changeset.t(t() | new_ammo_group()) + @spec range_changeset(t() | new_ammo_group(), attrs :: map()) :: changeset() def range_changeset(ammo_group, attrs) do ammo_group |> cast(attrs, [:count, :staged]) diff --git a/lib/cannery/ammo/ammo_type.ex b/lib/cannery/ammo/ammo_type.ex index b9f91a9a..9a2d7d16 100644 --- a/lib/cannery/ammo/ammo_type.ex +++ b/lib/cannery/ammo/ammo_type.ex @@ -102,6 +102,7 @@ defmodule Cannery.Ammo.AmmoType do } @type new_ammo_type :: %AmmoType{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_ammo_type()) @spec changeset_fields() :: [atom()] defp changeset_fields, @@ -130,8 +131,7 @@ defmodule Cannery.Ammo.AmmoType do ] @doc false - @spec create_changeset(new_ammo_type(), User.t(), attrs :: map()) :: - Changeset.t(new_ammo_type()) + @spec create_changeset(new_ammo_type(), User.t(), attrs :: map()) :: changeset() def create_changeset(ammo_type, %User{id: user_id}, attrs) do ammo_type |> change(user_id: user_id) @@ -140,8 +140,7 @@ defmodule Cannery.Ammo.AmmoType do end @doc false - @spec update_changeset(t() | new_ammo_type(), attrs :: map()) :: - Changeset.t(t() | new_ammo_type()) + @spec update_changeset(t() | new_ammo_type(), attrs :: map()) :: changeset() def update_changeset(ammo_type, attrs) do ammo_type |> cast(attrs, changeset_fields()) diff --git a/lib/cannery/containers.ex b/lib/cannery/containers.ex index cc647f12..0fed5d4b 100644 --- a/lib/cannery/containers.ex +++ b/lib/cannery/containers.ex @@ -89,7 +89,7 @@ defmodule Cannery.Containers do """ @spec create_container(attrs :: map(), User.t()) :: - {:ok, Container.t()} | {:error, Changeset.t(Container.new_container())} + {:ok, Container.t()} | {:error, Container.changeset()} def create_container(attrs, %User{} = user) do %Container{} |> Container.create_changeset(user, attrs) |> Repo.insert() end @@ -107,7 +107,7 @@ defmodule Cannery.Containers do """ @spec update_container(Container.t(), User.t(), attrs :: map()) :: - {:ok, Container.t()} | {:error, Changeset.t(Container.t())} + {:ok, Container.t()} | {:error, Container.changeset()} def update_container(%Container{user_id: user_id} = container, %User{id: user_id}, attrs) do container |> Container.update_changeset(attrs) |> Repo.update() end @@ -125,7 +125,7 @@ defmodule Cannery.Containers do """ @spec delete_container(Container.t(), User.t()) :: - {:ok, Container.t()} | {:error, Changeset.t(Container.t())} + {:ok, Container.t()} | {:error, Container.changeset()} def delete_container(%Container{user_id: user_id} = container, %User{id: user_id}) do Repo.one( from ag in AmmoGroup, diff --git a/lib/cannery/containers/container.ex b/lib/cannery/containers/container.ex index c4ea2360..cdf8b67f 100644 --- a/lib/cannery/containers/container.ex +++ b/lib/cannery/containers/container.ex @@ -49,10 +49,10 @@ defmodule Cannery.Containers.Container do } @type new_container :: %Container{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_container()) @doc false - @spec create_changeset(new_container(), User.t(), attrs :: map()) :: - Changeset.t(new_container()) + @spec create_changeset(new_container(), User.t(), attrs :: map()) :: changeset() def create_changeset(container, %User{id: user_id}, attrs) do container |> change(user_id: user_id) @@ -61,8 +61,7 @@ defmodule Cannery.Containers.Container do end @doc false - @spec update_changeset(t() | new_container(), attrs :: map()) :: - Changeset.t(t() | new_container()) + @spec update_changeset(t() | new_container(), attrs :: map()) :: changeset() def update_changeset(container, attrs) do container |> cast(attrs, [:name, :desc, :type, :location]) diff --git a/lib/cannery/containers/container_tag.ex b/lib/cannery/containers/container_tag.ex index cbefaa66..4711fc8f 100644 --- a/lib/cannery/containers/container_tag.ex +++ b/lib/cannery/containers/container_tag.ex @@ -29,10 +29,10 @@ defmodule Cannery.Containers.ContainerTag do } @type new_container_tag :: %ContainerTag{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_container_tag()) @doc false - @spec create_changeset(new_container_tag(), Tag.t(), Container.t()) :: - Changeset.t(new_container_tag()) + @spec create_changeset(new_container_tag(), Tag.t(), Container.t()) :: changeset() def create_changeset( container_tag, %Tag{id: tag_id, user_id: user_id}, diff --git a/lib/cannery/invites.ex b/lib/cannery/invites.ex index e767408e..97090a90 100644 --- a/lib/cannery/invites.ex +++ b/lib/cannery/invites.ex @@ -5,7 +5,6 @@ defmodule Cannery.Invites do import Ecto.Query, warn: false alias Cannery.{Accounts.User, Invites.Invite, Repo} - alias Ecto.Changeset @invite_token_length 20 @@ -99,14 +98,14 @@ defmodule Cannery.Invites do """ @spec create_invite(User.t(), attrs :: map()) :: - {:ok, Invite.t()} | {:error, Changeset.t(Invite.new_invite())} + {:ok, Invite.t()} | {:error, Invite.changeset()} def create_invite(%User{role: :admin} = user, attrs) do token = :crypto.strong_rand_bytes(@invite_token_length) |> Base.url_encode64() |> binary_part(0, @invite_token_length) - %Invite{} |> Invite.create_changeset(user, token, attrs) |> Repo.insert() + Invite.create_changeset(user, token, attrs) |> Repo.insert() end @doc """ @@ -122,7 +121,7 @@ defmodule Cannery.Invites do """ @spec update_invite(Invite.t(), attrs :: map(), User.t()) :: - {:ok, Invite.t()} | {:error, Changeset.t(Invite.t())} + {:ok, Invite.t()} | {:error, Invite.changeset()} def update_invite(invite, attrs, %User{role: :admin}), do: invite |> Invite.update_changeset(attrs) |> Repo.update() @@ -139,7 +138,7 @@ defmodule Cannery.Invites do """ @spec delete_invite(Invite.t(), User.t()) :: - {:ok, Invite.t()} | {:error, Changeset.t(Invite.t())} + {:ok, Invite.t()} | {:error, Invite.changeset()} def delete_invite(invite, %User{role: :admin}), do: invite |> Repo.delete() @doc """ diff --git a/lib/cannery/invites/invite.ex b/lib/cannery/invites/invite.ex index d7aba153..30060ddc 100644 --- a/lib/cannery/invites/invite.ex +++ b/lib/cannery/invites/invite.ex @@ -36,12 +36,12 @@ defmodule Cannery.Invites.Invite do } @type new_invite :: %Invite{} @type id :: UUID.t() + @type changeset :: Changeset.t(t() | new_invite()) @doc false - @spec create_changeset(new_invite(), User.t(), token :: binary(), attrs :: map()) :: - Changeset.t(new_invite()) - def create_changeset(invite, %User{id: user_id}, token, attrs) do - invite + @spec create_changeset(User.t(), token :: binary(), attrs :: map()) :: changeset() + def create_changeset(%User{id: user_id}, token, attrs) do + %Invite{} |> change(token: token, user_id: user_id) |> cast(attrs, [:name, :uses_left, :disabled_at]) |> validate_required([:name, :token, :user_id]) @@ -49,7 +49,7 @@ defmodule Cannery.Invites.Invite do end @doc false - @spec update_changeset(t() | new_invite(), attrs :: map()) :: Changeset.t(t() | new_invite()) + @spec update_changeset(t() | new_invite(), attrs :: map()) :: changeset() def update_changeset(invite, attrs) do invite |> cast(attrs, [:name, :uses_left, :disabled_at]) diff --git a/lib/cannery/tags.ex b/lib/cannery/tags.ex index 03b9da60..6a00c4fa 100644 --- a/lib/cannery/tags.ex +++ b/lib/cannery/tags.ex @@ -6,7 +6,6 @@ defmodule Cannery.Tags do import Ecto.Query, warn: false import CanneryWeb.Gettext alias Cannery.{Accounts.User, Repo, Tags.Tag} - alias Ecto.Changeset @doc """ Returns the list of tags. @@ -73,7 +72,7 @@ defmodule Cannery.Tags do """ @spec create_tag(attrs :: map(), User.t()) :: - {:ok, Tag.t()} | {:error, Changeset.t(Tag.new_tag())} + {:ok, Tag.t()} | {:error, Tag.changeset()} def create_tag(attrs, %User{} = user), do: %Tag{} |> Tag.create_changeset(user, attrs) |> Repo.insert() @@ -90,7 +89,7 @@ defmodule Cannery.Tags do """ @spec update_tag(Tag.t(), attrs :: map(), User.t()) :: - {:ok, Tag.t()} | {:error, Changeset.t(Tag.t())} + {:ok, Tag.t()} | {:error, Tag.changeset()} def update_tag(%Tag{user_id: user_id} = tag, attrs, %User{id: user_id}), do: tag |> Tag.update_changeset(attrs) |> Repo.update() @@ -106,7 +105,7 @@ defmodule Cannery.Tags do {:error, %Changeset{}} """ - @spec delete_tag(Tag.t(), User.t()) :: {:ok, Tag.t()} | {:error, Changeset.t(Tag.t())} + @spec delete_tag(Tag.t(), User.t()) :: {:ok, Tag.t()} | {:error, Tag.changeset()} def delete_tag(%Tag{user_id: user_id} = tag, %User{id: user_id}), do: tag |> Repo.delete() @doc """ diff --git a/lib/cannery/tags/tag.ex b/lib/cannery/tags/tag.ex index 0fce3114..1dc4dc01 100644 --- a/lib/cannery/tags/tag.ex +++ b/lib/cannery/tags/tag.ex @@ -40,9 +40,10 @@ defmodule Cannery.Tags.Tag do } @type new_tag() :: %Tag{} @type id() :: UUID.t() + @type changeset() :: Changeset.t(t() | new_tag()) @doc false - @spec create_changeset(new_tag(), User.t(), attrs :: map()) :: Changeset.t(new_tag()) + @spec create_changeset(new_tag(), User.t(), attrs :: map()) :: changeset() def create_changeset(tag, %User{id: user_id}, attrs) do tag |> change(user_id: user_id) @@ -51,7 +52,7 @@ defmodule Cannery.Tags.Tag do end @doc false - @spec update_changeset(t() | new_tag(), attrs :: map()) :: Changeset.t(t() | new_tag()) + @spec update_changeset(t() | new_tag(), attrs :: map()) :: changeset() def update_changeset(tag, attrs) do tag |> cast(attrs, [:name, :bg_color, :text_color]) diff --git a/lib/cannery_web/controllers/user_registration_controller.ex b/lib/cannery_web/controllers/user_registration_controller.ex index 614362e4..7f3bddc9 100644 --- a/lib/cannery_web/controllers/user_registration_controller.ex +++ b/lib/cannery_web/controllers/user_registration_controller.ex @@ -2,7 +2,6 @@ defmodule CanneryWeb.UserRegistrationController do use CanneryWeb, :controller import CanneryWeb.Gettext alias Cannery.{Accounts, Invites} - alias Cannery.Accounts.User alias CanneryWeb.{Endpoint, HomeLive} def new(conn, %{"invite" => invite_token}) do @@ -30,7 +29,7 @@ defmodule CanneryWeb.UserRegistrationController do # renders new user registration page defp render_new(conn, invite \\ nil) do render(conn, "new.html", - changeset: Accounts.change_user_registration(%User{}), + changeset: Accounts.change_user_registration(), invite: invite, page_title: gettext("Register") ) diff --git a/lib/cannery_web/live/invite_live/form_component.ex b/lib/cannery_web/live/invite_live/form_component.ex index f79d549c..38b1bbd6 100644 --- a/lib/cannery_web/live/invite_live/form_component.ex +++ b/lib/cannery_web/live/invite_live/form_component.ex @@ -38,7 +38,7 @@ defmodule CanneryWeb.InviteLive.FormComponent do changeset = case action do - :new -> invite |> Invite.create_changeset(user, "example_token", invite_params) + :new -> Invite.create_changeset(user, "example_token", invite_params) :edit -> invite |> Invite.update_changeset(invite_params) end diff --git a/mix.exs b/mix.exs index a3c5ff0c..c97eaa1f 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Cannery.MixProject do def project do [ app: :cannery, - version: "0.7.1", + version: "0.7.2", elixir: "1.14.1", elixirc_paths: elixirc_paths(Mix.env()), compilers: Mix.compilers(), diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 7667fceb..a3c5338f 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -711,7 +711,7 @@ msgstr "Passwort vergessen?" msgid "Log in" msgstr "Einloggen" -#: lib/cannery_web/controllers/user_registration_controller.ex:35 +#: lib/cannery_web/controllers/user_registration_controller.ex:34 #, elixir-autogen, elixir-format msgid "Register" msgstr "Registrieren" diff --git a/priv/gettext/de/LC_MESSAGES/errors.po b/priv/gettext/de/LC_MESSAGES/errors.po index e5745078..14de2d09 100644 --- a/priv/gettext/de/LC_MESSAGES/errors.po +++ b/priv/gettext/de/LC_MESSAGES/errors.po @@ -83,14 +83,14 @@ msgstr "Oops, etwas ist schiefgegangen. Bitte beachten Sie den Fehler unten." msgid "Reset password link is invalid or it has expired." msgstr "Link zum Passwort zurücksetzen ist ungültig oder abgelaufen." -#: lib/cannery_web/controllers/user_registration_controller.ex:25 -#: lib/cannery_web/controllers/user_registration_controller.ex:56 +#: lib/cannery_web/controllers/user_registration_controller.ex:24 +#: lib/cannery_web/controllers/user_registration_controller.ex:55 #, elixir-autogen, elixir-format msgid "Sorry, public registration is disabled" msgstr "Entschuldigung, aber öffentliche Registrierung ist deaktiviert" -#: lib/cannery_web/controllers/user_registration_controller.ex:15 -#: lib/cannery_web/controllers/user_registration_controller.ex:46 +#: lib/cannery_web/controllers/user_registration_controller.ex:14 +#: lib/cannery_web/controllers/user_registration_controller.ex:45 #, elixir-autogen, elixir-format msgid "Sorry, this invite was not found or expired" msgstr "" @@ -121,17 +121,17 @@ msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen" msgid "You are not authorized to view this page." msgstr "Sie sind nicht berechtigt, diese Seite aufzurufen." -#: lib/cannery/accounts/user.ex:138 +#: lib/cannery/accounts/user.ex:137 #, elixir-autogen, elixir-format msgid "did not change" msgstr "hat sich nicht geändert" -#: lib/cannery/accounts/user.ex:159 +#: lib/cannery/accounts/user.ex:158 #, elixir-autogen, elixir-format msgid "does not match password" msgstr "Passwort stimmt nicht überein" -#: lib/cannery/accounts/user.ex:196 +#: lib/cannery/accounts/user.ex:195 #, elixir-autogen, elixir-format msgid "is not valid" msgstr "ist nicht gültig" @@ -141,7 +141,7 @@ msgstr "ist nicht gültig" msgid "must have the @ sign and no spaces" msgstr "Muss ein @ Zeichen und keine Leerzeichen haben" -#: lib/cannery/tags.ex:40 +#: lib/cannery/tags.ex:39 #, elixir-autogen, elixir-format msgid "Tag not found" msgstr "Tag nicht gefunden" @@ -151,13 +151,13 @@ msgstr "Tag nicht gefunden" msgid "Tag could not be added" msgstr "Tag konnte nicht hinzugefügt werden" -#: lib/cannery/activity_log/shot_group.ex:123 +#: lib/cannery/activity_log/shot_group.ex:122 #, elixir-autogen, elixir-format msgid "Count must be at least 1" msgstr "Anzahl muss mindestens 1 sein" #: lib/cannery/activity_log/shot_group.ex:82 -#: lib/cannery/activity_log/shot_group.ex:119 +#: lib/cannery/activity_log/shot_group.ex:118 #, elixir-autogen, elixir-format msgid "Count must be less than %{count}" msgstr "Anzahl muss weniger als %{count} betragen" @@ -192,7 +192,7 @@ msgstr "" msgid "Invalid multiplier" msgstr "" -#: lib/cannery/ammo/ammo_group.ex:96 +#: lib/cannery/ammo/ammo_group.ex:97 #, elixir-autogen, elixir-format msgid "Please select an ammo type and container" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/prompts.po b/priv/gettext/de/LC_MESSAGES/prompts.po index 47af8cdb..30d78977 100644 --- a/priv/gettext/de/LC_MESSAGES/prompts.po +++ b/priv/gettext/de/LC_MESSAGES/prompts.po @@ -150,7 +150,7 @@ msgstr "Passwort erfolgreich zurückgesetzt." msgid "Password updated successfully." msgstr "Passwort erfolgreich geändert." -#: lib/cannery_web/controllers/user_registration_controller.ex:74 +#: lib/cannery_web/controllers/user_registration_controller.ex:73 #, elixir-autogen, elixir-format msgid "Please check your email to verify your account" msgstr "Bitte überprüfen Sie ihre Mailbox und bestätigen Sie das Nutzerkonto" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 865c1496..3a701ea6 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -694,7 +694,7 @@ msgstr "" msgid "Log in" msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:35 +#: lib/cannery_web/controllers/user_registration_controller.ex:34 #, elixir-autogen, elixir-format msgid "Register" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index e20a0709..54a99521 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -695,7 +695,7 @@ msgstr "" msgid "Log in" msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:35 +#: lib/cannery_web/controllers/user_registration_controller.ex:34 #, elixir-autogen, elixir-format msgid "Register" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/errors.po b/priv/gettext/en/LC_MESSAGES/errors.po index da1c4ec7..b3e99514 100644 --- a/priv/gettext/en/LC_MESSAGES/errors.po +++ b/priv/gettext/en/LC_MESSAGES/errors.po @@ -70,14 +70,14 @@ msgstr "" msgid "Reset password link is invalid or it has expired." msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:25 -#: lib/cannery_web/controllers/user_registration_controller.ex:56 +#: lib/cannery_web/controllers/user_registration_controller.ex:24 +#: lib/cannery_web/controllers/user_registration_controller.ex:55 #, elixir-autogen, elixir-format msgid "Sorry, public registration is disabled" msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:15 -#: lib/cannery_web/controllers/user_registration_controller.ex:46 +#: lib/cannery_web/controllers/user_registration_controller.ex:14 +#: lib/cannery_web/controllers/user_registration_controller.ex:45 #, elixir-autogen, elixir-format msgid "Sorry, this invite was not found or expired" msgstr "" @@ -107,18 +107,18 @@ msgstr "" msgid "You are not authorized to view this page." msgstr "" -#: lib/cannery/accounts/user.ex:138 +#: lib/cannery/accounts/user.ex:137 #, elixir-autogen, elixir-format msgid "did not change" msgstr "" -#: lib/cannery/accounts/user.ex:159 +#: lib/cannery/accounts/user.ex:158 #, elixir-autogen, elixir-format msgid "does not match password" msgstr "" ## From Ecto.Changeset.put_change/3 -#: lib/cannery/accounts/user.ex:196 +#: lib/cannery/accounts/user.ex:195 #, elixir-autogen, elixir-format, fuzzy msgid "is not valid" msgstr "" @@ -128,7 +128,7 @@ msgstr "" msgid "must have the @ sign and no spaces" msgstr "" -#: lib/cannery/tags.ex:40 +#: lib/cannery/tags.ex:39 #, elixir-autogen, elixir-format msgid "Tag not found" msgstr "" @@ -138,13 +138,13 @@ msgstr "" msgid "Tag could not be added" msgstr "" -#: lib/cannery/activity_log/shot_group.ex:123 +#: lib/cannery/activity_log/shot_group.ex:122 #, elixir-autogen, elixir-format msgid "Count must be at least 1" msgstr "" #: lib/cannery/activity_log/shot_group.ex:82 -#: lib/cannery/activity_log/shot_group.ex:119 +#: lib/cannery/activity_log/shot_group.ex:118 #, elixir-autogen, elixir-format msgid "Count must be less than %{count}" msgstr "" @@ -175,7 +175,7 @@ msgstr "" msgid "Invalid multiplier" msgstr "" -#: lib/cannery/ammo/ammo_group.ex:96 +#: lib/cannery/ammo/ammo_group.ex:97 #, elixir-autogen, elixir-format msgid "Please select an ammo type and container" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/prompts.po b/priv/gettext/en/LC_MESSAGES/prompts.po index 792a9e49..30f94bc9 100644 --- a/priv/gettext/en/LC_MESSAGES/prompts.po +++ b/priv/gettext/en/LC_MESSAGES/prompts.po @@ -132,7 +132,7 @@ msgstr "" msgid "Password updated successfully." msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:74 +#: lib/cannery_web/controllers/user_registration_controller.ex:73 #, elixir-autogen, elixir-format msgid "Please check your email to verify your account" msgstr "" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 892f6bbc..ead0a662 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -70,14 +70,14 @@ msgstr "" msgid "Reset password link is invalid or it has expired." msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:25 -#: lib/cannery_web/controllers/user_registration_controller.ex:56 +#: lib/cannery_web/controllers/user_registration_controller.ex:24 +#: lib/cannery_web/controllers/user_registration_controller.ex:55 #, elixir-autogen, elixir-format msgid "Sorry, public registration is disabled" msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:15 -#: lib/cannery_web/controllers/user_registration_controller.ex:46 +#: lib/cannery_web/controllers/user_registration_controller.ex:14 +#: lib/cannery_web/controllers/user_registration_controller.ex:45 #, elixir-autogen, elixir-format msgid "Sorry, this invite was not found or expired" msgstr "" @@ -107,17 +107,17 @@ msgstr "" msgid "You are not authorized to view this page." msgstr "" -#: lib/cannery/accounts/user.ex:138 +#: lib/cannery/accounts/user.ex:137 #, elixir-autogen, elixir-format msgid "did not change" msgstr "" -#: lib/cannery/accounts/user.ex:159 +#: lib/cannery/accounts/user.ex:158 #, elixir-autogen, elixir-format msgid "does not match password" msgstr "" -#: lib/cannery/accounts/user.ex:196 +#: lib/cannery/accounts/user.ex:195 #, elixir-autogen, elixir-format msgid "is not valid" msgstr "" @@ -127,7 +127,7 @@ msgstr "" msgid "must have the @ sign and no spaces" msgstr "" -#: lib/cannery/tags.ex:40 +#: lib/cannery/tags.ex:39 #, elixir-autogen, elixir-format msgid "Tag not found" msgstr "" @@ -137,13 +137,13 @@ msgstr "" msgid "Tag could not be added" msgstr "" -#: lib/cannery/activity_log/shot_group.ex:123 +#: lib/cannery/activity_log/shot_group.ex:122 #, elixir-autogen, elixir-format msgid "Count must be at least 1" msgstr "" #: lib/cannery/activity_log/shot_group.ex:82 -#: lib/cannery/activity_log/shot_group.ex:119 +#: lib/cannery/activity_log/shot_group.ex:118 #, elixir-autogen, elixir-format msgid "Count must be less than %{count}" msgstr "" @@ -174,7 +174,7 @@ msgstr "" msgid "Invalid multiplier" msgstr "" -#: lib/cannery/ammo/ammo_group.ex:96 +#: lib/cannery/ammo/ammo_group.ex:97 #, elixir-autogen, elixir-format msgid "Please select an ammo type and container" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index 432d5070..6709068e 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -709,7 +709,7 @@ msgstr "" msgid "Log in" msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:35 +#: lib/cannery_web/controllers/user_registration_controller.ex:34 #, elixir-autogen, elixir-format msgid "Register" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/errors.po b/priv/gettext/es/LC_MESSAGES/errors.po index 1a9c367f..2f545d8f 100644 --- a/priv/gettext/es/LC_MESSAGES/errors.po +++ b/priv/gettext/es/LC_MESSAGES/errors.po @@ -86,14 +86,14 @@ msgid "Reset password link is invalid or it has expired." msgstr "" "El enlace de reestablecimiento de la contraseña es inválido o ha caducado." -#: lib/cannery_web/controllers/user_registration_controller.ex:25 -#: lib/cannery_web/controllers/user_registration_controller.ex:56 +#: lib/cannery_web/controllers/user_registration_controller.ex:24 +#: lib/cannery_web/controllers/user_registration_controller.ex:55 #, elixir-autogen, elixir-format msgid "Sorry, public registration is disabled" msgstr "Lo sentimos, la inscripción pública está desactivada" -#: lib/cannery_web/controllers/user_registration_controller.ex:15 -#: lib/cannery_web/controllers/user_registration_controller.ex:46 +#: lib/cannery_web/controllers/user_registration_controller.ex:14 +#: lib/cannery_web/controllers/user_registration_controller.ex:45 #, elixir-autogen, elixir-format msgid "Sorry, this invite was not found or expired" msgstr "Lo sentimos, esta invitación no fue encontrada o ha expirado" @@ -123,17 +123,17 @@ msgstr "No está autorizado a ver esta página" msgid "You are not authorized to view this page." msgstr "No está autorizado a ver esta página." -#: lib/cannery/accounts/user.ex:138 +#: lib/cannery/accounts/user.ex:137 #, elixir-autogen, elixir-format msgid "did not change" msgstr "no cambió" -#: lib/cannery/accounts/user.ex:159 +#: lib/cannery/accounts/user.ex:158 #, elixir-autogen, elixir-format msgid "does not match password" msgstr "no coincide con la contraseña" -#: lib/cannery/accounts/user.ex:196 +#: lib/cannery/accounts/user.ex:195 #, elixir-autogen, elixir-format msgid "is not valid" msgstr "no es válido" @@ -143,7 +143,7 @@ msgstr "no es válido" msgid "must have the @ sign and no spaces" msgstr "debe tener el signo @ y no contener espacios" -#: lib/cannery/tags.ex:40 +#: lib/cannery/tags.ex:39 #, elixir-autogen, elixir-format msgid "Tag not found" msgstr "Etiqueta no encontrada" @@ -153,13 +153,13 @@ msgstr "Etiqueta no encontrada" msgid "Tag could not be added" msgstr "La etiqueta no pudo ser añadida" -#: lib/cannery/activity_log/shot_group.ex:123 +#: lib/cannery/activity_log/shot_group.ex:122 #, elixir-autogen, elixir-format msgid "Count must be at least 1" msgstr "El recuento debe dar al menos 1" #: lib/cannery/activity_log/shot_group.ex:82 -#: lib/cannery/activity_log/shot_group.ex:119 +#: lib/cannery/activity_log/shot_group.ex:118 #, elixir-autogen, elixir-format msgid "Count must be less than %{count}" msgstr "El recuento debe ser menos de %{count}" @@ -190,7 +190,7 @@ msgstr "Número inválido de copias, debe ser entre 1 y %{max}. Fue %{multiplier msgid "Invalid multiplier" msgstr "Multiplicador inválido" -#: lib/cannery/ammo/ammo_group.ex:96 +#: lib/cannery/ammo/ammo_group.ex:97 #, elixir-autogen, elixir-format msgid "Please select an ammo type and container" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/prompts.po b/priv/gettext/es/LC_MESSAGES/prompts.po index 0068f052..3f885213 100644 --- a/priv/gettext/es/LC_MESSAGES/prompts.po +++ b/priv/gettext/es/LC_MESSAGES/prompts.po @@ -150,7 +150,7 @@ msgstr "Contraseña reiniciada exitosamente." msgid "Password updated successfully." msgstr "Contraseña cambiada exitosamente." -#: lib/cannery_web/controllers/user_registration_controller.ex:74 +#: lib/cannery_web/controllers/user_registration_controller.ex:73 #, elixir-autogen, elixir-format msgid "Please check your email to verify your account" msgstr "Por favor chequea el correo para verificar tu cuenta" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 26441e78..4fa26960 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -713,7 +713,7 @@ msgstr "Mot de passe oublié ?" msgid "Log in" msgstr "Se connecter" -#: lib/cannery_web/controllers/user_registration_controller.ex:35 +#: lib/cannery_web/controllers/user_registration_controller.ex:34 #, elixir-autogen, elixir-format msgid "Register" msgstr "S’enregistrer" diff --git a/priv/gettext/fr/LC_MESSAGES/errors.po b/priv/gettext/fr/LC_MESSAGES/errors.po index 94b851a9..78c9297a 100644 --- a/priv/gettext/fr/LC_MESSAGES/errors.po +++ b/priv/gettext/fr/LC_MESSAGES/errors.po @@ -85,14 +85,14 @@ msgstr "" msgid "Reset password link is invalid or it has expired." msgstr "Le lien de réinitialisation de mot de passe est invalide ou expiré." -#: lib/cannery_web/controllers/user_registration_controller.ex:25 -#: lib/cannery_web/controllers/user_registration_controller.ex:56 +#: lib/cannery_web/controllers/user_registration_controller.ex:24 +#: lib/cannery_web/controllers/user_registration_controller.ex:55 #, elixir-autogen, elixir-format msgid "Sorry, public registration is disabled" msgstr "Désolé, l’enregistrement public est désactivé" -#: lib/cannery_web/controllers/user_registration_controller.ex:15 -#: lib/cannery_web/controllers/user_registration_controller.ex:46 +#: lib/cannery_web/controllers/user_registration_controller.ex:14 +#: lib/cannery_web/controllers/user_registration_controller.ex:45 #, elixir-autogen, elixir-format msgid "Sorry, this invite was not found or expired" msgstr "Désolé, cette invitation n’est pas trouvée ou est expirée" @@ -122,17 +122,17 @@ msgstr "Vous n’êtes pas autorisé·e à voir cette page" msgid "You are not authorized to view this page." msgstr "Vous n’êtes pas autorisé·e à voir cette page." -#: lib/cannery/accounts/user.ex:138 +#: lib/cannery/accounts/user.ex:137 #, elixir-autogen, elixir-format msgid "did not change" msgstr "est inchangé" -#: lib/cannery/accounts/user.ex:159 +#: lib/cannery/accounts/user.ex:158 #, elixir-autogen, elixir-format msgid "does not match password" msgstr "le mot de passe ne correspond pas" -#: lib/cannery/accounts/user.ex:196 +#: lib/cannery/accounts/user.ex:195 #, elixir-autogen, elixir-format msgid "is not valid" msgstr "n’est pas valide" @@ -142,7 +142,7 @@ msgstr "n’est pas valide" msgid "must have the @ sign and no spaces" msgstr "doit contenir le symbole @ et aucune espace" -#: lib/cannery/tags.ex:40 +#: lib/cannery/tags.ex:39 #, elixir-autogen, elixir-format msgid "Tag not found" msgstr "Tag pas trouvé" @@ -152,13 +152,13 @@ msgstr "Tag pas trouvé" msgid "Tag could not be added" msgstr "Le tag n’a pas pu être ajouté" -#: lib/cannery/activity_log/shot_group.ex:123 +#: lib/cannery/activity_log/shot_group.ex:122 #, elixir-autogen, elixir-format msgid "Count must be at least 1" msgstr "Le nombre doit être au moins égal à 1" #: lib/cannery/activity_log/shot_group.ex:82 -#: lib/cannery/activity_log/shot_group.ex:119 +#: lib/cannery/activity_log/shot_group.ex:118 #, elixir-autogen, elixir-format msgid "Count must be less than %{count}" msgstr "La quantité doit être inférieur à %{count}" @@ -191,7 +191,7 @@ msgstr "Nombre de copies invalide, doit être 1 et %{max}. Été %{multiplier}" msgid "Invalid multiplier" msgstr "Multiplicateur invalide" -#: lib/cannery/ammo/ammo_group.ex:96 +#: lib/cannery/ammo/ammo_group.ex:97 #, elixir-autogen, elixir-format msgid "Please select an ammo type and container" msgstr "Veuillez choisir un type de munitions et un conteneur" diff --git a/priv/gettext/fr/LC_MESSAGES/prompts.po b/priv/gettext/fr/LC_MESSAGES/prompts.po index 6934bd86..fa0c1c4c 100644 --- a/priv/gettext/fr/LC_MESSAGES/prompts.po +++ b/priv/gettext/fr/LC_MESSAGES/prompts.po @@ -151,7 +151,7 @@ msgstr "Mot de passe réinitialiser avec succès." msgid "Password updated successfully." msgstr "Mot de passe mis à jour avec succès." -#: lib/cannery_web/controllers/user_registration_controller.ex:74 +#: lib/cannery_web/controllers/user_registration_controller.ex:73 #, elixir-autogen, elixir-format msgid "Please check your email to verify your account" msgstr "Veuillez vérifier votre mél pour confirmer votre compte" diff --git a/priv/gettext/ga/LC_MESSAGES/default.po b/priv/gettext/ga/LC_MESSAGES/default.po index d2f28190..4c60a927 100644 --- a/priv/gettext/ga/LC_MESSAGES/default.po +++ b/priv/gettext/ga/LC_MESSAGES/default.po @@ -705,7 +705,7 @@ msgstr "" msgid "Log in" msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:35 +#: lib/cannery_web/controllers/user_registration_controller.ex:34 #, elixir-autogen, elixir-format msgid "Register" msgstr "" diff --git a/priv/gettext/ga/LC_MESSAGES/errors.po b/priv/gettext/ga/LC_MESSAGES/errors.po index 6cb6b2c8..59ffb0e6 100644 --- a/priv/gettext/ga/LC_MESSAGES/errors.po +++ b/priv/gettext/ga/LC_MESSAGES/errors.po @@ -86,14 +86,14 @@ msgstr "" msgid "Reset password link is invalid or it has expired." msgstr "Tá nasc an pasfhocail a athrú neamhbailí nó as dáta." -#: lib/cannery_web/controllers/user_registration_controller.ex:25 -#: lib/cannery_web/controllers/user_registration_controller.ex:56 +#: lib/cannery_web/controllers/user_registration_controller.ex:24 +#: lib/cannery_web/controllers/user_registration_controller.ex:55 #, elixir-autogen, elixir-format msgid "Sorry, public registration is disabled" msgstr "Tá brón orainn, tá clarú póiblí bactha" -#: lib/cannery_web/controllers/user_registration_controller.ex:15 -#: lib/cannery_web/controllers/user_registration_controller.ex:46 +#: lib/cannery_web/controllers/user_registration_controller.ex:14 +#: lib/cannery_web/controllers/user_registration_controller.ex:45 #, elixir-autogen, elixir-format msgid "Sorry, this invite was not found or expired" msgstr "Tá brón orainn, ní feidir an cuireadh seo a fáil nó tá sé as dáta" @@ -123,17 +123,17 @@ msgstr "Níl cead agaibh féachaint ar an leathanach seo" msgid "You are not authorized to view this page." msgstr "Níl cead agaibh féachaint ar an leathanach seo." -#: lib/cannery/accounts/user.ex:138 +#: lib/cannery/accounts/user.ex:137 #, elixir-autogen, elixir-format msgid "did not change" msgstr "Níor athraigh sé" -#: lib/cannery/accounts/user.ex:159 +#: lib/cannery/accounts/user.ex:158 #, elixir-autogen, elixir-format msgid "does not match password" msgstr "" -#: lib/cannery/accounts/user.ex:196 +#: lib/cannery/accounts/user.ex:195 #, elixir-autogen, elixir-format msgid "is not valid" msgstr "" @@ -143,7 +143,7 @@ msgstr "" msgid "must have the @ sign and no spaces" msgstr "" -#: lib/cannery/tags.ex:40 +#: lib/cannery/tags.ex:39 #, elixir-autogen, elixir-format msgid "Tag not found" msgstr "" @@ -153,13 +153,13 @@ msgstr "" msgid "Tag could not be added" msgstr "" -#: lib/cannery/activity_log/shot_group.ex:123 +#: lib/cannery/activity_log/shot_group.ex:122 #, elixir-autogen, elixir-format msgid "Count must be at least 1" msgstr "" #: lib/cannery/activity_log/shot_group.ex:82 -#: lib/cannery/activity_log/shot_group.ex:119 +#: lib/cannery/activity_log/shot_group.ex:118 #, elixir-autogen, elixir-format msgid "Count must be less than %{count}" msgstr "" @@ -190,7 +190,7 @@ msgstr "" msgid "Invalid multiplier" msgstr "" -#: lib/cannery/ammo/ammo_group.ex:96 +#: lib/cannery/ammo/ammo_group.ex:97 #, elixir-autogen, elixir-format msgid "Please select an ammo type and container" msgstr "" diff --git a/priv/gettext/ga/LC_MESSAGES/prompts.po b/priv/gettext/ga/LC_MESSAGES/prompts.po index 40e0d05a..15cb0776 100644 --- a/priv/gettext/ga/LC_MESSAGES/prompts.po +++ b/priv/gettext/ga/LC_MESSAGES/prompts.po @@ -142,7 +142,7 @@ msgstr "" msgid "Password updated successfully." msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:74 +#: lib/cannery_web/controllers/user_registration_controller.ex:73 #, elixir-autogen, elixir-format msgid "Please check your email to verify your account" msgstr "" diff --git a/priv/gettext/prompts.pot b/priv/gettext/prompts.pot index fa016a35..065ea401 100644 --- a/priv/gettext/prompts.pot +++ b/priv/gettext/prompts.pot @@ -131,7 +131,7 @@ msgstr "" msgid "Password updated successfully." msgstr "" -#: lib/cannery_web/controllers/user_registration_controller.ex:74 +#: lib/cannery_web/controllers/user_registration_controller.ex:73 #, elixir-autogen, elixir-format msgid "Please check your email to verify your account" msgstr "" diff --git a/test/cannery/accounts_test.exs b/test/cannery/accounts_test.exs index 93001e7e..086a2406 100644 --- a/test/cannery/accounts_test.exs +++ b/test/cannery/accounts_test.exs @@ -104,7 +104,7 @@ defmodule Cannery.AccountsTest do describe "change_user_registration/2" do test "returns a changeset" do - assert %Changeset{} = changeset = Accounts.change_user_registration(%User{}) + assert %Changeset{} = changeset = Accounts.change_user_registration() assert changeset.required == [:password, :email] end @@ -112,8 +112,7 @@ defmodule Cannery.AccountsTest do email = unique_user_email() password = valid_user_password() - changeset = - Accounts.change_user_registration(%User{}, %{"email" => email, "password" => password}) + changeset = Accounts.change_user_registration(%{"email" => email, "password" => password}) assert changeset.valid? assert get_change(changeset, :email) == email