Browse Source

Remove the dependency on httpd_util

Add the function cowboy_clock:rfc1123/1 that formats the given
date to the RFC1123 format.
Loïc Hoguin 12 years ago
parent
commit
8bc6bde62f
4 changed files with 45 additions and 6 deletions
  1. 6 2
      src/cowboy_clock.erl
  2. 4 4
      src/cowboy_rest.erl
  3. 13 0
      test/http_SUITE.erl
  4. 22 0
      test/rest_expires.erl

+ 6 - 2
src/cowboy_clock.erl

@@ -25,6 +25,7 @@
 -export([start_link/0]).
 -export([stop/0]).
 -export([rfc1123/0]).
+-export([rfc1123/1]).
 -export([rfc2109/1]).
 
 %% gen_server.
@@ -61,12 +62,15 @@ stop() ->
 	gen_server:call(?SERVER, stop).
 
 %% @doc Return the current date and time formatted according to RFC-1123.
-%%
-%% This format is used in the <em>date</em> header sent with HTTP responses.
 -spec rfc1123() -> binary().
 rfc1123() ->
 	ets:lookup_element(?TABLE, rfc1123, 2).
 
+%% @doc Return the given date and time formatted according to RFC-1123.
+-spec rfc1123(calendar:datetime()) -> binary().
+rfc1123(DateTime) ->
+	update_rfc1123(<<>>, undefined, DateTime).
+
 %% @doc Return the current date and time formatted according to RFC-2109.
 %%
 %% This format is used in the <em>set-cookie</em> header sent with

+ 4 - 4
src/cowboy_rest.erl

@@ -778,9 +778,9 @@ set_resp_body(Req, State=#state{handler=Handler, handler_state=HandlerState,
 		LastModified when is_atom(LastModified) ->
 			Req3;
 		LastModified ->
-			LastModifiedStr = httpd_util:rfc1123_date(LastModified),
+			LastModifiedBin = cowboy_clock:rfc1123(LastModified),
 			cowboy_req:set_resp_header(
-				<<"last-modified">>, LastModifiedStr, Req3)
+				<<"last-modified">>, LastModifiedBin, Req3)
 	end,
 	{Req5, State4} = set_resp_expires(Req4, State3),
 	case call(Req5, State4, Fun) of
@@ -831,9 +831,9 @@ set_resp_expires(Req, State) ->
 		Expires when is_atom(Expires) ->
 			{Req2, State2};
 		Expires ->
-			ExpiresStr = httpd_util:rfc1123_date(Expires),
+			ExpiresBin = cowboy_clock:rfc1123(Expires),
 			Req3 = cowboy_req:set_resp_header(
-				<<"expires">>, ExpiresStr, Req2),
+				<<"expires">>, ExpiresBin, Req2),
 			{Req3, State2}
 	end.
 

+ 13 - 0
test/http_SUITE.erl

@@ -49,6 +49,7 @@
 -export([onresponse_reply/1]).
 -export([pipeline/1]).
 -export([rest_bad_accept/1]).
+-export([rest_expires/1]).
 -export([rest_keepalive/1]).
 -export([rest_keepalive_post/1]).
 -export([rest_missing_get_callbacks/1]).
@@ -97,6 +98,7 @@ groups() ->
 		nc_zero,
 		pipeline,
 		rest_bad_accept,
+		rest_expires,
 		rest_keepalive,
 		rest_keepalive_post,
 		rest_missing_get_callbacks,
@@ -261,6 +263,7 @@ init_dispatch(Config) ->
 			{[<<"missing_put_callbacks">>], rest_missing_callbacks, []},
 			{[<<"nodelete">>], rest_nodelete_resource, []},
 			{[<<"resetags">>], rest_resource_etags, []},
+			{[<<"rest_expires">>], rest_expires, []},
 			{[<<"loop_timeout">>], http_handler_loop_timeout, []},
 			{[], http_handler, []}
 		]}
@@ -664,6 +667,16 @@ rest_bad_accept(Config) ->
 		Client),
 	{ok, 400, _, _} = cowboy_client:response(Client2).
 
+rest_expires(Config) ->
+	Client = ?config(client, Config),
+	{ok, Client2} = cowboy_client:request(<<"GET">>,
+		build_url("/rest_expires", Config), Client),
+	{ok, 200, RespHeaders, _} = cowboy_client:response(Client2),
+	{_, Expires} = lists:keyfind(<<"expires">>, 1, RespHeaders),
+	{_, LastModified} = lists:keyfind(<<"last-modified">>, 1, RespHeaders),
+	Expires = LastModified = <<"Fri, 21 Sep 2012 22:36:14 GMT">>,
+	ok.
+
 rest_keepalive(Config) ->
 	Client = ?config(client, Config),
 	URL = build_url("/simple", Config),

+ 22 - 0
test/rest_expires.erl

@@ -0,0 +1,22 @@
+-module(rest_expires).
+
+-export([init/3]).
+-export([content_types_provided/2]).
+-export([get_text_plain/2]).
+-export([expires/2]).
+-export([last_modified/2]).
+
+init(_Transport, _Req, _Opts) ->
+	{upgrade, protocol, cowboy_rest}.
+
+content_types_provided(Req, State) ->
+	{[{{<<"text">>, <<"plain">>, []}, get_text_plain}], Req, State}.
+
+get_text_plain(Req, State) ->
+	{<<"This is REST!">>, Req, State}.
+
+expires(Req, State) ->
+	{{{2012, 9, 21}, {22, 36, 14}}, Req, State}.
+
+last_modified(Req, State) ->
+	{{{2012, 9, 21}, {22, 36, 14}}, Req, State}.