Skip to content

Instantly share code, notes, and snippets.

@serradura
Created December 13, 2011 03:16
Show Gist options
  • Save serradura/1470354 to your computer and use it in GitHub Desktop.
Save serradura/1470354 to your computer and use it in GitHub Desktop.
Rack Middleware
require 'poc'
use UrlEncodedParametersEliminator
run App.new
require 'rubygems'
require 'rack'
require 'ruby-debug'
class UrlEncodedParametersEliminator
def initialize(app, param='test')
@app = app
@param = param
end
def call(env)
@env = env
status, headers, body = @app.call(@env)
if @env["REQUEST_METHOD"] == "GET" && request_uri.include?(@param)
uri = request_uri.gsub(pattern, '')
uri.sub!(/\?$/, '')
response(status, headers, body, uri)
else
[status, headers, body]
end
end
private
def request_uri
@request_uri ||= @env['REQUEST_URI']
end
def response(status, headers, body, uri)
new_response = Rack::Response.new(body, status, headers)
new_response.redirect(uri)
new_response.finish
end
def pattern
Regexp.new("&?#{@param}[^&]*&?")
end
end
class App
def call(env)
[200, {'Content-Type' => 'text/plain'}, ['Hello Middleware']]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment