tokumei v0.6.0 Tokumei.MethodOverride
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.
PUTPATCHDELETE
Override target is read from query parameters
Examples
# override POST to PUT from query value
iex> post({"/", %{"_method" => "PUT"}})
...> |> override_method()
...> |> Map.get(:method)
:PUT
# override POST to PATCH from query value
iex> post({"/", %{"_method" => "PATCH"}})
...> |> override_method()
...> |> Map.get(:method)
:PATCH
# override POST to DELETE from query value
iex> post({"/", %{"_method" => "DELETE"}})
...> |> override_method()
...> |> Map.get(:method)
:DELETE
# overridding method removes the _method field from the query
iex> post({"/", %{"_method" => "PUT"}})
...> |> override_method()
...> |> Map.get(:query)
%{}
# override works with lowercase query value
iex> post({"/", %{"_method" => "delete"}})
...> |> override_method()
...> |> Map.get(:method)
:DELETE
# # at the moment breaks deleberatly due to unknown method
# # does not allow unknown methods
# iex> post({"/", %{"_method" => "PARTY"}})
# ...> |> override_method()
# ...> |> Map.get(:method)
# :POST
# leaves non-POST requests unmodified, e.g. GET
iex> get({"/", %{"_method" => "DELETE"}})
...> |> override_method()
...> |> Map.get(:method)
:GET
# leaves non-POST requests unmodified, e.g. PUT
# Not entirely sure of the logic here.
iex> put({"/", %{"_method" => "DELETE"}})
...> |> override_method()
...> |> Map.get(:method)
:PUT
# queries with out a _method field are a no-op
iex> post({"/", %{"other" => "PUT"}})
...> |> override_method()
...> |> Map.get(:method)
:POST
Extensions
- Should the field be customisable?
_methodas default.* - Should it ever error for bad requests.*