class Utopia::Redirection::Errors
A middleware which performs internal redirects based on error status codes.
Public Class Methods
new(app, codes = {})
click to toggle source
@param codes [Hash<Integer,String>] The redirection path for a given error code.
# File lib/utopia/redirection.rb, line 44 def initialize(app, codes = {}) @app = app @codes = codes end
Public Instance Methods
call(env)
click to toggle source
# File lib/utopia/redirection.rb, line 61 def call(env) response = @app.call(env) if unhandled_error?(response) && location = @codes[response[0]] error_request = env.merge(Rack::PATH_INFO => location, Rack::REQUEST_METHOD => Rack::GET) error_response = @app.call(error_request) if error_response[0] >= 400 raise RequestFailure.new(env[Rack::PATH_INFO], response[0], location, error_response[0]) else # Feed the error code back with the error document: error_response[0] = response[0] return error_response end else return response end end
freeze()
click to toggle source
Calls superclass method
# File lib/utopia/redirection.rb, line 49 def freeze return self if frozen? @codes.freeze super end
unhandled_error?(response)
click to toggle source
# File lib/utopia/redirection.rb, line 57 def unhandled_error?(response) response[0] >= 400 && response[1].empty? end