Current section
Files
Jump to
Current section
Files
lib/witaixir.ex
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