Handle address is invalid while rendering event preview

Closes #996

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2022-04-01 13:54:16 +02:00
parent a99d66b68f
commit 2bdce8b2fc
7 changed files with 27 additions and 8 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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