aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2020-03-11 19:42:57 +0100
committerLoïc Hoguin <[email protected]>2020-03-11 19:42:57 +0100
commitf017f8a0ecbffd5033d9ab49bf180186f7a523a7 (patch)
tree3487b50de51ad71cb12b9c4e7017ac4f0588567f
parent4b9da5965cd3c8fe93639eddcb8973407f86bbb7 (diff)
downloadcowlib-f017f8a0ecbffd5033d9ab49bf180186f7a523a7.tar.gz
cowlib-f017f8a0ecbffd5033d9ab49bf180186f7a523a7.tar.bz2
cowlib-f017f8a0ecbffd5033d9ab49bf180186f7a523a7.zip
Add cow_cookie:cookie/1
-rw-r--r--src/cow_cookie.erl30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/cow_cookie.erl b/src/cow_cookie.erl
index d1ffbc3..1f6d41b 100644
--- a/src/cow_cookie.erl
+++ b/src/cow_cookie.erl
@@ -16,6 +16,7 @@
-export([parse_cookie/1]).
-export([parse_set_cookie/1]).
+-export([cookie/1]).
-export([setcookie/3]).
-type cookie_attrs() :: #{
@@ -285,12 +286,41 @@ parse_set_cookie_test_() ->
|| {SetCookie, Res} <- Tests].
-endif.
+%% Build a cookie header.
+
+-spec cookie([{iodata(), iodata()}]) -> iolist().
+cookie([]) ->
+ [];
+cookie([{<<>>, Value}]) ->
+ [Value];
+cookie([{Name, Value}]) ->
+ [Name, $=, Value];
+cookie([{<<>>, Value}|Tail]) ->
+ [Value, $;, $\s|cookie(Tail)];
+cookie([{Name, Value}|Tail]) ->
+ [Name, $=, Value, $;, $\s|cookie(Tail)].
+
+-ifdef(TEST).
+cookie_test_() ->
+ Tests = [
+ {[], <<>>},
+ {[{<<"a">>, <<"b">>}], <<"a=b">>},
+ {[{<<"a">>, <<"b">>}, {<<"c">>, <<"d">>}], <<"a=b; c=d">>},
+ {[{<<>>, <<"b">>}, {<<"c">>, <<"d">>}], <<"b; c=d">>},
+ {[{<<"a">>, <<"b">>}, {<<>>, <<"d">>}], <<"a=b; d">>}
+ ],
+ [{Res, fun() -> Res = iolist_to_binary(cookie(Cookies)) end}
+ || {Cookies, Res} <- Tests].
+-endif.
+
%% Convert a cookie name, value and options to its iodata form.
%%
%% Initially from Mochiweb:
%% * Copyright 2007 Mochi Media, Inc.
%% Initial binary implementation:
%% * Copyright 2011 Thomas Burdick <[email protected]>
+%%
+%% @todo Rename the function to set_cookie eventually.
-spec setcookie(iodata(), iodata(), cookie_opts()) -> iolist().
setcookie(Name, Value, Opts) ->