module Roda::RodaPlugins::StatusHandler::ClassMethods

def freeze

Freeze the hash of status handlers so that there can be no thread safety issues at runtime.
def freeze
  opts[:status_handler].freeze
  super
end

def status_handler(code, opts=OPTS, &block)

Install the given block as a status handler for the given HTTP response code.
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