Packages
raxx
0.8.2
1.1.0
1.0.1
1.0.0
1.0.0-rc.3
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.18.1
0.18.0
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
retired
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.14
0.14.13
0.14.12
0.14.11
0.14.10
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.1
0.11.0
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
0.0.1
Interface for HTTP webservers, frameworks and clients.
Current section
Files
Jump to
Current section
Files
lib/raxx_method_override.ex
defmodule Raxx.MethodOverride do
@moduledoc """
Allows browser submitted forms to use HTTP verbs other than `POST`.
Only the `POST` method can be overridden,
It can be overridden to use any of these HTTP verbs.
- `PUT`
- `PATCH`
- `DELETE`
The body is expected to be parsed aready and in the form of a map.
*Should the field be customisable? `_method` as default.*
*Should it ever error for bad requests.*
"""
@doc """
Edits the request method based on the request body
"""
def override_method(request = %{method: :POST, body: form = %{}}) do
case Map.pop(form, "_method") do
{method, form} when is_binary(method)->
method = String.upcase(method)
cond do
method in ["PUT", "PATCH", "DELETE"] ->
method = String.to_existing_atom(method)
%{request | method: method, body: form}
true ->
request
end
{nil, _form} ->
request
end
end
def override_method(request) do
request
end
end