defmodule RandomUserApi.Engine do defp _random_me_api do Application.get_env :random_user_api, :random_me_api end defp _random_me_url do Application.get_env :random_user_api, :random_me_url end def get_users(1) do _fetch_url(_random_me_url) |> _process |> hd end def get_users(n) do _fetch_url(_random_me_url <> "?results=#{n}") |> _process end def get_users(1, gender: :male) do _fetch_url(_random_me_url <> "?gender=male") |> _process |> hd end def get_users(1, gender: :female) do _fetch_url(_random_me_url <> "?gender=female") |> _process |> hd end def get_users(n, gender: :female) do _fetch_url(_random_me_url <> "?results=#{n}&gender=female") |> _process end def get_users(n, gender: :male) do _fetch_url(_random_me_url <> "?results=#{n}&gender=male") |> _process end defp _process(input) do input |> _to_json |> _get_from_results end def fetch_url(url) do result = _random_me_api.get url end defp _fetch_url(url) do result = _random_me_api.get url case result do {:ok, data} -> data _ -> :error end end defp _to_json(:error) do "An error occured. Please try again later." end defp _to_json(data) do :jsx.decode data.body end defp _get_from_results(str) when is_bitstring(str) do str end defp _get_from_results(json) do {_results, data} = json |> hd for user <- data, do: Enum.into(user, %{}) end end