From 288b1df11e61a21ebd1ab5a89a6d1d44019e1939 Mon Sep 17 00:00:00 2001 From: Guy Argo Date: Thu, 16 Dec 2021 15:56:02 -0800 Subject: [PATCH] Upgrade libs and elixir version (#45) * first attempt * more typespecs and library api changes --- .travis.yml | 4 +--- README.md | 4 ++-- lib/lob/bulk_intl_verification.ex | 6 ++++-- lib/lob/bulk_us_verification.ex | 2 +- lib/lob/client.ex | 27 ++++++++++++++++----------- lib/lob/util.ex | 4 ++-- mix.exs | 20 ++++++++++---------- mix.lock | 20 +++++++++++--------- 8 files changed, 47 insertions(+), 40 deletions(-) diff --git a/.travis.yml b/.travis.yml index da9190e..366b282 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,7 @@ language: elixir sudo: false elixir: - - '1.4.5' - - '1.5.3' - - '1.6.1' + - '1.12.1' otp_release: - '20.0' diff --git a/README.md b/README.md index 4f992d7..11accc2 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The package can be installed by adding `lob_elixir` to your list of dependencies ```elixir def deps do [ - {:lob_elixir, "~> 1.3.0"} + {:lob_elixir, "~> 1.5.0"} ] end ``` @@ -88,6 +88,6 @@ Then view the report at `cover/excoveralls.html`. ======================= -Copyright © 2020 Lob.com +Copyright © 2021 Lob.com Released under the MIT License, which can be found in the repository in [`LICENSE.txt`](LICENSE.txt). diff --git a/lib/lob/bulk_intl_verification.ex b/lib/lob/bulk_intl_verification.ex index 8e2cf9b..d74160b 100644 --- a/lib/lob/bulk_intl_verification.ex +++ b/lib/lob/bulk_intl_verification.ex @@ -4,10 +4,12 @@ defmodule Lob.BulkIntlVerification do """ use Lob.ResourceBase, endpoint: "bulk/intl_verifications", methods: [] - @spec verify(map, map) :: Client.client_response def verify(data, headers \\ %{"Content-type": "application/json"}) do - Client.post_request(base_url(), Poison.encode!(data), Util.build_headers(headers)) + with {:ok, encoded_data} <- Poison.encode(data) + do + Client.post_request(base_url(), encoded_data, Util.build_headers(headers)) + end end end diff --git a/lib/lob/bulk_us_verification.ex b/lib/lob/bulk_us_verification.ex index e4cee68..6578ca5 100644 --- a/lib/lob/bulk_us_verification.ex +++ b/lib/lob/bulk_us_verification.ex @@ -5,7 +5,7 @@ defmodule Lob.BulkUSVerification do use Lob.ResourceBase, endpoint: "bulk/us_verifications", methods: [] - @spec verify(map, map) :: Client.client_response + @spec verify(map, map) :: Client.client_response | no_return def verify(data, headers \\ %{"Content-type": "application/json"}) do Client.post_request(base_url(), Poison.encode!(data), Util.build_headers(headers)) end diff --git a/lib/lob/client.ex b/lib/lob/client.ex index 624bf46..4ea999e 100644 --- a/lib/lob/client.ex +++ b/lib/lob/client.ex @@ -11,7 +11,7 @@ defmodule Lob.Client do @client_version Mix.Project.config[:version] - @type client_response :: {:ok, map, list} | {:error, map} + @type client_response :: {:ok, map, list} | {:error, any} defmodule MissingAPIKeyError do @moduledoc """ @@ -19,12 +19,12 @@ defmodule Lob.Client do """ defexception message: """ - The api_key setting is required to make requests to Lob. - Please configure :api_key in config.exs or set the LOB_API_KEY - environment variable. + The api_key setting is required to make requests to Lob. + Please configure :api_key in config.exs or set the LOB_API_KEY + environment variable. - config :lob_elixir, api_key: API_KEY - """ + config :lob_elixir, api_key: API_KEY + """ end @spec client_version :: String.t @@ -39,7 +39,8 @@ defmodule Lob.Client do end @spec api_version :: String.t | nil - def api_version, do: Application.get_env(:lob_elixir, :api_version, System.get_env("LOB_API_VERSION")) + def api_version, + do: Application.get_env(:lob_elixir, :api_version, System.get_env("LOB_API_VERSION")) # ######################### # HTTPoison.Base callbacks @@ -53,7 +54,7 @@ defmodule Lob.Client do end def process_response_body(body) do - Parser.parse!(body, keys: :atoms) + Parser.parse!(body, %{keys: :atoms}) end # ######################### @@ -85,9 +86,9 @@ defmodule Lob.Client do # Response handlers # ######################### - @spec handle_response({:ok | :error, Response.t | Error.t}) :: client_response + @spec handle_response({:ok, map} | {:error, Error.t}) :: client_response defp handle_response({:ok, %{body: body, headers: headers, status_code: code}}) - when code >= 200 and code < 300 do + when code >= 200 and code < 300 do {:ok, body, headers} end @@ -106,6 +107,10 @@ defmodule Lob.Client do @spec default_headers(String.t | nil) :: %{String.t => String.t} defp default_headers(nil), do: %{"User-Agent" => "Lob/v1 ElixirBindings/#{client_version()}"} - defp default_headers(api_version), do: %{"User-Agent" => "Lob/v1 ElixirBindings/#{client_version()}", "Lob-Version" => api_version} + defp default_headers(api_version), + do: %{ + "User-Agent" => "Lob/v1 ElixirBindings/#{client_version()}", + "Lob-Version" => api_version + } end diff --git a/lib/lob/util.ex b/lib/lob/util.ex index f36347b..add56e6 100644 --- a/lib/lob/util.ex +++ b/lib/lob/util.ex @@ -38,14 +38,14 @@ 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(map) :: HTTPoison.Base.headers + @spec build_headers(map) :: [{String.t, String.t}] def build_headers(headers) do headers |> Enum.to_list |> Enum.map(fn {k, v} -> {to_string(k), to_string(v)} end) end - @spec transform_argument({any, any}) :: list + @spec transform_argument({any, any}) :: list | no_return defp transform_argument({:merge_variables, v}), do: transform_argument({"merge_variables", v}) defp transform_argument({"merge_variables", v}) do diff --git a/mix.exs b/mix.exs index 2271c0f..ef1be01 100644 --- a/mix.exs +++ b/mix.exs @@ -4,8 +4,8 @@ defmodule Lob.Mixfile do def project do [ app: :lob_elixir, - version: "1.4.0", - elixir: "~> 1.4", + version: "1.5.0", + elixir: "~> 1.12", preferred_cli_env: ["coveralls.html": :test], start_permanent: Mix.env() == :prod, test_coverage: [tool: ExCoveralls], @@ -32,14 +32,14 @@ defmodule Lob.Mixfile do defp deps do [ - {:bypass, "~> 0.8", only: :test}, - {:confex, "~> 3.4.0"}, - {:credo, "~> 0.8", only: [:dev, :test], runtime: false}, - {:dialyxir, "~> 0.5.1", only: [:dev, :test], runtime: false}, - {:excoveralls, "~> 0.7.4", only: :test}, - {:httpoison, "~> 1.0"}, - {:poison, "~> 3.1"}, - {:plug_cowboy, "~> 2.0"}, + {:bypass, "~> 2.1", only: :test}, + {:confex, "~> 3.5.0"}, + {:credo, "~> 1.5.6", only: [:dev, :test], runtime: false}, + {:dialyxir, "~> 1.1", only: [:dev, :test], runtime: false}, + {:excoveralls, "~> 0.14", only: :test}, + {:httpoison, "~> 1.8"}, + {:poison, "~> 5.0"}, + {:plug_cowboy, "~> 2.5"}, {:uuid, "~> 1.1", only: :test} ] end diff --git a/mix.lock b/mix.lock index 2832c33..f4fe6ef 100644 --- a/mix.lock +++ b/mix.lock @@ -1,28 +1,30 @@ %{ "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, - "bypass": {:hex, :bypass, "0.9.0", "4cedcd326eeec497e0090a73d351cbd0f11e39329ddf9095931b03da9b6dc417", [:mix], [{:cowboy, "~> 1.0 or ~> 2.0", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ede64318ac7bff9126d83a962a1605f4fd407fa0d1a6c844b3b012773d6beadd"}, - "certifi": {:hex, :certifi, "2.6.1", "dbab8e5e155a0763eea978c913ca280a6b544bfa115633fa20249c3d396d9493", [:rebar3], [], "hexpm", "524c97b4991b3849dd5c17a631223896272c6b0af446778ba4675a1dff53bb7e"}, - "confex": {:hex, :confex, "3.4.0", "8b1c3cc7a93320291abb31223a178df19d7f722ee816c05a8070c8c9a054560d", [:mix], [], "hexpm", "4a14e15185c772389979cf4c050ddcc7a25a4d62759da13a170e0ca7274a22c7"}, + "bypass": {:hex, :bypass, "2.1.0", "909782781bf8e20ee86a9cabde36b259d44af8b9f38756173e8f5e2e1fabb9b1", [:mix], [{:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: false]}, {:ranch, "~> 1.3", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "d9b5df8fa5b7a6efa08384e9bbecfe4ce61c77d28a4282f79e02f1ef78d96b80"}, + "certifi": {:hex, :certifi, "2.8.0", "d4fb0a6bb20b7c9c3643e22507e42f356ac090a1dcea9ab99e27e0376d695eba", [:rebar3], [], "hexpm", "6ac7efc1c6f8600b08d625292d4bbf584e14847ce1b6b5c44d983d273e1097ea"}, + "confex": {:hex, :confex, "3.5.0", "163857c73dd8f88a3815663f4bc00bee1b9c65daf40aa6e0d6ef272757fd22c7", [:mix], [], "hexpm", "34a9e31230c7fbb3dbe60db00341d0c84ee44ba3caf84b498f501c0bc8563570"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, - "credo": {:hex, :credo, "0.10.2", "03ad3a1eff79a16664ed42fc2975b5e5d0ce243d69318060c626c34720a49512", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "539596b6774069260d5938aa73042a2f5157e1c0215aa35f5a53d83889546d14"}, - "dialyxir": {:hex, :dialyxir, "0.5.1", "b331b091720fd93e878137add264bac4f644e1ddae07a70bf7062c7862c4b952", [:mix], [], "hexpm", "6c32a70ed5d452c6650916555b1f96c79af5fc4bf286997f8b15f213de786f73"}, - "excoveralls": {:hex, :excoveralls, "0.7.5", "339e433e5d3bce09400dc8de7b9040741a409c93917849916c136a0f51fdc183", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:hackney, ">= 0.12.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "36422936691b6a8a728fe42c528e7b2719b2fde1a56d19fc7e3de31cb2271017"}, + "credo": {:hex, :credo, "1.5.6", "e04cc0fdc236fefbb578e0c04bd01a471081616e741d386909e527ac146016c6", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "4b52a3e558bd64e30de62a648518a5ea2b6e3e5d2b164ef5296244753fc7eb17"}, + "dialyxir": {:hex, :dialyxir, "1.1.0", "c5aab0d6e71e5522e77beff7ba9e08f8e02bad90dfbeffae60eaf0cb47e29488", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "07ea8e49c45f15264ebe6d5b93799d4dd56a44036cf42d0ad9c960bc266c0b9a"}, + "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, + "excoveralls": {:hex, :excoveralls, "0.14.3", "d17dc249ad32e469afd2bc656b58e810109d4367ec6bd467bed57a84dc4a3e02", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "b5aecdfdcf48e9d5e1c210841589b30981a5e7e66055cb8691a6f90b1601c108"}, "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm", "32e95820a97cffea67830e91514a2ad53b888850442d6d395f53a1ac60c82e07"}, - "hackney": {:hex, :hackney, "1.17.4", "99da4674592504d3fb0cfef0db84c3ba02b4508bae2dff8c0108baa0d6e0977c", [:rebar3], [{:certifi, "~>2.6.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "de16ff4996556c8548d512f4dbe22dd58a587bf3332e7fd362430a7ef3986b16"}, + "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, + "hackney": {:hex, :hackney, "1.18.0", "c4443d960bb9fba6d01161d01cd81173089686717d9490e5d3606644c48d121f", [:rebar3], [{:certifi, "~>2.8.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "9afcda620704d720db8c6a3123e9848d09c87586dc1c10479c42627b905b5c5e"}, "httpoison": {:hex, :httpoison, "1.8.0", "6b85dea15820b7804ef607ff78406ab449dd78bed923a49c7160e1886e987a3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "28089eaa98cf90c66265b6b5ad87c59a3729bea2e74e9d08f9b51eb9729b3c3a"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"}, "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm", "fc3499fed7a726995aa659143a248534adc754ebd16ccd437cd93b649a95091f"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "2.0.1", "0de4c81303fe07806ebc2494d5321ce8fb4df106e34dd5f9d787b637ebadc256", [:mix], [], "hexpm", "7a86b920d2aedce5fb6280ac8261ac1a739ae6c1a1ad38f5eadf910063008942"}, + "mime": {:hex, :mime, "2.0.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "plug": {:hex, :plug, "1.12.1", "645678c800601d8d9f27ad1aebba1fdb9ce5b2623ddb961a074da0b96c35187d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d57e799a777bc20494b784966dc5fbda91eb4a09f571f76545b72a634ce0d30b"}, "plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"}, "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"}, - "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, + "poison": {:hex, :poison, "5.0.0", "d2b54589ab4157bbb82ec2050757779bfed724463a544b6e20d79855a9e43b24", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "11dc6117c501b80c62a7594f941d043982a1bd05a1184280c0d9166eb4d8d3fc"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"},