summaryrefslogtreecommitdiff
path: root/sample
diff options
context:
space:
mode:
authorseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-04 00:41:52 +0000
committerseki <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-05-04 00:41:52 +0000
commit41f3d4f164cb243de139e3ac8406618a33cc33a5 (patch)
tree9eb191b3b26dceefd1121c6c05ac30128144a5e7 /sample
parent82459e66a07f967ce20331d3cf1babcd1e7732c2 (diff)
sample/erb/erb4html.rb (ERB4Html) : add example of ERB#set_eoutvar. ERB4Html is an auto-quote ERB.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16283 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'sample')
-rw-r--r--sample/erb/erb4html.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/sample/erb/erb4html.rb b/sample/erb/erb4html.rb
new file mode 100644
index 0000000000..df0ffae44f
--- /dev/null
+++ b/sample/erb/erb4html.rb
@@ -0,0 +1,60 @@
+require 'erb'
+
+class ERB
+ class ERBString < String
+ def to_s; self; end
+
+ def erb_concat(s)
+ if self.class === s
+ concat(s)
+ else
+ concat(erb_quote(s))
+ end
+ end
+
+ def erb_quote(s); s; end
+ end
+end
+
+class ERB4Html < ERB
+ def self.quoted(s)
+ HtmlString.new(s)
+ end
+
+ class HtmlString < ERB::ERBString
+ def erb_quote(s)
+ ERB::Util::html_escape(s)
+ end
+ end
+
+ def set_eoutvar(compiler, eoutvar = '_erbout')
+ compiler.put_cmd = "#{eoutvar}.concat"
+ compiler.insert_cmd = "#{eoutvar}.erb_concat"
+
+ cmd = []
+ cmd.push "#{eoutvar} = ERB4Html.quoted('')"
+
+ compiler.pre_cmd = cmd
+
+ cmd = []
+ cmd.push(eoutvar)
+
+ compiler.post_cmd = cmd
+ end
+end
+
+if __FILE__ == $0
+ page = <<EOP
+<title><%=title%></title>
+<p><%=para%></p>
+EOP
+ erb = ERB4Html.new(page)
+
+ title = "<auto-quote>"
+ para = "&lt;quoted&gt;"
+ puts erb.result
+
+ title = "<auto-quote>"
+ para = ERB4Html.quoted("&lt;quoted&gt;")
+ puts erb.result
+end