Skip to content

Commit 12b2628

Browse files
Manuel MéndezManuel Méndez
authored andcommitted
Add parse for new responses
1 parent c871f3e commit 12b2628

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

lib/handler.ex

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ defmodule Conekta.Handler do
77
200 ->
88
content.body
99

10+
402 ->
11+
content.body
12+
1013
500 ->
1114
ErrorHandler.raise_error(content)
1215

lib/orders.ex

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ defmodule Conekta.Orders do
4343
def create(order) when is_map(order) do
4444
case Client.post_request("orders", order) do
4545
{:ok, content} ->
46-
body = Handler.handle_status_code(content)
47-
{:ok, Poison.decode!(body, as: %OrdersCreateResponse{})}
46+
content
47+
|> Handler.handle_status_code()
48+
|> Poison.decode!()
49+
|> parse_response()
4850
end
4951
end
5052

@@ -107,11 +109,34 @@ defmodule Conekta.Orders do
107109
def create_charge(order_id, charge) do
108110
case Client.post_request("orders/" <> order_id <> "/charges", charge) do
109111
{:ok, content} ->
110-
body = Handler.handle_status_code(content)
111-
{:ok, Poison.decode!(body, as: %OrderCreateChargeResponse{})}
112+
content
113+
|> Handler.handle_status_code()
114+
|> Poison.decode!()
115+
|> parse_response()
112116
end
113117
end
114118

119+
defp parse_response(%{"data" => %{"object" => "order"} = data}) do
120+
data
121+
|> Poison.encode!()
122+
|> Poison.decode!(as: %OrdersCreateResponse{})
123+
|> then(&{:error, &1})
124+
end
125+
126+
defp parse_response(%{"charges" => _charges} = data) do
127+
data
128+
|> Poison.encode!()
129+
|> Poison.decode!(as: %OrdersCreateResponse{})
130+
|> then(&{:ok, &1})
131+
end
132+
133+
defp parse_response(data) do
134+
data
135+
|> Poison.encode!()
136+
|> Poison.decode!(as: %OrderCreateChargeResponse{})
137+
|> then(&{:ok, &1})
138+
end
139+
115140
def refund(order_id, refund) do
116141
case Client.post_request("orders/" <> order_id <> "/refunds", refund) do
117142
{:ok, content} ->

0 commit comments

Comments
 (0)