lib/pipple.ex

defmodule Pipple do
  @moduledoc """
  This is the entrypoint for making requests to Rippling's API via Pipple
  """

  use Tesla

  defdelegate list_employees(client), to: Pipple.Employees

  def client(api_token, base_url) do
    base_url = process_base(base_url)

    middleware = [
      {Tesla.Middleware.BaseUrl, base_url},
      {Tesla.Middleware.JSON, engine: Jason},
      {Tesla.Middleware.BearerAuth, token: api_token},
      Tesla.Middleware.PathParams
    ]

    Tesla.client(middleware)
  end

  defp process_base(base_url) do
    if Regex.match?(~r/^https?:\/\//i, base_url) do
      base_url
    else
      "https://" <> base_url
    end
  end
end