As you probably know, most browsers don't support some RESTful
methods like PATCH or PUT. Rack's MethodOverride
middleware
provides a workaround for this limitation, allowing to override
request method in rack's env if a magical _method parameter or
HTTP_METHOD_OVERRIDE request header is found.
You have to be aware that if you use this middleware within a
web_pipe application (through use DSL
method), it will have no effect.
When your web_pipe application takes control of the request, it
has already gone through the router, which is the one that should
read the request method set by rack.
The solution for this is straightforward. Just use MethodOverride middleware
before your router does its work. For example, in config.ru:
# config.ru
use Rack::MethodOverride
# Load your router and map to web_pipe applications