Skip to content

Commit 3a822bd

Browse files
add Html.unescape
1 parent d660c77 commit 3a822bd

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

lib/code/object/html.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ def self.call(**args)
3636
when "escape"
3737
sig(args) { Object.maybe }
3838
code_escape(*code_arguments.raw, **globals)
39+
when "unescape"
40+
sig(args) { Object.maybe }
41+
code_unescape(*code_arguments.raw, **globals)
3942
when "join"
4043
sig(args) { [Object.maybe, Object.maybe] }
4144
code_join(*code_arguments.raw, **globals)
@@ -103,7 +106,17 @@ def self.code_escape(value_or_function = nil, **globals)
103106
code_value = value_or_function.to_code
104107
end
105108

106-
String.new(CGI.escapeHTML(value.to_s))
109+
String.new(CGI.escapeHTML(code_value.to_s))
110+
end
111+
112+
def self.code_unescape(value_or_function = nil, **globals)
113+
if value_or_function.is_a?(Function)
114+
code_value = value_or_function.to_code.call(**globals)
115+
else
116+
code_value = value_or_function.to_code
117+
end
118+
119+
String.new(Nokogiri::HTML.fragment(code_value.to_s).text)
107120
end
108121

109122
def self.code_join(first = nil, second = nil, **globals)

spec/code_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,14 @@
424424
"Html.div { Html.raw(\"<span>ok</span>\") }.to_html",
425425
"'<div><span>ok</span></div>'"
426426
],
427+
[
428+
"Html.escape(\"<span>&</span>\")",
429+
"'&lt;span&gt;&amp;&lt;/span&gt;'"
430+
],
431+
[
432+
"Html.unescape(\"A&nbsp;&nbsp;B &amp; C\")",
433+
"'A  B & C'"
434+
],
427435
["[1, 2, 3].any?", "true"],
428436
["[1, 2, 3].any?(&:even?)", "true"],
429437
["[1, 2, 3].none?", "false"],

0 commit comments

Comments
 (0)