aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--manual/cowboy_rest.md2
-rw-r--r--src/cowboy_rest.erl6
-rw-r--r--test/http_SUITE.erl8
-rw-r--r--test/http_SUITE_data/rest_expires_binary.erl18
4 files changed, 32 insertions, 2 deletions
diff --git a/manual/cowboy_rest.md b/manual/cowboy_rest.md
index 7a38bb7..a2abf3a 100644
--- a/manual/cowboy_rest.md
+++ b/manual/cowboy_rest.md
@@ -275,7 +275,7 @@ REST callbacks description
### expires
> * Methods: GET, HEAD
-> * Value type: calendar:datetime() | undefined
+> * Value type: calendar:datetime() | binary() | undefined
> * Default value: undefined
>
> Return the date of expiration of the resource.
diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl
index 63e4dd9..5741dfe 100644
--- a/src/cowboy_rest.erl
+++ b/src/cowboy_rest.erl
@@ -52,7 +52,7 @@
%% Cached resource calls.
etag :: undefined | no_call | {strong | weak, binary()},
last_modified :: undefined | no_call | calendar:datetime(),
- expires :: undefined | no_call | calendar:datetime()
+ expires :: undefined | no_call | calendar:datetime() | binary()
}).
-spec upgrade(Req, Env, module(), any())
@@ -896,6 +896,10 @@ set_resp_expires(Req, State) ->
case Expires of
Expires when is_atom(Expires) ->
{Req2, State2};
+ Expires when is_binary(Expires) ->
+ Req3 = cowboy_req:set_resp_header(
+ <<"expires">>, Expires, Req2),
+ {Req3, State2};
Expires ->
ExpiresBin = cowboy_clock:rfc1123(Expires),
Req3 = cowboy_req:set_resp_header(
diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl
index 8ab99cb..0e115e0 100644
--- a/test/http_SUITE.erl
+++ b/test/http_SUITE.erl
@@ -207,6 +207,7 @@ init_dispatch(Config) ->
{"/patch", rest_patch_resource, []},
{"/resetags", rest_resource_etags, []},
{"/rest_expires", rest_expires, []},
+ {"/rest_expires_binary", rest_expires_binary, []},
{"/rest_empty_resource", rest_empty_resource, []},
{"/loop_stream_recv", http_loop_stream_recv, []},
{"/", http_handler, []}
@@ -687,6 +688,13 @@ rest_expires(Config) ->
Expires = LastModified = <<"Fri, 21 Sep 2012 22:36:14 GMT">>,
ok.
+rest_expires_binary(Config) ->
+ ConnPid = gun_open(Config),
+ Ref = gun:get(ConnPid, "/rest_expires_binary"),
+ {response, nofin, 200, Headers} = gun:await(ConnPid, Ref),
+ {_, <<"0">>} = lists:keyfind(<<"expires">>, 1, Headers),
+ ok.
+
rest_keepalive(Config) ->
ConnPid = gun_open(Config),
Refs = [gun:get(ConnPid, "/simple") || _ <- lists:seq(1, 10)],
diff --git a/test/http_SUITE_data/rest_expires_binary.erl b/test/http_SUITE_data/rest_expires_binary.erl
new file mode 100644
index 0000000..4cbd001
--- /dev/null
+++ b/test/http_SUITE_data/rest_expires_binary.erl
@@ -0,0 +1,18 @@
+-module(rest_expires_binary).
+
+-export([init/3]).
+-export([content_types_provided/2]).
+-export([get_text_plain/2]).
+-export([expires/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) ->
+ {<<"0">>, Req, State}.