module Roda::RodaPlugins::StatusHandler::ClassMethods
def freeze
def freeze opts[:status_handler].freeze super end
def status_handler(code, opts=OPTS, &block)
def status_handler(code, opts=OPTS, &block) # For backwards compatibility, pass request argument if block accepts argument arity = block.arity == 0 ? 0 : 1 handle_headers = case keep_headers = opts[:keep_headers] when nil, false CLEAR_HEADERS when Array if Rack.release >= '3' keep_headers = keep_headers.map(&:downcase) end lambda{|headers| headers.delete_if{|k,_| !keep_headers.include?(k)}} else raise RodaError, "Invalid :keep_headers option" end meth = define_roda_method(:"_roda_status_handler__#{code}", arity, &block) self.opts[:status_handler][code] = define_roda_method(:"_roda_status_handler_#{code}", 1) do |result| res = @_response res.status = result[0] handle_headers.call(res.headers) result.replace(_roda_handle_route{arity == 1 ? send(meth, @_request) : send(meth)}) end end