diff --git a/lib/service/address/address.ex b/lib/service/address/address.ex index 97392712..12f7a396 100644 --- a/lib/service/address/address.ex +++ b/lib/service/address/address.ex @@ -7,7 +7,7 @@ defmodule Mobilizon.Service.Address do @type address :: %{name: String.t(), alternative_name: String.t()} - @spec render_address(AddressModel.t()) :: String.t() | no_return + @spec render_address(AddressModel.t()) :: String.t() | nil def render_address(%AddressModel{} = address) do %{name: name, alternative_name: alternative_name} = render_names(address) @@ -22,7 +22,18 @@ defmodule Mobilizon.Service.Address do alternative_name true -> + nil + end + end + + @spec render_address!(AddressModel.t()) :: String.t() | no_return + def render_address!(%AddressModel{} = address) do + case render_address(address) do + nil -> raise ArgumentError, message: "Invalid address" + + address -> + address end end diff --git a/lib/service/metadata/event.ex b/lib/service/metadata/event.ex index 0e361f41..aa6011e9 100644 --- a/lib/service/metadata/event.ex +++ b/lib/service/metadata/event.ex @@ -9,7 +9,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do alias Mobilizon.Web.Router.Helpers, as: Routes import Mobilizon.Service.Metadata.Utils, - only: [process_description: 2, strip_tags: 1, datetime_to_string: 2, render_address: 1] + only: [process_description: 2, strip_tags: 1, datetime_to_string: 2, render_address!: 1] def build_tags(%Event{} = event, locale \\ "en") do formatted_description = description(event, locale) @@ -150,7 +150,13 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do @spec maybe_build_address(list(String.t()), Address.t() | nil) :: list(String.t()) defp maybe_build_address(elements, %Address{} = address) do - elements ++ [render_address(address)] + elements ++ [render_address!(address)] + rescue + # If the address is not renderable + e in ArgumentError -> + require Logger + Logger.error(Exception.format(:error, e, __STACKTRACE__)) + elements end defp maybe_build_address(elements, _address), do: elements diff --git a/lib/service/metadata/utils.ex b/lib/service/metadata/utils.ex index c5799098..a819f194 100644 --- a/lib/service/metadata/utils.ex +++ b/lib/service/metadata/utils.ex @@ -54,7 +54,7 @@ defmodule Mobilizon.Service.Metadata.Utils do end defdelegate datetime_to_string(datetime, locale \\ "en", format \\ :medium), to: DateTime - defdelegate render_address(address), to: Address + defdelegate render_address!(address), to: Address defp maybe_slice(description, nil), do: description diff --git a/lib/web/templates/email/participation/card/_metadata.html.heex b/lib/web/templates/email/participation/card/_metadata.html.heex index 05316b59..af7b78e2 100644 --- a/lib/web/templates/email/participation/card/_metadata.html.heex +++ b/lib/web/templates/email/participation/card/_metadata.html.heex @@ -26,7 +26,7 @@ - <%= if @event.physical_address do %> + <%= if not is_nil(@event.physical_address) and not is_nil(render_address(@event.physical_address)) do %>