У меня есть приложение веб-сервера Rack для проверки в call(env)
предоставленной строки HTTP-запроса и немедленного возврата различных ответов (с соответствующим значением erb), если эти биты проверки не пройдены.
Я звоню по следующемуметод для получения ответа:
def respond(http_status, http_headers, html_body = '')
# Provide HTTP response
html_body = yield if block_given?
[http_status, http_headers, [html_body]]
end
, который я почерпнул из Интернета.
Затем я вызываю respond(...)
из разных точек в моем call(env)
методе, примерно так:
def call(env)
case blah
when '/'
if validation_a_fails
respond(invalid_a)
else
set up a variable for later use...
end
if validation_b_fails
respond(invalid_b)
else
set up another variable for later use...
end
if validation_c_fails
respond(invalid_c)
else
set up something else for later use...
end
else # not root url
respond(404_situation)
end
end
end
Я ожидал, что вызов respond(invalid_a)
немедленно завершит вызов метода.Однако это не так.Вместо этого выполняются остальные методы вызова.
Как я могу заставить respond(...)
немедленно вернуться в вызывающий браузер?