class Apiphobic::Middleware::Converters::RequestMethod

Constants

OVERRIDE_KEY

Attributes

request[RW]

Public Class Methods

new(app) click to toggle source
# File lib/apiphobic/middleware/converters/request_method.rb, line 16
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/apiphobic/middleware/converters/request_method.rb, line 20
def call(env)
  self.request      = Rack::Request.new(env)
  allowed_overrides = configuration.allowed_method_overrides

  allowed_overrides.each do |path_pattern, method_mappings|
    path_pattern = path_pattern
                     .gsub(':uuid', '[0-9a-f]{8}\\-(?:[0-9a-f]{4}\\-){3}[0-9a-f]{12}')

    next unless env['PATH_INFO'] =~ Regexp.new("\\A#{path_pattern}\\z")

    method_mappings.each do |from, to|
      next unless from.include?(env['REQUEST_METHOD'].downcase)
      next unless to.include?(overridden_method.downcase)

      env['rack.methodoverride.original_method'] = env['REQUEST_METHOD']
      env['REQUEST_METHOD']                      = overridden_method.upcase
    end
  end

  @app.call(env)
end

Private Instance Methods

overridden_method() click to toggle source
# File lib/apiphobic/middleware/converters/request_method.rb, line 44
def overridden_method
  @overridden_method ||= (request.query_string && request.GET[OVERRIDE_KEY])  ||
                         (request.body         && request.POST[OVERRIDE_KEY]) ||
                         ''
end