По заданной строке определите, является ли она вызовом .html_safe? - PullRequest
0 голосов
/ 18 декабря 2018

В Ruby on Rails, учитывая строку, можно ли определить, был ли вызван .html_safe для этой строки?

Причина вопроса: я хотел бы написатьмодульный тест контроллера, который проверяет, что html_safe имеет not , вызванный для определенной строки, чтобы доказать, что когда эта строка позже будет отображена на странице в представлении, Rails будет избегать строки (избегая возможных уязвимостей XSS).

Я понимаю, что вместо этого я мог бы на самом деле визуализировать страницу в своем тесте, а затем проверить визуализированное тело страницы, но мне интересно, есть ли более прямой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Там html_safe?:

s = 'foo'
s.html_safe? #=> false

s = 'foo'.html_safe
s.html_safe? #=> true

Обратите внимание, что ActiveSupport::SafeBuffer возвращается в небезопасное состояние, если вы вызываете "разрушительный" метод:

s = 'foo'.html_safe
s.html_safe?  #=> true
s.capitalize! #=> 'Foo'
s.html_safe?  #=> false
0 голосов
/ 18 декабря 2018

.html_safe фактически возвращает не объект типа String , а объект типа ActiveSupport :: SafeBuffer (который является производным классом String).

Следовательно, вызов:

my_string.is_a?(ActiveSupport::SafeBuffer)

вернет false только тогда, когда строка не является результатом вызова .html_string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...