ロジックメイク感覚は、しかし、行が非常に長いです:それは任意の使用であれば
defp make_url_ready_for_embedding(video_params) do
cond do
String.contains? video_params["url"], "/watch?v=" ->
video_params |> Map.put("url", String.replace(video_params["url"], "/watch?v=", "/embed/"))
String.contains? video_params["url"], "https://vimeo.com" ->
video_params |> Map.put("url", Regex.replace(~r/([^1-9]+)/, video_params["url"], "https://player.vimeo.com/video/"))
true ->
video_params
end
end
は、ここに私のcreate
方法です。私はおそらくのようなもののために行くだろう
:
defp make_url_ready_for_embedding(%{"url" => url} = video_params) do
url = cond do
String.contains?(url, "/watch?v=") ->
String.replace(url, "/watch?v=", "/embed/")
String.contains?(url "https://vimeo.com") ->
Regex.replace(~r/([^1-9]+)/, url, "https://player.vimeo.com/video/")
true ->
url
end
%{video_params | "url" => url)
end
これが優れている、しかし、その意図は、一目でまだ非常に明確ではありません。私はおそらくこれを支援するための機能を使用することを検討します:
defp make_url_ready_for_embedding(%{"url" => url} = video_params) do
type = cond do
youtube_video?(url) -> :youtube
vimeo_video?(url) -> :vimeo
true -> :unknown
end
%{video_params | "url" => transform_url(url, type)}
end
defp youtube_video?(url) do
String.contains?(url, "/watch?v=")
end
defp vimeo_video?(url) do
String.contains?(url, "https://vimeo.com")
end
defp transform_url(url, :unknown) do: url
defp transform_url(url, :youtube) do
String.replace(url, "/watch?v=", "/embed/")
end
defp transform_url(url, :vimeo) do
Regex.replace(~r/([^1-9]+)/, url, "https://player.vimeo.com/video/")
end
は、これは、あなたのtransform_url
機能をテストすることができます利点を持っているURLが種類ごとに正しく変換されることを保証するために、(それが公共および@doc偽作ります)。
ありがとうございます。今それを見て.... – skovmand
私はそれがいいと思う。私は別のvideo_transformers.exファイルに関数を移動して今すぐインポートしています – skovmand
defp 'youtube_video?/ 1'関数にタイプミスがあります: ' String.contains?(url "https://vimeo.com" ) 'はコンマをつけて、' String.contains?(url、 "https://vimeo.com") ' –