Class: FaradayMiddleware::MethodOverride
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- FaradayMiddleware::MethodOverride
- Defined in:
- lib/faraday_middleware/request/method_override.rb
Overview
Public: Writes the original HTTP method to “X-Http-Method-Override” header and sends the request as POST.
This can be used to work around technical issues with making non-POST requests, e.g. faulty HTTP client or server router.
This header is recognized in Rack apps by default, courtesy of the Rack::MethodOverride module. See rack.rubyforge.org/doc/classes/Rack/MethodOverride.html
Constant Summary collapse
- HEADER =
"X-Http-Method-Override".freeze
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, options = nil) ⇒ MethodOverride
constructor
Public: Initialize the middleware.
-
#rewrite_request(env, original_method) ⇒ Object
Internal: Write the original HTTP method to header, change method to POST.
- #rewrite_request?(method) ⇒ Boolean
Constructor Details
#initialize(app, options = nil) ⇒ MethodOverride
Public: Initialize the middleware.
app - the Faraday app to wrap options - (optional)
:rewrite - Array of HTTP methods to rewrite
(default: all but GET and POST)
23 24 25 26 27 28 29 |
# File 'lib/faraday_middleware/request/method_override.rb', line 23 def initialize(app, = nil) super(app) @methods = && .fetch(:rewrite).map { |method| method = method.downcase if method.respond_to? :downcase method.to_sym } end |
Instance Method Details
#call(env) ⇒ Object
31 32 33 34 35 |
# File 'lib/faraday_middleware/request/method_override.rb', line 31 def call(env) method = env[:method] rewrite_request(env, method) if rewrite_request?(method) @app.call(env) end |
#rewrite_request(env, original_method) ⇒ Object
Internal: Write the original HTTP method to header, change method to POST.
46 47 48 49 |
# File 'lib/faraday_middleware/request/method_override.rb', line 46 def rewrite_request(env, original_method) env[:request_headers][HEADER] = original_method.to_s.upcase env[:method] = :post end |
#rewrite_request?(method) ⇒ Boolean
37 38 39 40 41 42 43 |
# File 'lib/faraday_middleware/request/method_override.rb', line 37 def rewrite_request?(method) if @methods.nil? or @methods.empty? method != :get and method != :post else @methods.include? method end end |