lib/extripe/utils/api.ex

defmodule Extripe.Utils.API do
  use HTTPoison.Base

  def process_url(url) do
    [
      "https://",
      Application.get_env(
        :extripe,
        :stripe_secret_key,
        System.get_env("stripe_secret_key")
      ),
      ":@api.stripe.com/v1",
      url
    ]
  end

  def process_request_body(body) when is_binary(body), do: body

  def process_request_body(body) do
    body
    |> Extripe.Utils.Params.normalize()
    |> URI.encode_query()
  end

  def process_request_headers(headers) do
    [{"content-type", "application/x-www-form-urlencoded"} | headers]
  end

  def process_response_body(body) do
    Jason.decode!(body)
  end

  def get(url), do: super(url) |> ok_error
  def post(url, body), do: super(url, body) |> ok_error
  def delete(url), do: super(url) |> ok_error

  defp ok_error({:ok, %{body: %{"error" => error}}}), do: {:error, error}
  defp ok_error({:ok, %{body: body}}), do: {:ok, body}
  defp ok_error({:error, %{reason: reason}}), do: {:error, reason}
end