Sha256: 43c11a50b52d93c87270d156725525e780d04d781cb46cbc44b3dc5277b62e35
Contents?: true
Size: 1.61 KB
Versions: 1
Compression:
Stored size: 1.61 KB
Contents
module Circuit module Middleware # Raise if rewriting fails. class RewriteError < CircuitError ; end # Rewriter middleware # @example Use the middleware (in rackup) # use Rewriter do |script_name, path_info| # ["/pages", script_name+path_info] # end # @example Use the middleware with Rack::Request object (in rackup) # use Rewriter do |request| # ["/site/#{request.site.id}"+request.script_name, request.path_info] # end # @see http://rubydoc.info/gems/rack/Rack/Request Rack::Request documentation class Rewriter # @param [#call] app Rack app # @yield [script_name, path_info] `SCRIPT_NAME` and `PATH_INF`O values # @yield [Request] `Rack::Request` object # @yieldreturn [Array<String>] new `script_name` and `path_info` def initialize(app, &block) @app = app @block = block end # Executes the rewrite def call(env) begin request = ::Rack::Request.new(env) script_name, path_info, path = request.script_name, request.path_info, request.path env["SCRIPT_NAME"], env["PATH_INFO"] = @block.call(script_name, path_info) if script_name != env["SCRIPT_NAME"] or path_info != env["PATH_INFO"] ::Circuit.logger.info("[CIRCUIT] Rewriting: '#{path}'->'#{request.path}'") end rescue RewriteError => ex headline = "[CIRCUIT] Rewrite Error" ::Circuit.logger.error("%s: %s\n%s %s"%[headline, ex.message, " "*headline.length, ex.backtrace.first]) end @app.call(env) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
circuit-0.2.0 | lib/circuit/middleware/rewriter.rb |