diff --git a/lib/localize/plug.ex b/lib/localize/plug.ex index 1d79de8..e4b5689 100644 --- a/lib/localize/plug.ex +++ b/lib/localize/plug.ex @@ -8,6 +8,14 @@ defmodule Localize.Plug do @session_key Localize.Plug.PutLocale.session_key() + defmodule NoSessionLocaleError do + @moduledoc """ + Returned by `Localize.Plug.put_locale_from_session/2` when the session has no locale. + """ + + defexception message: "No locale was found in the session" + end + @doc """ Puts the locale from the session into the current process. @@ -29,7 +37,8 @@ defmodule Localize.Plug do * `{:ok, locale}` or - * `{:error, {exception, reason}}` + * `{:error, exception}`. A session without a locale returns a + `Localize.Plug.NoSessionLocaleError`. ### Examples @@ -61,7 +70,7 @@ defmodule Localize.Plug do end def put_locale_from_session(_session, _options) do - {:error, {Localize.UnknownLocaleError, "No locale was found in the session"}} + {:error, %NoSessionLocaleError{}} end # A locale that Gettext has no translations for is a configuration diff --git a/mix.exs b/mix.exs index d6854b1..e09cfc9 100644 --- a/mix.exs +++ b/mix.exs @@ -76,6 +76,7 @@ defmodule LocalizeWeb.MixProject do groups_for_modules: [ Plugs: [ Localize.Plug, + Localize.Plug.NoSessionLocaleError, Localize.Plug.PutLocale, Localize.Plug.PutSession, Localize.Plug.AcceptLanguage, diff --git a/test/localize_web_test.exs b/test/localize_web_test.exs index a63eb0c..0e3e5af 100644 --- a/test/localize_web_test.exs +++ b/test/localize_web_test.exs @@ -51,8 +51,11 @@ defmodule LocalizeWebTest do assert Localize.Plug.PutLocale.locale_from_host(nil) == nil end - test "put_locale_from_session returns error when no locale in session" do - assert {:error, _} = Localize.Plug.put_locale_from_session(%{}) + test "put_locale_from_session returns a NoSessionLocaleError for an empty session" do + assert {:error, %Localize.Plug.NoSessionLocaleError{} = error} = + Localize.Plug.put_locale_from_session(%{}) + + assert Exception.message(error) == "No locale was found in the session" end test "Phoenix.HTML.Safe protocol for Localize.LanguageTag" do