erubis 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/{ChangeLog → CHANGES} +139 -6
  2. data/MIT-LICENSE +20 -0
  3. data/README.txt +20 -5
  4. data/benchmark/erubybench.rb +465 -229
  5. data/benchmark/erubybench.rhtml +39 -15
  6. data/benchmark/erubybench.yaml +126 -46
  7. data/bin/erubis +2 -2
  8. data/bin/notext +3 -3
  9. data/contrib/action_view_base_rb.patch +23 -0
  10. data/contrib/erubis +466 -308
  11. data/contrib/inline-require +2 -2
  12. data/doc-api/classes/ERB.html +101 -0
  13. data/doc-api/classes/Erubis.html +59 -6
  14. data/doc-api/classes/Erubis/ArrayEnhancer.html +12 -12
  15. data/doc-api/classes/Erubis/Basic/Converter.html +61 -57
  16. data/doc-api/classes/Erubis/BiPatternEnhancer.html +14 -14
  17. data/doc-api/classes/Erubis/CGenerator.html +60 -60
  18. data/doc-api/classes/Erubis/Context.html +125 -29
  19. data/doc-api/classes/Erubis/Converter.html +73 -22
  20. data/doc-api/classes/Erubis/Engine.html +55 -39
  21. data/doc-api/classes/Erubis/EscapeEnhancer.html +6 -6
  22. data/doc-api/classes/Erubis/Evaluator.html +19 -19
  23. data/doc-api/classes/Erubis/Generator.html +16 -10
  24. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +14 -14
  25. data/doc-api/classes/Erubis/{Helper.html → Helpers.html} +5 -6
  26. data/doc-api/classes/Erubis/Helpers/RailsHelper.html +296 -0
  27. data/doc-api/classes/Erubis/JavaGenerator.html +54 -54
  28. data/doc-api/classes/Erubis/JavascriptGenerator.html +60 -60
  29. data/doc-api/classes/Erubis/Main.html +42 -30
  30. data/doc-api/classes/Erubis/NoCodeEnhancer.html +5 -5
  31. data/doc-api/classes/Erubis/NoTextEnhancer.html +7 -7
  32. data/doc-api/classes/Erubis/OptimizedEruby.html +6 -6
  33. data/doc-api/classes/Erubis/OptimizedGenerator.html +72 -72
  34. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +6 -6
  35. data/doc-api/classes/Erubis/PI/Converter.html +28 -81
  36. data/doc-api/classes/Erubis/PI/Ec.html +6 -6
  37. data/doc-api/classes/Erubis/PI/Ejava.html +6 -6
  38. data/doc-api/classes/Erubis/PI/Ejavascript.html +6 -6
  39. data/doc-api/classes/Erubis/PI/Eperl.html +6 -6
  40. data/doc-api/classes/Erubis/PI/Ephp.html +6 -6
  41. data/doc-api/classes/Erubis/PI/Eruby.html +7 -7
  42. data/doc-api/classes/Erubis/PI/Escheme.html +6 -6
  43. data/doc-api/classes/Erubis/PI/TinyEruby.html +66 -79
  44. data/doc-api/classes/Erubis/PercentLineEnhancer.html +8 -8
  45. data/doc-api/classes/Erubis/PerlGenerator.html +54 -54
  46. data/doc-api/classes/Erubis/PhpGenerator.html +54 -54
  47. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +21 -21
  48. data/doc-api/classes/Erubis/PrintOutEnhancer.html +30 -30
  49. data/doc-api/classes/Erubis/RubyEvaluator.html +12 -12
  50. data/doc-api/classes/Erubis/RubyGenerator.html +9 -9
  51. data/doc-api/classes/Erubis/SimplifyEnhancer.html +7 -6
  52. data/doc-api/classes/Erubis/StdoutEnhancer.html +12 -12
  53. data/doc-api/classes/Erubis/StringBufferEnhancer.html +13 -13
  54. data/doc-api/classes/Erubis/TinyEruby.html +56 -68
  55. data/doc-api/classes/Erubis/XmlHelper.html +20 -23
  56. data/doc-api/created.rid +1 -1
  57. data/doc-api/files/{__/README_txt.html → README_txt.html} +35 -20
  58. data/doc-api/files/erubis/context_rb.html +2 -2
  59. data/doc-api/files/erubis/converter_rb.html +2 -2
  60. data/doc-api/files/erubis/engine/ec_rb.html +2 -2
  61. data/doc-api/files/erubis/engine/ejava_rb.html +2 -2
  62. data/doc-api/files/erubis/engine/ejavascript_rb.html +2 -2
  63. data/doc-api/files/erubis/engine/enhanced_rb.html +2 -2
  64. data/doc-api/files/erubis/engine/eperl_rb.html +2 -2
  65. data/doc-api/files/erubis/engine/ephp_rb.html +2 -2
  66. data/doc-api/files/erubis/engine/eruby_rb.html +2 -3
  67. data/doc-api/files/erubis/engine/escheme_rb.html +2 -2
  68. data/doc-api/files/erubis/engine/optimized_rb.html +2 -2
  69. data/doc-api/files/erubis/engine_rb.html +2 -2
  70. data/doc-api/files/erubis/enhancer_rb.html +2 -2
  71. data/doc-api/files/erubis/error_rb.html +2 -2
  72. data/doc-api/files/erubis/evaluator_rb.html +2 -2
  73. data/doc-api/files/erubis/generator_rb.html +2 -2
  74. data/doc-api/files/erubis/helper_rb.html +2 -2
  75. data/doc-api/files/erubis/{helper/rails_rb.html → helpers/rails_helper_rb.html} +6 -31
  76. data/doc-api/files/erubis/local-setting_rb.html +2 -2
  77. data/doc-api/files/erubis/main_rb.html +4 -2
  78. data/doc-api/files/erubis/tiny_rb.html +2 -2
  79. data/doc-api/files/erubis_rb.html +2 -2
  80. data/doc-api/fr_class_index.html +3 -3
  81. data/doc-api/fr_file_index.html +2 -2
  82. data/doc-api/fr_method_index.html +142 -147
  83. data/doc-api/index.html +1 -1
  84. data/doc/users-guide.html +387 -218
  85. data/lib/erubis.rb +21 -25
  86. data/lib/erubis/context.rb +34 -4
  87. data/lib/erubis/converter.rb +159 -115
  88. data/lib/erubis/engine.rb +29 -12
  89. data/lib/erubis/engine/ec.rb +2 -2
  90. data/lib/erubis/engine/ejava.rb +2 -2
  91. data/lib/erubis/engine/ejavascript.rb +2 -2
  92. data/lib/erubis/engine/enhanced.rb +2 -2
  93. data/lib/erubis/engine/eperl.rb +2 -2
  94. data/lib/erubis/engine/ephp.rb +2 -2
  95. data/lib/erubis/engine/eruby.rb +5 -6
  96. data/lib/erubis/engine/escheme.rb +2 -2
  97. data/lib/erubis/engine/optimized.rb +2 -2
  98. data/lib/erubis/enhancer.rb +33 -7
  99. data/lib/erubis/error.rb +2 -2
  100. data/lib/erubis/evaluator.rb +2 -2
  101. data/lib/erubis/generator.rb +6 -3
  102. data/lib/erubis/helper.rb +6 -23
  103. data/lib/erubis/helpers/rails_helper.rb +202 -0
  104. data/lib/erubis/local-setting.rb +4 -4
  105. data/lib/erubis/main.rb +90 -35
  106. data/lib/erubis/tiny.rb +57 -52
  107. data/test/assert-text-equal.rb +2 -2
  108. data/test/test-engines.rb +5 -5
  109. data/test/test-erubis.rb +173 -63
  110. data/test/test-main.rb +135 -27
  111. data/test/test-notext.rb +2 -2
  112. data/test/test.rb +2 -2
  113. data/test/testutil.rb +2 -2
  114. metadata +16 -16
  115. data/LGPL +0 -504
  116. data/doc-api/classes/Erubis/Helper/CachedRailsTemplate.html +0 -198
  117. data/doc-api/classes/Erubis/Helper/RailsTemplate.html +0 -366
  118. data/lib/erubis/helper/rails.rb +0 -159
@@ -1,7 +1,7 @@
1
1
  ##
2
- ## $Rev: 37 $
3
- ## $Release: 2.1.0 $
4
- ## copyright(c) 2006 kuwata-lab all rights reserved.
2
+ ## $Rev: 60 $
3
+ ## $Release: 2.2.0 $
4
+ ## copyright(c) 2006-2007 kuwata-lab all rights reserved.
5
5
  ##
6
6
 
7
7
  require "#{File.dirname(__FILE__)}/test.rb"
@@ -41,20 +41,22 @@ class ErubisTest < Test::Unit::TestCase
41
41
  end
42
42
  end if @chomp
43
43
 
44
- if @testopt != 'load_file'
45
- if @klass == Erubis::TinyEruby
46
- eruby = @klass.new(@input)
47
- else
48
- eruby = @klass.new(@input, @options)
49
- end
50
- else
44
+ if @testopt == 'load_file'
51
45
  filename = "tmp.#{@name}.eruby"
52
46
  begin
53
47
  File.open(filename, 'w') { |f| f.write(@input) }
54
48
  eruby = @klass.load_file(filename, @options)
55
49
  ensure
50
+ cachename = filename + '.cache'
51
+ File.unlink(cachename) if test(?f, cachename)
56
52
  File.unlink(filename) if test(?f, filename)
57
53
  end
54
+ else
55
+ if @klass == Erubis::TinyEruby
56
+ eruby = @klass.new(@input)
57
+ else
58
+ eruby = @klass.new(@input, @options)
59
+ end
58
60
  end
59
61
  assert_text_equal(@src, eruby.src)
60
62
 
@@ -96,6 +98,62 @@ class ErubisTest < Test::Unit::TestCase
96
98
  end
97
99
  end
98
100
 
101
+
102
+ def test_load_file_cache1
103
+ @input = <<END
104
+ <ul>
105
+ <% for item in @list %>
106
+ <li><%= item %></li>
107
+ <% end %>
108
+ </ul>
109
+ END
110
+ @src = <<END
111
+ _buf = ''; _buf << '<ul>
112
+ '; for item in @list
113
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
114
+ '; end
115
+ _buf << '</ul>
116
+ ';
117
+ _buf.to_s
118
+ END
119
+ @klass = Erubis::Eruby
120
+ filename = 'tmp.load_file_timestamp1'
121
+ cachename = filename + '.cache'
122
+ begin
123
+ File.open(filename, 'w') { |f| f.write(@input) }
124
+ assert_block() { !test(?f, cachename) }
125
+ engine = @klass.load_file(filename)
126
+ assert_block() { test(?f, cachename) }
127
+ assert_block() { File.mtime(filename) <= File.mtime(cachename) }
128
+ assert_text_equal(@src, engine.src)
129
+ #
130
+ input2 = @input.gsub(/ul>/, 'ol>')
131
+ src2 = @src.gsub(/ul>/, 'ol>')
132
+ mtime = File.mtime(filename)
133
+ File.open(filename, 'w') { |f| f.write(input2) }
134
+ t1 = Time.now()
135
+ sleep(1)
136
+ t2 = Time.now()
137
+ File.utime(t1, t1, filename)
138
+ File.utime(t2, t2, cachename)
139
+ assert_block('cache should be newer') { File.mtime(filename) < File.mtime(cachename) }
140
+ engine = @klass.load_file(filename)
141
+ assert_block('cache should be newer') { File.mtime(filename) < File.mtime(cachename) }
142
+ assert_text_equal(@src, engine.src)
143
+ #
144
+ File.utime(t2, t2, filename)
145
+ File.utime(t1, t1, cachename)
146
+ assert_block('cache should be older') { File.mtime(filename) > File.mtime(cachename) }
147
+ engine = @klass.load_file(filename)
148
+ assert_block('cache should be newer') { File.mtime(filename) <= File.mtime(cachename) }
149
+ assert_text_equal(src2, engine.src)
150
+ ensure
151
+ File.unlink(cachename) if File.file?(cachename)
152
+ File.unlink(filename) if File.file?(filename)
153
+ end
154
+ end
155
+
156
+
99
157
  end
100
158
 
101
159
  __END__
@@ -106,14 +164,14 @@ __END__
106
164
  <li><%= item %></li>
107
165
  <% end %>
108
166
  </ul>
109
- src: |
110
- _buf = []; _buf << '<ul>
167
+ src: &basic1_src|
168
+ _buf = ''; _buf << '<ul>
111
169
  '; for item in list
112
170
  _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
113
171
  '; end
114
172
  _buf << '</ul>
115
173
  ';
116
- _buf.join
174
+ _buf.to_s
117
175
  output: &basic1_output|
118
176
  <ul>
119
177
  <li><aaa></li>
@@ -133,7 +191,7 @@ __END__
133
191
  <% end %>
134
192
  </ul>
135
193
  src: |
136
- _buf = []; _buf << '<ul>
194
+ _buf = ''; _buf << '<ul>
137
195
  '; i = 0
138
196
  for item in list
139
197
  i += 1
@@ -142,7 +200,7 @@ __END__
142
200
  '; end
143
201
  _buf << '</ul>
144
202
  ';
145
- _buf.join
203
+ _buf.to_s
146
204
  output: *basic1_output
147
205
  # <ul>
148
206
  # <li><aaa></li>
@@ -158,12 +216,12 @@ __END__
158
216
  i += 1 %><li><%= item %></li><% end %>
159
217
  </ul>
160
218
  src: |
161
- _buf = []; _buf << '<ul>'; i = 0
219
+ _buf = ''; _buf << '<ul>'; i = 0
162
220
  for item in list
163
221
  i += 1 ; _buf << '<li>'; _buf << ( item ).to_s; _buf << '</li>'; end ; _buf << '
164
222
  '; _buf << '</ul>
165
223
  ';
166
- _buf.join
224
+ _buf.to_s
167
225
  output: |
168
226
  <ul><li><aaa></li><li>b&b</li><li>"ccc"</li>
169
227
  </ul>
@@ -178,13 +236,13 @@ __END__
178
236
  <% end %>
179
237
  </ul>
180
238
  src: |
181
- _buf = []; _buf << '<ul>
239
+ _buf = ''; _buf << '<ul>
182
240
  '; for item in @list
183
241
  _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
184
242
  '; end
185
243
  _buf << '</ul>
186
244
  ';
187
- _buf.join
245
+ _buf.to_s
188
246
  output: *basic1_output
189
247
 
190
248
  ##
@@ -201,7 +259,7 @@ __END__
201
259
  <% end %>
202
260
  </ul>
203
261
  src: |
204
- _buf = []; _buf << '<ul>
262
+ _buf = ''; _buf << '<ul>
205
263
  ';
206
264
  for item in list
207
265
 
@@ -212,7 +270,7 @@ __END__
212
270
  '; end
213
271
  _buf << '</ul>
214
272
  ';
215
- _buf.join
273
+ _buf.to_s
216
274
  output: |
217
275
  <ul>
218
276
  <li> : <aaa> </li>
@@ -229,13 +287,26 @@ __END__
229
287
  b = "\""
230
288
  c = '\''
231
289
  src: |
232
- _buf = []; _buf << 'a = "\'"
290
+ _buf = ''; _buf << 'a = "\'"
233
291
  b = "\\""
234
292
  c = \'\\\'\'
235
293
  ';
236
- _buf.join
294
+ _buf.to_s
237
295
  output: *quotation1_input
238
296
 
297
+ ##
298
+ - name: minus1
299
+ desc: '<%- -%>'
300
+ class: Eruby
301
+ input: |
302
+ <ul>
303
+ <%- for item in list -%>
304
+ <li><%= item -%></li>
305
+ <% end -%>
306
+ </ul>
307
+ src: *basic1_src
308
+ output: *basic1_output
309
+
239
310
  ##
240
311
  - name: pattern1
241
312
  options:
@@ -247,13 +318,13 @@ __END__
247
318
  [@ end @]
248
319
  </ul>
249
320
  src: |
250
- _buf = []; _buf << '<ul>
321
+ _buf = ''; _buf << '<ul>
251
322
  '; for item in list
252
323
  _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
253
324
  '; end
254
325
  _buf << '</ul>
255
326
  ';
256
- _buf.join
327
+ _buf.to_s
257
328
  output: *basic1_output
258
329
  # <ul>
259
330
  # <li><aaa></li>
@@ -272,13 +343,13 @@ __END__
272
343
  <!--% end %-->
273
344
  </ul>
274
345
  src: |
275
- _buf = []; _buf << '<ul>
346
+ _buf = ''; _buf << '<ul>
276
347
  '; for item in list
277
348
  _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
278
349
  '; end
279
350
  _buf << '</ul>
280
351
  ';
281
- _buf.join
352
+ _buf.to_s
282
353
  output: *basic1_output
283
354
  # <ul>
284
355
  # <li><aaa></li>
@@ -297,13 +368,13 @@ __END__
297
368
  # <% end %>
298
369
  # </ul>
299
370
  src: |
300
- _buf = []; _buf << '<ul>
371
+ _buf = ''; _buf << '<ul>
301
372
  '; _buf << ' '; for item in list ; _buf << '
302
373
  '; _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
303
374
  '; _buf << ' '; end ; _buf << '
304
375
  '; _buf << '</ul>
305
376
  ';
306
- _buf.join
377
+ _buf.to_s
307
378
  output: |
308
379
  <ul>
309
380
  ^
@@ -349,7 +420,7 @@ __END__
349
420
  # _buf << "</ul>\n"
350
421
  # _buf
351
422
  src:
352
- "_buf = []; _buf << '<ul>\r\n'; for item in list \r\n _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>\r\n'; end \r\n _buf << '</ul>\r\n';\n_buf.join\n"
423
+ "_buf = ''; _buf << '<ul>\r\n'; for item in list \r\n _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>\r\n'; end \r\n _buf << '</ul>\r\n';\n_buf.to_s\n"
353
424
  #output: |
354
425
  # <ul>
355
426
  # <li><aaa></li>
@@ -368,11 +439,11 @@ __END__
368
439
  <li>foo</li>
369
440
  </ul>
370
441
  src: |
371
- _buf = []; _buf << '<ul>
442
+ _buf = ''; _buf << '<ul>
372
443
  <li>foo</li>
373
444
  </ul>
374
445
  ';
375
- _buf.join
446
+ _buf.to_s
376
447
  output: *nomatch1
377
448
 
378
449
  ##
@@ -383,11 +454,11 @@ __END__
383
454
  <%= str %>
384
455
  <%== str %>
385
456
  src: |
386
- _buf = []; str = '<>&"'
457
+ _buf = ''; str = '<>&"'
387
458
  _buf << Erubis::XmlHelper.escape_xml( str ); _buf << '
388
459
  '; _buf << ( str ).to_s; _buf << '
389
460
  ';
390
- _buf.join
461
+ _buf.to_s
391
462
  output: |
392
463
  &lt;&gt;&amp;&quot;
393
464
  <>&"
@@ -403,14 +474,14 @@ __END__
403
474
  <% end %>
404
475
  </pre>
405
476
  src: |
406
- _buf = []; _buf << '<pre>
477
+ _buf = ''; _buf << '<pre>
407
478
  '; for item in list
408
479
  _buf << ' '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
409
480
  '; _buf << ' '; _buf << ( item ).to_s; _buf << '
410
481
  '; end
411
482
  _buf << '</pre>
412
483
  ';
413
- _buf.join
484
+ _buf.to_s
414
485
  output: |
415
486
  <pre>
416
487
  &lt;aaa&gt;
@@ -433,13 +504,13 @@ __END__
433
504
  <%==== item["var#{n}"] %>
434
505
  <% end %>
435
506
  src: |
436
- _buf = []; for item in list
507
+ _buf = ''; for item in list
437
508
  _buf << ' '; _buf << Erubis::XmlHelper.escape_xml( item["var#{n}"] ); _buf << '
438
509
  '; _buf << ' '; _buf << ( item["var#{n}"] ).to_s; _buf << '
439
510
  '; _buf << ' '; $stderr.puts("*** debug: item[\"var\#{n}\"]=#{(item["var#{n}"]).inspect}"); _buf << '
440
511
  '; _buf << ' '; _buf << '
441
512
  '; end
442
- _buf.join
513
+ _buf.to_s
443
514
  output: |
444
515
 
445
516
  ##
@@ -466,13 +537,13 @@ __END__
466
537
  <% end %>
467
538
  </ul>
468
539
  src: |
469
- @_buf = _buf = []; _buf << '<ul>
540
+ @_buf = _buf = ''; _buf << '<ul>
470
541
  '; for item in list
471
542
  _buf << ' <li>'; print item ; _buf << '</li>
472
543
  '; end
473
544
  _buf << '</ul>
474
545
  ';
475
- _buf.join
546
+ _buf.to_s
476
547
  output: *basic1_output
477
548
  # <ul>
478
549
  # <li><aaa></li>
@@ -536,6 +607,19 @@ __END__
536
607
  - "</ul>\n"
537
608
 
538
609
  ##
610
+ - name: arraybuffer1
611
+ class: ArrayBufferEruby
612
+ input: *basic1_input
613
+ src: |
614
+ _buf = []; _buf << '<ul>
615
+ '; for item in list
616
+ _buf << ' <li>'; _buf << ( item ).to_s; _buf << '</li>
617
+ '; end
618
+ _buf << '</ul>
619
+ ';
620
+ _buf.join
621
+ output: *basic1_output
622
+
539
623
  - name: stringbuffer1
540
624
  class: StringBufferEruby
541
625
  input: *basic1_input
@@ -551,7 +635,7 @@ __END__
551
635
  '; end
552
636
  _buf << '</ul>
553
637
  ';
554
- _buf
638
+ _buf.to_s
555
639
  output: *basic1_output
556
640
  # <ul>
557
641
  # <li><aaa></li>
@@ -564,14 +648,15 @@ __END__
564
648
  class: NoTextEruby
565
649
  input: *basic1_input
566
650
  src: |
567
- _buf = [];
651
+ _buf = '';
568
652
  for item in list
569
653
  _buf << ( item ).to_s;
570
654
  end
571
655
 
572
- _buf.join
656
+ _buf.to_s
573
657
  output: '<aaa>b&b"ccc"'
574
658
 
659
+
575
660
  ##
576
661
  - name: nocode1
577
662
  class: NoCodeEruby
@@ -597,7 +682,7 @@ __END__
597
682
  <% end %>
598
683
  </ul>
599
684
  src: |
600
- _buf = []; _buf << '<ul>
685
+ _buf = ''; _buf << '<ul>
601
686
  '; for item in list ; _buf << '
602
687
  <li>
603
688
  '; _buf << ( item ).to_s; _buf << '
@@ -605,7 +690,7 @@ __END__
605
690
  '; end ; _buf << '
606
691
  </ul>
607
692
  ';
608
- _buf.join
693
+ _buf.to_s
609
694
  output: |
610
695
  <ul>
611
696
  ^
@@ -633,11 +718,11 @@ __END__
633
718
  [= item =] = [== item =]
634
719
  <% end %>
635
720
  src: |
636
- _buf = []; for item in list
721
+ _buf = ''; for item in list
637
722
  _buf << ' '; _buf << ( item ).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
638
723
  '; _buf << ' '; _buf << ( item ).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '
639
724
  '; end
640
- _buf.join
725
+ _buf.to_s
641
726
  output: |4
642
727
  <aaa> % &lt;aaa&gt;
643
728
  <aaa> = &lt;aaa&gt;
@@ -656,11 +741,11 @@ __END__
656
741
  ${item} = ${=item}
657
742
  <% end %>
658
743
  src: |
659
- _buf = []; for item in list
744
+ _buf = ''; for item in list
660
745
  _buf << ' '; _buf << (item).to_s; _buf << ' % '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
661
746
  '; _buf << ' '; _buf << (item).to_s; _buf << ' = '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '
662
747
  '; end
663
- _buf.join
748
+ _buf.to_s
664
749
  output: |4
665
750
  <aaa> % &lt;aaa&gt;
666
751
  <aaa> = &lt;aaa&gt;
@@ -687,7 +772,7 @@ __END__
687
772
  % spaced percent
688
773
  </pre>
689
774
  src: |
690
- _buf = []; _buf << '<table>
775
+ _buf = ''; _buf << '<table>
691
776
  '; for item in list
692
777
  _buf << ' <tr>
693
778
  <td>'; _buf << ( item ).to_s; _buf << '</td>
@@ -700,7 +785,7 @@ __END__
700
785
  '; _buf << ' % spaced percent
701
786
  </pre>
702
787
  ';
703
- _buf.join
788
+ _buf.to_s
704
789
  output: |
705
790
  <table>
706
791
  <tr>
@@ -740,13 +825,13 @@ __END__
740
825
 
741
826
  def ordered_list(list)
742
827
 
743
- _buf = []; _buf << '<ol>
828
+ _buf = ''; _buf << '<ol>
744
829
  '; for item in list
745
830
  _buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
746
831
  '; end
747
832
  _buf << '</ol>
748
833
  ';
749
- _buf.join
834
+ _buf.to_s
750
835
  end
751
836
  output: |
752
837
  <ol>
@@ -888,13 +973,13 @@ __END__
888
973
  <% end %>
889
974
  </ul>
890
975
  src: |
891
- _buf = []; _buf << '<ul>
976
+ _buf = ''; _buf << '<ul>
892
977
  '; for item in list ; _buf << '
893
978
  <li>'; _buf << ( item ).to_s; _buf << '</li>
894
979
  '; end ; _buf << '
895
980
  </ul>
896
981
  ';
897
- _buf.join
982
+ _buf.to_s
898
983
  output: |
899
984
  <ul>
900
985
  ^
@@ -917,13 +1002,13 @@ __END__
917
1002
  <% end %>
918
1003
  </ul>
919
1004
  src: |
920
- _buf = []; _buf << '<ul>
1005
+ _buf = ''; _buf << '<ul>
921
1006
  '; for item in @list ; _buf << '
922
1007
  <li>'; _buf << ( item ).to_s; _buf << '</li>
923
1008
  '; end ; _buf << '
924
1009
  </ul>
925
1010
  ';
926
- _buf.join
1011
+ _buf.to_s
927
1012
  output: |
928
1013
  <ul>
929
1014
  ^
@@ -947,14 +1032,14 @@ __END__
947
1032
  <?rb end ?>
948
1033
  </ul>
949
1034
  src: &src_pi1|
950
- _buf = []; _buf << '<ul>
1035
+ _buf = ''; _buf << '<ul>
951
1036
  '; for item in @list
952
1037
  _buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '</li>
953
1038
  <li>'; _buf << ( item ).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
954
1039
  '; end
955
1040
  _buf << '</ul>
956
1041
  ';
957
- _buf.join
1042
+ _buf.to_s
958
1043
  output: &output_pi1|
959
1044
  <ul>
960
1045
  <li>&lt;aaa&gt; / <aaa></li>
@@ -972,14 +1057,14 @@ __END__
972
1057
  testopt: evaluate
973
1058
  input: *input_pi1
974
1059
  src: |
975
- _buf = []; _buf << '<ul>
1060
+ _buf = ''; _buf << '<ul>
976
1061
  '; for item in @list
977
1062
  _buf << ' <li>'; _buf << (item).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
978
1063
  <li>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << ' / '; _buf << ( item ).to_s; _buf << '</li>
979
1064
  '; end
980
1065
  _buf << '</ul>
981
1066
  ';
982
- _buf.join
1067
+ _buf.to_s
983
1068
  output: |
984
1069
  <ul>
985
1070
  <li><aaa> / &lt;aaa&gt;</li>
@@ -1029,7 +1114,7 @@ __END__
1029
1114
 
1030
1115
  def show(list)
1031
1116
 
1032
- _buf = []; _buf << '<ul>
1117
+ _buf = ''; _buf << '<ul>
1033
1118
  '; for item in list
1034
1119
  _buf << ( item
1035
1120
  ).to_s; end
@@ -1039,7 +1124,7 @@ __END__
1039
1124
 
1040
1125
  _buf << '</ul>
1041
1126
  ';
1042
- _buf.join
1127
+ _buf.to_s
1043
1128
 
1044
1129
  end
1045
1130
  show(@list)
@@ -1048,3 +1133,28 @@ __END__
1048
1133
  <ul>
1049
1134
  <aaa>b&b"ccc"</ul>
1050
1135
 
1136
+
1137
+ - name: pitiny1
1138
+ class: PI::TinyEruby
1139
+ testopt: evaluate
1140
+ input: |
1141
+ <ul>
1142
+ <?rb for item in @list ?>
1143
+ <li>@{item}@ / @!{item}@</li>
1144
+ <?rb end ?>
1145
+ </ul>
1146
+ src: |
1147
+ _buf = ''; _buf << '<ul>
1148
+ '; for item in @list
1149
+ _buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '</li>
1150
+ '; end
1151
+ _buf << '</ul>
1152
+ ';
1153
+ _buf.to_s
1154
+ output: |
1155
+ <ul>
1156
+ <li>&lt;aaa&gt; / <aaa></li>
1157
+ <li>b&amp;b / b&b</li>
1158
+ <li>&quot;ccc&quot; / "ccc"</li>
1159
+ </ul>
1160
+