Leverage function pattern matching instead
This commit is contained in:
parent
8246db2a96
commit
029ff65389
1 changed files with 26 additions and 10 deletions
|
@ -379,18 +379,15 @@ def render("card.json", %{rich_media: rich_media, page_url: page_url}) do
|
|||
|
||||
page_url = page_url_data |> to_string
|
||||
|
||||
image_url =
|
||||
cond do
|
||||
!is_binary(rich_media["image"]) ->
|
||||
image_url_data =
|
||||
if is_binary(rich_media["image"]) do
|
||||
URI.parse(rich_media["image"])
|
||||
else
|
||||
nil
|
||||
|
||||
String.starts_with?(rich_media["image"], "http") ->
|
||||
rich_media["image"]
|
||||
|
||||
true ->
|
||||
URI.merge(page_url_data, URI.parse(rich_media["image"])) |> to_string
|
||||
end
|
||||
|
||||
image_url = get_image_url(image_url_data, page_url_data)
|
||||
|
||||
%{
|
||||
type: "link",
|
||||
provider_name: page_url_data.host,
|
||||
|
@ -546,4 +543,23 @@ defp build_application(%{"type" => _type, "name" => name, "url" => url}),
|
|||
do: %{name: name, website: url}
|
||||
|
||||
defp build_application(_), do: nil
|
||||
|
||||
# Workaround for Elixir issue #10771
|
||||
# Avoid applying URI.merge unless necessary
|
||||
# TODO: revert to always attempting URI.merge(image_url_data, page_url_data)
|
||||
# when Elixir 1.12 is the minimum supported version
|
||||
@spec get_image_url(struct() | nil, struct()) :: String.t() | nil
|
||||
defp get_image_url(
|
||||
%URI{scheme: image_scheme, host: image_host} = image_url_data,
|
||||
%URI{} = _page_url_data
|
||||
)
|
||||
when not is_nil(image_scheme) and not is_nil(image_host) do
|
||||
image_url_data |> to_string
|
||||
end
|
||||
|
||||
defp get_image_url(%URI{} = image_url_data, %URI{} = page_url_data) do
|
||||
URI.merge(page_url_data, image_url_data) |> to_string
|
||||
end
|
||||
|
||||
defp get_image_url(_, _), do: nil
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue