lib/paystack/plan.ex

defmodule Paystack.Plan do
  import Paystack.Helpers, only: [paystack: 0]

  @moduledoc """
  The Plans API allows you create and manage installment payment options on your integration

  https://paystack.com/docs/api/#plan
  """

  @doc """
  Create a plan on your integration
  """
  @spec create(map) :: Paystack.Api.t
  def create(params), do: paystack().post("/plan", params)

  @doc """
  List plans available on your integration.
  """
  @spec list() :: Paystack.Api.t
  def list(), do: paystack().get("/plan")

  @spec list(map | list) :: Paystack.Api.t
  def list(query_params),
    do: paystack().get("/plan?" <> URI.encode_query(query_params))

  @doc """
  Get details of a plan on your integration.
  """
  @spec fetch(String.t) :: Paystack.Api.t
  def fetch(id_or_code), do: paystack().get("/plan/#{id_or_code}")

  @doc """
  Update a plan details on your integration
  """
  @spec update(String.t, map) :: Paystack.Api.t
  def update(id_or_code, params),
    do: paystack().put("/plan/#{id_or_code}", params)
end