Skip to content

Instantly share code, notes, and snippets.

@ijunaid8989
Created July 1, 2016 06:52
Show Gist options
  • Save ijunaid8989/52d7d7a665e5e93f6fe767eedf2b34b5 to your computer and use it in GitHub Desktop.
Save ijunaid8989/52d7d7a665e5e93f6fe767eedf2b34b5 to your computer and use it in GitHub Desktop.
defmodule EvercamMedia.Validation.Archive do
import String, only: [equivalent?: 2]
def validate_params(params) do
with :ok <- validate(:title, params["title"]),
:ok <- validate(:from_date, params["from_date"]),
:ok <- validate(:to_date, params["to_date"]),
:ok <- validate(:requested_by, params["requested_by"]),
:ok <- validate_boolean(:embed_time, params["embed_time"]),
:ok <- validate_boolean(:public, params["public"]),
do: :ok
end
defp validate(key, value) when value in [nil, ""], do: invalid(key)
defp validate(:from_date = key, value), do: is_number(key, value)
defp validate(:to_date = key, value), do: is_number(key, value)
defp validate(:requested_by = key, value), do: is_number(key, value)
defp validate(_key, _value), do: :ok
defp is_number(key, value) do
case Integer.parse(value) do
{_number, ""} -> :ok
_ -> invalid(key)
end
end
defp validate_boolean(key, boolean) do
case present?(boolean) do
false -> :ok
true ->
if equivalent?("true", boolean) || equivalent?("false", boolean) do
:ok
else
{:invalid, "The parameter '#{key}' must be a boolean."}
end
end
end
defp invalid(key), do: {:invalid, "The parameter '#{key}' isn't valid."}
defp present?(param) when param in [nil, ""], do: false
defp present?(_param), do: true
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment