def setup_redirection(status, uri)
case status
when Fixnum
if status < 300 || 400 <= status
raise ArgumentError, "unexpected status: #{status.inspect}"
end
status = "#{status} #{StatusMessage[status]}"
when String
unless /\A3\d\d(\z| )/ =~ status
raise ArgumentError, "unexpected status: #{status.inspect}"
end
if status.length == 3
status = "#{status} #{StatusMessage[status.to_i]}"
end
else
raise ArgumentError, "unexpected status: #{status.inspect}"
end
case uri
when URI
uri = @urigen.base_uri + uri if uri.relative?
when String
uri = URI.parse(uri)
uri = @urigen.base_uri + uri if uri.relative?
when Hash
uri = make_absolute_uri(uri)
else
raise ArgumentError, "unexpected uri: #{uri.inspect}"
end
@response.status_line = status
@response_header.set 'Location', uri.to_s
end