module ActionDispatch::Routing::Mapper::HttpHelpers

def redirect(*args, &block)

def redirect(*args, &block)
  options = args.last.is_a?(Hash) ? args.pop : {}
  path      = args.shift || block
  path_proc = path.is_a?(Proc) ? path : proc { |params| path % params }
  status    = options[:status] || 301
  lambda do |env|
    req = Request.new(env)
    params = [req.symbolized_path_parameters]
    params << req if path_proc.arity > 1
    uri = URI.parse(path_proc.call(*params))
    uri.scheme ||= req.scheme
    uri.host   ||= req.host
    uri.port   ||= req.port unless req.standard_port?
    body = %(<html><body>You are being <a href="#{ERB::Util.h(uri.to_s)}">redirected</a>.</body></html>)
    headers = {
      'Location' => uri.to_s,
      'Content-Type' => 'text/html',
      'Content-Length' => body.length.to_s
    }
    [ status, headers, [body] ]
  end
end