@@ -185,6 +185,14 @@ module LiquidInterpolatable |
||
185 | 185 |
url |
186 | 186 |
end |
187 | 187 |
|
188 |
+ # Unescape (basic) HTML entities in a string |
|
189 |
+ # |
|
190 |
+ # This currently decodes the following entities only: "'", |
|
191 |
+ # """, "<", ">", "&", "&#dd;" and "&#xhh;". |
|
192 |
+ def unescape(input) |
|
193 |
+ CGI.unescapeHTML(input) rescue input |
|
194 |
+ end |
|
195 |
+ |
|
188 | 196 |
# Escape a string for use in XPath expression |
189 | 197 |
def to_xpath(string) |
190 | 198 |
subs = string.to_s.scan(/\G(?:\A\z|[^"]+|[^']+)/).map { |x| |
@@ -38,6 +38,16 @@ describe LiquidInterpolatable::Filters do |
||
38 | 38 |
end |
39 | 39 |
end |
40 | 40 |
|
41 |
+ describe 'unescape' do |
|
42 |
+ let(:agent) { Agents::InterpolatableAgent.new(name: "test") } |
|
43 |
+ |
|
44 |
+ it 'should unescape basic HTML entities' do |
|
45 |
+ agent.interpolation_context['something'] = ''<foo> & bar'' |
|
46 |
+ agent.options['cleaned'] = '{{ something | unescape }}' |
|
47 |
+ expect(agent.interpolated['cleaned']).to eq("'<foo> & bar'") |
|
48 |
+ end |
|
49 |
+ end |
|
50 |
+ |
|
41 | 51 |
describe 'to_xpath' do |
42 | 52 |
before do |
43 | 53 |
def @filter.to_xpath_roundtrip(string) |