Browse Source

Add a cowboy_req:to_list/1 function

Removes a lot of duplicate code when printing error messages.
Loïc Hoguin 12 years ago
parent
commit
bb4bd9ac96
4 changed files with 14 additions and 8 deletions
  1. 4 4
      src/cowboy_protocol.erl
  2. 6 0
      src/cowboy_req.erl
  3. 1 1
      src/cowboy_rest.erl
  4. 3 3
      src/cowboy_websocket.erl

+ 4 - 4
src/cowboy_protocol.erl

@@ -287,7 +287,7 @@ handler_init(Req, State=#state{transport=Transport,
 			upgrade_protocol(Req, State, Module)
 			upgrade_protocol(Req, State, Module)
 	catch Class:Reason ->
 	catch Class:Reason ->
 		error_terminate(500, State),
 		error_terminate(500, State),
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in init/3~n"
 			"** Handler ~p terminating in init/3~n"
 			"   for the reason ~p:~p~n"
 			"   for the reason ~p:~p~n"
@@ -310,7 +310,7 @@ handler_handle(HandlerState, Req, State=#state{handler={Handler, Opts}}) ->
 		{ok, Req2, HandlerState2} ->
 		{ok, Req2, HandlerState2} ->
 			terminate_request(HandlerState2, Req2, State)
 			terminate_request(HandlerState2, Req2, State)
 	catch Class:Reason ->
 	catch Class:Reason ->
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in handle/2~n"
 			"** Handler ~p terminating in handle/2~n"
 			"   for the reason ~p:~p~n"
 			"   for the reason ~p:~p~n"
@@ -368,7 +368,7 @@ handler_call(HandlerState, Req, State=#state{handler={Handler, Opts}},
 			handler_before_loop(HandlerState2, Req2,
 			handler_before_loop(HandlerState2, Req2,
 				State#state{hibernate=true})
 				State#state{hibernate=true})
 	catch Class:Reason ->
 	catch Class:Reason ->
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in info/3~n"
 			"** Handler ~p terminating in info/3~n"
 			"   for the reason ~p:~p~n"
 			"   for the reason ~p:~p~n"
@@ -385,7 +385,7 @@ handler_terminate(HandlerState, Req, #state{handler={Handler, Opts}}) ->
 	try
 	try
 		Handler:terminate(Req#http_req{resp_state=locked}, HandlerState)
 		Handler:terminate(Req#http_req{resp_state=locked}, HandlerState)
 	catch Class:Reason ->
 	catch Class:Reason ->
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in terminate/2~n"
 			"** Handler ~p terminating in terminate/2~n"
 			"   for the reason ~p:~p~n"
 			"   for the reason ~p:~p~n"

+ 6 - 0
src/cowboy_req.erl

@@ -78,6 +78,7 @@
 
 
 %% Misc API.
 %% Misc API.
 -export([compact/1]).
 -export([compact/1]).
+-export([to_list/1]).
 -export([transport/1]).
 -export([transport/1]).
 
 
 -include("http.hrl").
 -include("http.hrl").
@@ -816,6 +817,11 @@ compact(Req) ->
 		bindings=undefined, headers=[],
 		bindings=undefined, headers=[],
 		p_headers=[], cookies=[]}.
 		p_headers=[], cookies=[]}.
 
 
+%% @doc Convert the Req object to a list of key/values.
+-spec to_list(req()) -> [{atom(), any()}].
+to_list(Req) ->
+	lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))).
+
 %% @doc Return the transport module and socket associated with a request.
 %% @doc Return the transport module and socket associated with a request.
 %%
 %%
 %% This exposes the same socket interface used internally by the HTTP protocol
 %% This exposes the same socket interface used internally by the HTTP protocol

+ 1 - 1
src/cowboy_rest.erl

@@ -69,7 +69,7 @@ upgrade(_ListenerPid, Handler, Opts, Req) ->
 				service_available(Req, #state{handler=Handler})
 				service_available(Req, #state{handler=Handler})
 		end
 		end
 	catch Class:Reason ->
 	catch Class:Reason ->
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in rest_init/3~n"
 			"** Handler ~p terminating in rest_init/3~n"
 			"   for the reason ~p:~p~n** Options were ~p~n"
 			"   for the reason ~p:~p~n** Options were ~p~n"

+ 3 - 3
src/cowboy_websocket.erl

@@ -125,7 +125,7 @@ handler_init(State=#state{handler=Handler, opts=Opts},
 			upgrade_denied(Req2)
 			upgrade_denied(Req2)
 	catch Class:Reason ->
 	catch Class:Reason ->
 		upgrade_error(Req),
 		upgrade_error(Req),
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in websocket_init/3~n"
 			"** Handler ~p terminating in websocket_init/3~n"
 			"   for the reason ~p:~p~n** Options were ~p~n"
 			"   for the reason ~p:~p~n** Options were ~p~n"
@@ -473,7 +473,7 @@ handler_call(State=#state{handler=Handler, opts=Opts}, Req, HandlerState,
 		{shutdown, Req2, HandlerState2} ->
 		{shutdown, Req2, HandlerState2} ->
 			websocket_close(State, Req2, HandlerState2, {normal, shutdown})
 			websocket_close(State, Req2, HandlerState2, {normal, shutdown})
 	catch Class:Reason ->
 	catch Class:Reason ->
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in ~p/3~n"
 			"** Handler ~p terminating in ~p/3~n"
 			"   for the reason ~p:~p~n** Message was ~p~n"
 			"   for the reason ~p:~p~n** Message was ~p~n"
@@ -523,7 +523,7 @@ handler_terminate(#state{handler=Handler, opts=Opts},
 	try
 	try
 		Handler:websocket_terminate(TerminateReason, Req, HandlerState)
 		Handler:websocket_terminate(TerminateReason, Req, HandlerState)
 	catch Class:Reason ->
 	catch Class:Reason ->
-		PLReq = lists:zip(record_info(fields, http_req), tl(tuple_to_list(Req))),
+		PLReq = cowboy_req:to_list(Req),
 		error_logger:error_msg(
 		error_logger:error_msg(
 			"** Handler ~p terminating in websocket_terminate/3~n"
 			"** Handler ~p terminating in websocket_terminate/3~n"
 			"   for the reason ~p:~p~n** Initial reason was ~p~n"
 			"   for the reason ~p:~p~n** Initial reason was ~p~n"