diff options
author | Hubert Chathi <hubert@uhoreg.ca> | 2020-04-24 20:19:27 -0400 |
---|---|---|
committer | Hubert Chathi <hubert@uhoreg.ca> | 2020-04-24 20:19:27 -0400 |
commit | 68463ae802e5acd59a4f2369427c87c961415c2e (patch) | |
tree | f91b3e5d666b0c774f5a4de445ef9e731f54a15a /lib/polyjuice | |
parent | add methods for paginating room history, and manually syncing (diff) |
use a protocol for transforming HTTP responses
Diffstat (limited to 'lib/polyjuice')
-rw-r--r-- | lib/polyjuice/client.ex | 9 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint.ex | 15 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/get_rooms_messages.ex | 17 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/get_sync.ex | 17 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/post_join.ex | 17 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/post_login.ex | 16 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/post_logout.ex | 18 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/post_rooms_receipt.ex | 18 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/post_user_filter.ex | 17 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/put_rooms_send.ex | 17 | ||||
-rw-r--r-- | lib/polyjuice/client/endpoint/put_rooms_state.ex | 17 |
11 files changed, 90 insertions, 88 deletions
diff --git a/lib/polyjuice/client.ex b/lib/polyjuice/client.ex index ef68a2a..a1d63c3 100644 --- a/lib/polyjuice/client.ex +++ b/lib/polyjuice/client.ex @@ -119,7 +119,6 @@ defmodule Polyjuice.Client do headers: headers, url: url, body: body, - transform: transform, auth_required: auth_required } = Polyjuice.Client.Endpoint.Proto.http_spec(endpoint, base_url) @@ -143,7 +142,13 @@ defmodule Polyjuice.Client do ) Logger.debug("status code #{status_code}") - transform.(status_code, resp_headers, body) + + Polyjuice.Client.Endpoint.Proto.transform_http_result( + endpoint, + status_code, + resp_headers, + body + ) end end diff --git a/lib/polyjuice/client/endpoint.ex b/lib/polyjuice/client/endpoint.ex index 97eb277..1b6b7b5 100644 --- a/lib/polyjuice/client/endpoint.ex +++ b/lib/polyjuice/client/endpoint.ex @@ -31,15 +31,13 @@ defmodule Polyjuice.Client.Endpoint do headers: [{String.t(), String.t()}], url: String.t(), body: String.t(), - transform: (integer, [{String.t(), String.t()}, ...], String.t() -> any), auth_required: true | false } - @enforce_keys [:method, :headers, :url, :transform] + @enforce_keys [:method, :headers, :url] defstruct [ :method, :headers, :url, - :transform, body: "", auth_required: true ] @@ -58,5 +56,16 @@ defmodule Polyjuice.Client.Endpoint do base_url :: String.t() ) :: Polyjuice.Client.Endpoint.HttpSpec.t() def http_spec(endpoint_args, base_url) + + @doc """ + Transform the HTTP result into a return value. + """ + @spec transform_http_result( + endpoint_args :: __MODULE__.t(), + status_code :: integer(), + headers :: [{String.t(), String.t()}, ...], + body :: String.t() + ) :: any + def transform_http_result(endpoint_args, status_code, headers, body) end end diff --git a/lib/polyjuice/client/endpoint/get_rooms_messages.ex b/lib/polyjuice/client/endpoint/get_rooms_messages.ex index 1983a2b..bceea3f 100644 --- a/lib/polyjuice/client/endpoint/get_rooms_messages.ex +++ b/lib/polyjuice/client/endpoint/get_rooms_messages.ex @@ -74,19 +74,18 @@ defmodule Polyjuice.Client.Endpoint.GetRoomsMessages do headers: [ {"Accept", "application/json"} ], - url: to_string(url), - transform: &Polyjuice.Client.Endpoint.GetRoomsMessages.transform/3 + url: to_string(url) } end - end - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, Poison.decode!(body)} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, Poison.decode!(body)} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/get_sync.ex b/lib/polyjuice/client/endpoint/get_sync.ex index 79e9553..c30e680 100644 --- a/lib/polyjuice/client/endpoint/get_sync.ex +++ b/lib/polyjuice/client/endpoint/get_sync.ex @@ -80,19 +80,18 @@ defmodule Polyjuice.Client.Endpoint.GetSync do headers: [ {"Accept", "application/json"} ], - url: to_string(url), - transform: &Polyjuice.Client.Endpoint.GetSync.transform/3 + url: to_string(url) } end - end - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, Poison.decode!(body)} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, Poison.decode!(body)} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/post_join.ex b/lib/polyjuice/client/endpoint/post_join.ex index 4e967e8..bdc8c0a 100644 --- a/lib/polyjuice/client/endpoint/post_join.ex +++ b/lib/polyjuice/client/endpoint/post_join.ex @@ -72,19 +72,18 @@ defmodule Polyjuice.Client.Endpoint.PostJoin do {"Content-Type", "application/json"} ], url: to_string(url), - body: body, - transform: &Polyjuice.Client.Endpoint.PostJoin.transform/3 + body: body } end - end - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, body |> Poison.decode!() |> Map.get("room_id")} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, body |> Poison.decode!() |> Map.get("room_id")} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/post_login.ex b/lib/polyjuice/client/endpoint/post_login.ex index bb068e2..e374b41 100644 --- a/lib/polyjuice/client/endpoint/post_login.ex +++ b/lib/polyjuice/client/endpoint/post_login.ex @@ -80,20 +80,18 @@ defmodule Polyjuice.Client.Endpoint.PostLogin do ) |> to_string(), body: body, - transform: &Polyjuice.Client.Endpoint.PostLogin.transform/3, auth_required: false } end - end - @doc false - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, Poison.decode!(body)} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, Poison.decode!(body)} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/post_logout.ex b/lib/polyjuice/client/endpoint/post_logout.ex index 7523797..e29c28b 100644 --- a/lib/polyjuice/client/endpoint/post_logout.ex +++ b/lib/polyjuice/client/endpoint/post_logout.ex @@ -41,20 +41,18 @@ defmodule Polyjuice.Client.Endpoint.PostLogout do "#{Polyjuice.Client.prefix_r0()}/logout" ) |> to_string(), - body: "{}", - transform: &Polyjuice.Client.Endpoint.PostLogout.transform/3 + body: "{}" } end - end - @doc false - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - :ok + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/post_rooms_receipt.ex b/lib/polyjuice/client/endpoint/post_rooms_receipt.ex index 49344d0..45cff8e 100644 --- a/lib/polyjuice/client/endpoint/post_rooms_receipt.ex +++ b/lib/polyjuice/client/endpoint/post_rooms_receipt.ex @@ -59,20 +59,18 @@ defmodule Polyjuice.Client.Endpoint.PostRoomsReceipt do }" ) |> to_string(), - body: "{}", - transform: &Polyjuice.Client.Endpoint.PostRoomsReceipt.transform/3 + body: "{}" } end - end - @doc false - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/post_user_filter.ex b/lib/polyjuice/client/endpoint/post_user_filter.ex index ee426a9..39b0f4a 100644 --- a/lib/polyjuice/client/endpoint/post_user_filter.ex +++ b/lib/polyjuice/client/endpoint/post_user_filter.ex @@ -53,19 +53,18 @@ defmodule Polyjuice.Client.Endpoint.PostUserFilter do "#{Polyjuice.Client.prefix_r0()}/user/#{e.(user_id)}/filter" ) |> to_string(), - body: body, - transform: &Polyjuice.Client.Endpoint.PostUserFilter.transform/3 + body: body } end - end - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, body |> Poison.decode!() |> Map.get("filter_id")} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, body |> Poison.decode!() |> Map.get("filter_id")} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/put_rooms_send.ex b/lib/polyjuice/client/endpoint/put_rooms_send.ex index 4bfc411..717624d 100644 --- a/lib/polyjuice/client/endpoint/put_rooms_send.ex +++ b/lib/polyjuice/client/endpoint/put_rooms_send.ex @@ -61,19 +61,18 @@ defmodule Polyjuice.Client.Endpoint.PutRoomsSend do }" ) |> to_string(), - body: body, - transform: &Polyjuice.Client.Endpoint.PutRoomsSend.transform/3 + body: body } end - end - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, body |> Poison.decode!() |> Map.get("event_id")} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, body |> Poison.decode!() |> Map.get("event_id")} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end diff --git a/lib/polyjuice/client/endpoint/put_rooms_state.ex b/lib/polyjuice/client/endpoint/put_rooms_state.ex index c5f6fa1..98481ed 100644 --- a/lib/polyjuice/client/endpoint/put_rooms_state.ex +++ b/lib/polyjuice/client/endpoint/put_rooms_state.ex @@ -61,19 +61,18 @@ defmodule Polyjuice.Client.Endpoint.PutRoomsState do }" ) |> to_string(), - body: body, - transform: &Polyjuice.Client.Endpoint.PutRoomsSend.transform/3 + body: body } end - end - def transform(status_code, _resp_headers, body) do - case status_code do - 200 -> - {:ok, body |> Poison.decode!() |> Map.get("event_id")} + def transform_http_result(_req, status_code, _resp_headers, body) do + case status_code do + 200 -> + {:ok, body |> Poison.decode!() |> Map.get("event_id")} - _ -> - {:error, status_code, body} + _ -> + {:error, status_code, body} + end end end end |