Packages

Debounce Email Validator API Wrapper.

Current section

Files

Jump to
debounce_elixir lib debounce.ex
Raw

lib/debounce.ex

defmodule Debounce do
@base_url "https://api.debounce.io/v1/"
@moduledoc """
Documentation for Debounce.
"""
@doc """
Debounce verify/1 accepts and email_address and returns a three member tuple containing the summarized results of the check.
## Examples
iex> Debounce.verify("info@example.com")
{:ok, "unknown", "info@example.com"}
"""
def verify(email_address), do: verify(email_address, :minimal)
@doc """
Debounce verify/2 accepts and email_address and response_type atom (:full or :minimal) and returns a three member tuple containing the results of the check..
## Examples
iex> Debounce.verify("info@example.com", :full)
{:ok,
%{
"balance" => "3198.6",
"debounce" => %{
"code" => "7",
"did_you_mean" => "",
"email" => "info@example.com",
"free_email" => "false",
"photo" => "",
"reason" => "Unknown",
"result" => "Unknown",
"role" => "true",
"send_transactional" => "1"
},
"success" => "1"
}, "info@example.com"}
iex> Debounce.verify("info@example.com", :minimal)
{:ok, "unknown", "info@example.com"}
"""
def verify(email_address, response_type) when is_bitstring(email_address) do
query =
:debounce_elixir
|> Application.get_all_env()
|> Enum.into(%{})
|> Map.put(:email, email_address)
|> URI.encode_query
url = @base_url <> "?" <> query
Application.ensure_all_started(:inets)
case :httpc.request(:get, {String.to_charlist(url), []}, [], [body_format: :json]) do
{:ok, {{_, 200, 'OK'}, _headers, body}} ->
case Jason.decode(body) do
{:ok, json} ->
cond do
response_type == :minimal ->
{:ok, resolve_code(json["debounce"]["code"]), email_address}
response_type == :full ->
{:ok, json, email_address}
true ->
{:ok, json, email_address}
end
{:error, reason} ->
{:error, reason, email_address}
end
error ->
{:error, error, email_address}
end
end
defp resolve_code("1"), do: "invalid"
defp resolve_code("2"), do: "trap"
defp resolve_code("3"), do: "temp"
defp resolve_code("4"), do: "catch_all"
defp resolve_code("5"), do: "safe"
defp resolve_code("6"), do: "bounce"
defp resolve_code("7"), do: "unknown"
defp resolve_code("8"), do: "safe"
defp resolve_code(_), do: "invalid_check"
end