if_range_h.erl 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. %% This module defines the ranges_provided callback
  2. %% and a generate_etag callback that returns something
  3. %% different depending on query string. It also defines
  4. %% a last_modified callback that must be ignored when a
  5. %% date is provided in if_range.
  6. -module(if_range_h).
  7. -export([init/2]).
  8. -export([content_types_provided/2]).
  9. -export([ranges_provided/2]).
  10. -export([generate_etag/2]).
  11. -export([last_modified/2]).
  12. -export([get_text_plain/2]).
  13. -export([get_text_plain_bytes/2]).
  14. init(Req, State) ->
  15. {cowboy_rest, Req, State}.
  16. content_types_provided(Req, State) ->
  17. {[{{<<"text">>, <<"plain">>, []}, get_text_plain}], Req, State}.
  18. %% Simulate the callback being missing.
  19. ranges_provided(#{qs := <<"missing-ranges_provided">>}, _) ->
  20. no_call;
  21. ranges_provided(Req=#{qs := <<"empty-ranges_provided">>}, State) ->
  22. {[], Req, State};
  23. ranges_provided(Req, State) ->
  24. {[{<<"bytes">>, get_text_plain_bytes}], Req, State}.
  25. generate_etag(Req=#{qs := <<"weak-etag">>}, State) ->
  26. {{weak, <<"weak-no-match">>}, Req, State};
  27. generate_etag(Req, State) ->
  28. {{strong, <<"strong-and-match">>}, Req, State}.
  29. last_modified(Req, State) ->
  30. {{{2222, 2, 22}, {11, 11, 11}}, Req, State}.
  31. get_text_plain(Req, State) ->
  32. {<<"This is REST!">>, Req, State}.
  33. get_text_plain_bytes(Req, State) ->
  34. %% We send everything in one part, since we are not testing
  35. %% this callback specifically.
  36. Body = <<"This is ranged REST!">>,
  37. {[{{0, byte_size(Body) - 1, byte_size(Body)}, Body}], Req, State}.