Как пометить строку как HTML-сейф в Синатре 2 и Хамле 5 - PullRequest
0 голосов
/ 02 февраля 2019

Предположим, в тысяче мест в сотнях представлений я хочу использовать сотню различных методов, большинство из которых возвращают простой текст, но некоторые возвращают (гарантированно безопасно) html:

def colorized_alert_status(foo)
  if foo
    return "<span class='red'>Alert!</span>".html_safe
  else
    return "<span class='green'>no problem</span>".html_safe
  end
end

Так какнет встроенного метода html_safe в Sinatra / Haml, есть ли способ пометить саму строку как html_safe, как в Rails, чтобы ее можно было правильно отобразить (как и все остальное) с помощью =?

%p
  = colorized_alert_status(var)

То, что я не хочу делать, это то, что в каждом представлении тысячи раз, каждый раз, когда я использую какой-либо метод, нужно помнить или проверять, какие методы ДЕЛАЮТ и НЕ возвращают html, поэтомуиспользовать ли = или !=

%p
  = some_methods_like_this()
  != other_methods_like_this()

ОДНО раз больше смысла, чтобы ОДИН раз за метод "устанавливал" возвращаемое значение как html_safe (или нет), чтобы решение принималось в методекод, а НЕ представление, которое вызывает метод каждый каждый раз, когда метод используется.

(Примечание: при отсутствии «правильного» решения (например, Rails) мы предваряем все имена методов, которые возвращают безопасныйHTML-строка с H_ для экзаменаple h_colorize_foo() так что, по крайней мере, при написании или просмотре Haml для представления, он дает некоторые указания на то, что нам = или! = для этого конкретного метода.Но это плохая замена для правильного подхода, такого как Rails, для пометки самой строки html_safe, и она не обрабатывает случаи, когда значение, возвращаемое методами, иногда является, а иногда нет html_safe.)

...