summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormakoto kuwata <kwa@kuwata-lab.com>2011-02-22 19:45:09 +0900
committermakoto kuwata <kwa@kuwata-lab.com>2011-02-22 19:45:33 +0900
commitd735e2255ce102719cff1530fb6c138a76c62e4e (patch)
tree6d5461a6715477dacd928c451ab8b7c26462fc4f
parentd75b89a389e05424b91983a652596522a25baf5b (diff)
downloaderubis-d735e2255ce102719cff1530fb6c138a76c62e4e.tar.gz
[enhance] add new option ':bufname' to specify buffer variable name
-rw-r--r--lib/erubis/engine/eruby.rb11
-rw-r--r--lib/erubis/enhancer.rb22
-rw-r--r--test/test-engines.rb25
3 files changed, 42 insertions, 16 deletions
diff --git a/lib/erubis/engine/eruby.rb b/lib/erubis/engine/eruby.rb
index 20a74fc..63828be 100644
--- a/lib/erubis/engine/eruby.rb
+++ b/lib/erubis/engine/eruby.rb
@@ -21,6 +21,7 @@ module Erubis
def init_generator(properties={})
super
@escapefunc ||= "Erubis::XmlHelper.escape_xml"
+ @bufname = properties[:bufname] || "_buf"
end
def self.supported_properties() # :nodoc:
@@ -37,12 +38,12 @@ module Erubis
#--
#def add_preamble(src)
- # src << "_buf = [];"
+ # src << "#{@bufname} = [];"
#end
#++
def add_text(src, text)
- src << " _buf << '" << escape_text(text) << "';" unless text.empty?
+ src << " #{@bufname} << '" << escape_text(text) << "';" unless text.empty?
end
def add_stmt(src, code)
@@ -52,11 +53,11 @@ module Erubis
end
def add_expr_literal(src, code)
- src << ' _buf << (' << code << ').to_s;'
+ src << " #{@bufname} << (" << code << ').to_s;'
end
def add_expr_escaped(src, code)
- src << ' _buf << ' << escaped_expr(code) << ';'
+ src << " #{@bufname} << " << escaped_expr(code) << ';'
end
def add_expr_debug(src, code)
@@ -67,7 +68,7 @@ module Erubis
#--
#def add_postamble(src)
- # src << "\n_buf.join\n"
+ # src << "\n#{@bufname}.join\n"
#end
#++
diff --git a/lib/erubis/enhancer.rb b/lib/erubis/enhancer.rb
index d9b22a3..b6864eb 100644
--- a/lib/erubis/enhancer.rb
+++ b/lib/erubis/enhancer.rb
@@ -67,7 +67,7 @@ module Erubis
end
def add_preamble(src)
- src << "_buf = $stdout;"
+ src << "#{@bufname} = $stdout;"
end
def add_postamble(src)
@@ -162,12 +162,12 @@ module Erubis
end
def add_preamble(src)
- src << "_buf = [];"
+ src << "#{@bufname} = [];"
end
def add_postamble(src)
src << "\n" unless src[-1] == ?\n
- src << "_buf\n"
+ src << "#{@bufname}\n"
end
end
@@ -208,12 +208,12 @@ module Erubis
end
def add_preamble(src)
- src << "_buf = '';"
+ src << "#{@bufname} = '';"
end
def add_postamble(src)
src << "\n" unless src[-1] == ?\n
- src << "_buf.to_s\n"
+ src << "#{@bufname}.to_s\n"
end
end
@@ -231,12 +231,12 @@ module Erubis
end
def add_preamble(src)
- src << "_buf = StringIO.new;"
+ src << "#{@bufname} = StringIO.new;"
end
def add_postamble(src)
src << "\n" unless src[-1] == ?\n
- src << "_buf.string\n"
+ src << "#{@bufname}.string\n"
end
end
@@ -254,12 +254,12 @@ module Erubis
end
def add_preamble(src)
- src << "_erbout = _buf = '';"
+ src << "_erbout = #{@bufname} = '';"
end
def add_postamble(src)
src << "\n" unless src[-1] == ?\n
- src << "_buf.to_s\n"
+ src << "#{@bufname}.to_s\n"
end
end
@@ -654,9 +654,9 @@ module Erubis
#src << " _buf << %Q`" << text << "`;"
if text[-1] == ?\n
text[-1] = "\\n"
- src << " _buf << %Q`" << text << "`\n"
+ src << " #{@bufname} << %Q`" << text << "`\n"
else
- src << " _buf << %Q`" << text << "`;"
+ src << " #{@bufname} << %Q`" << text << "`;"
end
end
diff --git a/test/test-engines.rb b/test/test-engines.rb
index 689daa6..b93f880 100644
--- a/test/test-engines.rb
+++ b/test/test-engines.rb
@@ -67,6 +67,31 @@ __END__
';
_buf.to_s
##
+- name: ruby2_options
+ lang: ruby
+ class: Eruby
+ options: { :bufname: '@_out_buf' }
+ input: |
+ <table>
+ <% for item in @items %>
+ <tr>
+ <td><%= i+1 %></td>
+ <td><%== list %></td>
+ </tr>
+ <% end %>
+ </table>
+ expected: |
+ @_out_buf = ''; @_out_buf << '<table>
+ '; for item in @items
+ @_out_buf << ' <tr>
+ <td>'; @_out_buf << ( i+1 ).to_s; @_out_buf << '</td>
+ <td>'; @_out_buf << Erubis::XmlHelper.escape_xml( list ); @_out_buf << '</td>
+ </tr>
+ '; end
+ @_out_buf << '</table>
+ ';
+ @_out_buf.to_s
+##
- name: php1
lang: php
class: Ephp