У меня есть помощник вида, который оборачивает вызов блока в оператор catch
, чтобы обеспечить правильное распределение некоторых throw
:
def if_reachable(&block)
catch(:unreachable) do
capture(&block)
end
end
Я могу использовать помощника в моих тонких видах, как это
- if_reachable do
| I won't be printed cause something is not reachable
- throw(:unreachable)
Важной частью является то, что, на мой взгляд, я не вижу текст I won't be printed...
.Вот причина использования Rails 'capture
helper.
Проблема в том, что я также хочу использовать тот же помощник и во встроенном ruby:
/ this is also inside a slim template
- data = if_reachable { my_service.load_data }
, и еслинет :unreachable
выброшено. Я хочу получить возвращаемое значение my_service.load_data
.
Проблема заключается в следующем: если шаблон не используется, помощник capture
всегда возвращает nil
и выбрасываетвозвращаемое значение my_service.load_data
Некоторые способы, которые я уже рассмотрел, будут
Написание отдельной вспомогательной функции: Было бы непонятно, какой помощник когдаиспользовать.
Оборачивать встроенный шаблонный код ruby в свои собственные вспомогательные методы и использовать return
: Было бы непонятно, если разработчик пытается использовать вспомогательный инструмент, и его нельзя использовать безотдельный вспомогательный метод
def my_helper
if_reachable do
return my_service.load_data
end
end
Есть идеи, как решить эту проблему?Можно ли проверить, что блок взят из шаблона или это чистый рубин?