Packages

Plaid client library for Elixir

Current section

Files

Jump to
plaidex lib plaidex api base.ex
Raw

lib/plaidex/api/base.ex

defmodule Plaidex.API.Base do
@moduledoc false
def get(endpoint, options \\ []) do
endpoint
|> url
|> HTTPoison.get!(options, hackney: [pool: :default])
|> decode_body
|> handle_error
end
def post(endpoint, data \\ []) do
endpoint
|> url
|> HTTPoison.post!(data |> encode, [{"Content-Type", "application/json"}], hackney: [pool: :default])
|> decode_body
|> handle_error
end
def authenticated_post(access_token, params, endpoint) do
parameters = case params do
nil -> Plaidex.Config.credentials(access_token)
params -> Plaidex.Config.credentials(access_token) |> Enum.into(params)
end
post(endpoint, parameters)
end
def delete(endpoint) do
response = endpoint
|> url
|> HTTPoison.delete!(%{}, hackney: [pool: :default])
if response.status_code == 204 do
{:ok}
end
end
def patch(endpoint, data) do
endpoint
|> url
|> HTTPoison.patch!(data |> encode, %{}, hackney: [pool: :default])
|> decode_body
|> handle_error
end
defp encode(data) do
data
|> Enum.into(%{})
|> Poison.encode!
end
defp decode_body(response) do
response.body
|> Poison.decode!
end
defp url(endpoint) do
"https://" <> environment_url() <> ".plaid.com/" <> to_string(endpoint)
end
defp handle_error(response) do
case response["error_code"] do
nil -> {:ok, response}
_er -> {:error, response}
end
end
defp environment_url do
case Mix.env do
:prod -> "production"
:dev -> "sandbox"
:test -> "sandbox"
end
end
end