Capture helper без HTML-буфера - PullRequest
0 голосов
/ 31 мая 2018

У меня есть помощник вида, который оборачивает вызов блока в оператор 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

Есть идеи, как решить эту проблему?Можно ли проверить, что блок взят из шаблона или это чистый рубин?

...