defmodule Witaixir do use HTTPoison.Base @moduledoc """ Documentation for Witaixir. """ # public functions def get(path, query_string, client) do fetch(:get, build_url(path, query_string, client), authorization_header(client)) end # HTTPoison overridden functions defp process_request_body(body), do: Poison.encode!(body) defp process_response_body(""), do: nil defp process_response_body(body), do: Poison.decode!(body) # private functions defp authorization_header(client, headers \\ []), do: headers ++ [{:Authorization, "Bearer #{client.token}"}] defp build_url(path, query_string, client) do build_host(client) |> build_path(path) |> build_query_string(query_string) |> build_version(client) end defp build_host(client), do: client.base_url defp build_path(url, path), do: url <> "/" <> path defp build_query_string(url, query_string \\ ""), do: url <> "?" <> query_string defp build_version(url, client), do: url <> "&v" <> client.version defp fetch(method, url, headers, body \\ ""), do: request(method, url, body, headers) defp process_response({:error, %HTTPoison.Error{reason: reason}}), do: { :error, reason } defp process_response({:ok, %HTTPoison.Response{status_code: 200, body: body}}), do: { :ok, body } defp process_response({:ok, %HTTPoison.Response{status_code: status_code, body: body}}), do: { :ok, status_code, body } end