diff --git a/lib/lob/resource_base.ex b/lib/lob/resource_base.ex index 4e6c3fc..8e24bab 100644 --- a/lib/lob/resource_base.ex +++ b/lib/lob/resource_base.ex @@ -18,6 +18,14 @@ defmodule Lob.ResourceBase do def list(params \\ %{}, headers \\ %{}) do Client.get_request("#{base_url()}?#{Util.build_query_string(params)}" , Util.build_headers(headers)) end + + @spec list!(map, map) :: {map, list} | no_return + def list!(params \\ %{}, headers \\ %{}) do + case list(params, headers) do + {:ok, body, headers} -> {body, headers} + {:error, error} -> raise to_string(error) + end + end end if :retrieve in unquote(methods) do @@ -25,6 +33,14 @@ defmodule Lob.ResourceBase do def retrieve(id, headers \\ %{}) do Client.get_request(resource_url(id), Util.build_headers(headers)) end + + @spec retrieve!(String.t, map) :: {map, list} | no_return + def retrieve!(id, headers \\ %{}) do + case retrieve(id, headers) do + {:ok, body, headers} -> {body, headers} + {:error, error} -> raise to_string(error) + end + end end if :create in unquote(methods) do @@ -32,6 +48,14 @@ defmodule Lob.ResourceBase do def create(data, headers \\ %{}) do Client.post_request(base_url(), Util.build_body(data), Util.build_headers(headers)) end + + @spec create!(map, map) :: {map, list} | no_return + def create!(data, headers \\ %{}) do + case create(data, headers) do + {:ok, body, headers} -> {body, headers} + {:error, error} -> raise to_string(error) + end + end end if :delete in unquote(methods) do @@ -39,6 +63,14 @@ defmodule Lob.ResourceBase do def delete(id, headers \\ %{}) do Client.delete_request(resource_url(id), Util.build_headers(headers)) end + + @spec delete!(String.t, map) :: {map, list} | no_return + def delete!(id, headers \\ %{}) do + case delete(id, headers) do + {:ok, body, headers} -> {body, headers} + {:error, error} -> raise to_string(error) + end + end end @spec base_url :: String.t diff --git a/lib/lob/util.ex b/lib/lob/util.ex index 859be21..0d0e23a 100644 --- a/lib/lob/util.ex +++ b/lib/lob/util.ex @@ -38,7 +38,7 @@ defmodule Lob.Util do iex> Lob.Util.build_headers(%{"Idempotency-Key" => "abc123", "Lob-Version" => "2017-11-08"}) [{"Idempotency-Key", "abc123"}, {"Lob-Version", "2017-11-08"}] """ - @spec build_headers(list({any, any})) :: HTTPoison.Base.headers + @spec build_headers(map) :: HTTPoison.Base.headers def build_headers(headers) do headers |> Enum.to_list