给定字符串,确定它是否来自.html_safe调用?

时间:2018-12-17 22:14:44

标签: ruby-on-rails ruby

在Ruby on Rails中,给定一个字符串,是否可以确定是否已在该字符串上调用.html_safe

提出问题的原因:我想编写一个控制器单元测试,以验证是否在特定字符串上未调用html_safe,以证明该字符串稍后被呈现到在视图的页面中,Rails会转义字符串(避免可能的XSS漏洞)。

我意识到我可以继续在测试中实际渲染页面,然后检查渲染的页面主体,但是我想知道是否还有更直接的方法吗?

2 个答案:

答案 0 :(得分:3)

.html_safe实际上不是返回类型String的对象,而是返回类型ActiveSupport::SafeBuffer(是String的派生类)的对象。

因此,致电:

my_string.is_a?(ActiveSupport::SafeBuffer)

仅当字符串不是调用false的结果时,

才返回.html_string

答案 1 :(得分:2)

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