tenjin 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,36 @@
1
1
  =begin
2
2
  = CHANGES
3
3
 
4
+
5
+ == Release 0.6.2 (2008-02-24)
6
+
7
+ * Rubinius supported.
8
+
9
+ * Changed to convert texts before expressions into spaces when
10
+ command-line option '-S' specified.
11
+
12
+ ex. hoge.rbhtml
13
+ <?rb for item in @list ?>
14
+ <p>${item}</p>
15
+ <?rb end ?>
16
+
17
+ ex. result of '-S'
18
+ ## 0.6.1
19
+ $ rbtenjin -S hoge.rbhtml
20
+ _buf = ''; for item in @list
21
+ escape((item).to_s);
22
+ end
23
+ _buf.to_s
24
+
25
+ ## 0.6.2
26
+ $ rbtenjin -S hoge.rbhtml
27
+ _buf = ''; for item in @list
28
+ escape((item).to_s);
29
+ end
30
+ _buf.to_s
31
+
32
+
33
+
4
34
  == Release 0.6.1 (2007-02-07)
5
35
 
6
36
  === Enhancements
data/README.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  = README
2
2
 
3
- release:: 0.6.1
3
+ release:: 0.6.2
4
4
  copyright:: copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
 
6
6
 
@@ -34,14 +34,16 @@ See doc/*.html for details.
34
34
 
35
35
  $ sudo gem install tenjin
36
36
 
37
- * Else download rbtenjin-0.6.1.tar.bz2 and just copy 'lib/tenjin.rb' and
37
+ * Else download rbtenjin-0.6.2.tar.bz2 and just copy 'lib/tenjin.rb' and
38
38
  'bin/rbtenjin' into proper directory.
39
39
 
40
- $ tar xjf rbtenjin-0.6.1.tar.bz2
41
- $ cd rbtenjin-0.6.1/
40
+ $ tar xjf rbtenjin-0.6.2.tar.bz2
41
+ $ cd rbtenjin-0.6.2/
42
42
  $ sudo copy lib/tenjin.rb /usr/local/lib/ruby/1.8/site_ruby/1.8/
43
43
  $ sudo copy bin/rbtenjin /usr/local/bin/
44
44
 
45
+ rbTenjin is tested with Ruby 1.8.6 and Rubinius.
46
+
45
47
 
46
48
  == Attention
47
49
 
@@ -23,8 +23,8 @@
23
23
  ## WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
24
  ##
25
25
 
26
- ## $Rev: 59 $
27
- ## $Release: 0.6.1 $
26
+ ## $Rev: 70 $
27
+ ## $Release: 0.6.2 $
28
28
 
29
29
  require 'tenjin'
30
30
 
@@ -51,6 +51,11 @@ module Tenjin
51
51
  n = text.count("\n")
52
52
  n -= 1 if encode_newline && text[-1] == ?\n
53
53
  @script << (@newline * n)
54
+ if text[-1] != ?\n
55
+ pos = text.rindex(?\n)
56
+ s = pos ? text[(pos+1)..-1] : text
57
+ @script << s.gsub(/[^\t]/, ' ')
58
+ end
54
59
  end
55
60
 
56
61
  ## add expression code
@@ -77,7 +77,7 @@
77
77
  <a href="Tenjin.html">Tenjin</a> module
78
78
  </p>
79
79
  <p>
80
- $Rev: 65 $ $Release: 0.6.1 $
80
+ $Rev: 65 $ $Release: 0.6.2 $
81
81
  </p>
82
82
 
83
83
  </div>
@@ -116,7 +116,7 @@ Class <a href="Tenjin/Template.html" class="link">Tenjin::Template</a><br />
116
116
  <tr class="top-aligned-row context-row">
117
117
  <td class="context-item-name">RELEASE</td>
118
118
  <td>=</td>
119
- <td class="context-item-value">('$Release: 0.6.1 $' =~ /[\d.]+/) &amp;&amp; $&amp;</td>
119
+ <td class="context-item-value">('$Release: 0.6.2 $' =~ /[\d.]+/) &amp;&amp; $&amp;</td>
120
120
  </tr>
121
121
  </table>
122
122
  </div>
@@ -1 +1 @@
1
- Thu, 07 Feb 2008 11:07:39 +0900
1
+ Mon, 25 Feb 2008 00:47:12 +0900
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Thu Feb 07 11:04:47 +0900 2008</td>
59
+ <td>Mon Feb 25 00:45:04 +0900 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -71,7 +71,7 @@
71
71
  <div id="description">
72
72
  <h1>README</h1>
73
73
  <table>
74
- <tr><td valign="top">release:</td><td>0.6.1
74
+ <tr><td valign="top">release:</td><td>0.6.2
75
75
 
76
76
  </td></tr>
77
77
  <tr><td valign="top">copyright:</td><td>copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
@@ -129,18 +129,21 @@ See doc/*.html for details.
129
129
  $ sudo gem install tenjin
130
130
  </pre>
131
131
  </li>
132
- <li>Else download rbtenjin-0.6.1.tar.bz2 and just copy
132
+ <li>Else download rbtenjin-0.6.2.tar.bz2 and just copy
133
133
  &#8216;lib/tenjin.rb&#8217; and &#8216;bin/rbtenjin&#8217; into proper
134
134
  directory.
135
135
 
136
136
  <pre>
137
- $ tar xjf rbtenjin-0.6.1.tar.bz2
138
- $ cd rbtenjin-0.6.1/
137
+ $ tar xjf rbtenjin-0.6.2.tar.bz2
138
+ $ cd rbtenjin-0.6.2/
139
139
  $ sudo copy lib/tenjin.rb /usr/local/lib/ruby/1.8/site_ruby/1.8/
140
140
  $ sudo copy bin/rbtenjin /usr/local/bin/
141
141
  </pre>
142
142
  </li>
143
143
  </ul>
144
+ <p>
145
+ rbTenjin is tested with Ruby 1.8.6 and Rubinius.
146
+ </p>
144
147
  <h2>Attention</h2>
145
148
  <p>
146
149
  rbTenjin is beta released. It means that API or specification may change in
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Wed Feb 06 12:44:46 +0900 2008</td>
59
+ <td>Sun Feb 24 12:06:42 +0900 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -17,7 +17,7 @@
17
17
  last update: $Date: 2007-10-23 15:29:14 +0900 (Tue, 23 Oct 2007) $<br>
18
18
  </div>
19
19
 
20
- <p>Release: 0.6.1
20
+ <p>Release: 0.6.2
21
21
  </p>
22
22
  <p>Table of Contents:
23
23
  <ul>
@@ -17,7 +17,7 @@
17
17
  last update: $Date: 2008-02-04 22:21:53 +0900 (Mon, 04 Feb 2008) $<br>
18
18
  </div>
19
19
 
20
- <p>Release: 0.6.1
20
+ <p>Release: 0.6.2
21
21
  </p>
22
22
  <p>Table of contents:
23
23
  <ul>
@@ -14,10 +14,10 @@
14
14
 
15
15
  <div align="left"><h1>rbTenjin User's Guide</h1></div>
16
16
  <div align="left">
17
- last update: $Date: 2008-02-06 12:44:46 +0900 (Wed, 06 Feb 2008) $<br>
17
+ last update: $Date: 2008-02-24 11:43:28 +0900 (Sun, 24 Feb 2008) $<br>
18
18
  </div>
19
19
 
20
- <p>Release: 0.6.1
20
+ <p>Release: 0.6.2
21
21
  </p>
22
22
  <p>Table of Contents:
23
23
  <ul>
@@ -361,7 +361,7 @@ for item in ['&lt;foo&gt;', 'bar&amp;bar', '"baz"']
361
361
  i += 1
362
362
 
363
363
 
364
- escape((item).to_s);
364
+ escape((item).to_s);
365
365
 
366
366
  end
367
367
 
@@ -1,5 +1,8 @@
1
1
  all:
2
2
  ruby main.rb
3
3
 
4
+ all2:
5
+ rbx main.rb # Rubinius
6
+
4
7
  clean:
5
- rm -f *.cache
8
+ rm -f *.cache *.rbc
@@ -2,6 +2,10 @@ task 'default' do
2
2
  load 'main.rb'
3
3
  end
4
4
 
5
+ task 'all2' do
6
+ system 'rbx main.rb' # Rubinius
7
+ end
8
+
5
9
  task 'clean' do
6
- rm_f Dir.glob('*.cache')
10
+ rm_f Dir.glob('*.{cache,rbc}')
7
11
  end
@@ -1,8 +1,11 @@
1
1
  all:
2
2
  ruby main.rb
3
3
 
4
+ all2:
5
+ rbx main.rb # Rubinius
6
+
4
7
  preprocess:
5
8
  rbtenjin -a preprocess select.rbhtml
6
9
 
7
10
  clean:
8
- rm -f *.cache
11
+ rm -f *.cache *.rbc
@@ -2,10 +2,14 @@ task 'default' do
2
2
  load 'main.rb'
3
3
  end
4
4
 
5
+ task 'all2' do
6
+ system 'rbx main.rb' # Rubinius
7
+ end
8
+
5
9
  task 'preprocess' do
6
10
  system 'rbtenjin -a preprocess select.rbhtml'
7
11
  end
8
12
 
9
13
  task 'clean' do
10
- rm_f Dir.glob('*.cache')
14
+ rm_f Dir.glob('*.{cache,rbc}')
11
15
  end
@@ -0,0 +1,17 @@
1
+ _buf << %Q`<form>
2
+ <label>Select your language:</label>
3
+ <select name="lang">\n`
4
+ table = { @params[:lang] => ' selected="selected"' }
5
+ _buf << %Q` <option value="en" #{table["en"]}>Engilish</option>
6
+ <option value="fr" #{table["fr"]}>French</option>
7
+ <option value="de" #{table["de"]}>German</option>
8
+ <option value="es" #{table["es"]}>Spanish</option>
9
+ <option value="ch" #{table["ch"]}>Chinese</option>
10
+ <option value="ja" #{table["ja"]}>Japanese</option>
11
+ </select>
12
+ <input type="submit" value="OK" />
13
+ </form>
14
+ <p>
15
+ <a href="/app/index">Back</a> |
16
+ <a href="/app/show/#{@params[:id]}">Show #{escape((@params[:name]).to_s)}</a>
17
+ </p>\n`
@@ -1,5 +1,8 @@
1
1
  all:
2
2
  ruby table.rb
3
3
 
4
+ all2:
5
+ rbx table.rb # Rubinius
6
+
4
7
  clean:
5
- rm -f *.cache
8
+ rm -f *.cache *.rbc
@@ -2,6 +2,10 @@ task 'default' do
2
2
  load 'table.rb'
3
3
  end
4
4
 
5
+ task 'all2' do
6
+ system 'rbx table.rb' # Rubinius
7
+ end
8
+
5
9
  task 'clean' do
6
- rm_f Dir.glob('*.cache')
10
+ rm_f Dir.glob('*.{cache,rbc}')
7
11
  end
@@ -25,12 +25,12 @@
25
25
  ## Tenjin module
26
26
  ##
27
27
  ## $Rev: 65 $
28
- ## $Release: 0.6.1 $
28
+ ## $Release: 0.6.2 $
29
29
  ##
30
30
 
31
31
  module Tenjin
32
32
 
33
- RELEASE = ('$Release: 0.6.1 $' =~ /[\d.]+/) && $&
33
+ RELEASE = ('$Release: 0.6.2 $' =~ /[\d.]+/) && $&
34
34
 
35
35
 
36
36
  ##
@@ -2,7 +2,7 @@
2
2
 
3
3
  ###
4
4
  ### $Rev: 68 $
5
- ### $Release: 0.6.1 $
5
+ ### $Release: 0.6.2 $
6
6
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
7
7
  ###
8
8
 
@@ -14,7 +14,7 @@ spec = Gem::Specification.new do |s|
14
14
  s.author = "makoto kuwata"
15
15
  s.email = "kwa(at)kuwata-lab.com"
16
16
  s.rubyforge_project = 'tenjin'
17
- s.version = "0.6.1"
17
+ s.version = "0.6.2"
18
18
  s.platform = Gem::Platform::RUBY
19
19
  s.homepage = "http://www.kuwata-lab.com/tenjin/"
20
20
  s.summary = "very fast and full-featured template engine"
@@ -0,0 +1,14 @@
1
+
2
+ recipes:
3
+
4
+ - product: :clean
5
+ method*: |
6
+ rm_rf '**/*.rbc', 'test.log'
7
+
8
+ - product: :ruby_test
9
+ method*: |
10
+ sys 'ruby test_all.rb 2>&1 | tee test.log'
11
+
12
+ - product: :rubinius_test
13
+ method*: |
14
+ sys 'rubinius test_all.rb 2>&1 | tee test.log'
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 30 $
3
- ### 0.6.1
3
+ ### 0.6.2
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -6,7 +6,7 @@ for item in ['<foo>', 'bar&bar', '"baz"']
6
6
  i += 1
7
7
 
8
8
 
9
- escape((item).to_s);
9
+ escape((item).to_s);
10
10
 
11
11
  end
12
12
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 45 $
3
- ### $Release: 0.6.1 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 59 $
3
- ### $Release: 0.6.1 $
2
+ ### $Rev: 72 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -8,7 +8,17 @@ require 'test/unit'
8
8
  #require 'testutil'
9
9
  require 'testcase-helper'
10
10
  require 'assert-text-equal'
11
- require 'yaml'
11
+ if defined?(RBX_VERSION)
12
+ require 'kwalify'
13
+ def load_yaml_str(s)
14
+ return Kwalify::Yaml.load(s)
15
+ end
16
+ else
17
+ require 'yaml'
18
+ def load_yaml_str(s)
19
+ return YAML.load(s)
20
+ end
21
+ end
12
22
 
13
23
  require 'tenjin'
14
24
 
@@ -17,7 +27,7 @@ class TenjinEngineTest < Test::Unit::TestCase
17
27
 
18
28
  s = File.read(__FILE__.sub(/\.\w+$/, '.yaml'))
19
29
  s.gsub!(/^\t/, ' ' * 8)
20
- ydoc = YAML.load(s)
30
+ ydoc = load_yaml_str(s)
21
31
  _data_convert(ydoc, 'ruby')
22
32
  TESTDATA = {}
23
33
  ydoc.each { |e| TESTDATA[e['name']] = e }
@@ -53,7 +63,6 @@ class TenjinEngineTest < Test::Unit::TestCase
53
63
  end
54
64
 
55
65
  def _test_basic
56
-
57
66
  ## setup
58
67
  _setup()
59
68
 
@@ -298,49 +307,8 @@ class TenjinEngineTest < Test::Unit::TestCase
298
307
  end
299
308
 
300
309
 
301
- def test_change_layout()
302
- data = TESTDATA['test_change_layout']
303
- ## setup
304
- basenames = %w[baselayout customlayout content]
305
- for basename in basenames
306
- File.write("#{basename}.rbhtml", data[basename])
307
- end
308
- ## body
309
- begin
310
- engine = Tenjin::Engine.new(:layout=>'baselayout.rbhtml',
311
- :templateclass=>_template_class())
312
- output = engine.render('content.rbhtml')
313
- expected = data['expected']
314
- assert_text_equal(expected, output)
315
- ensure
316
- for basename in basenames
317
- Dir.glob("#{basename}.rbhtml*").each do |fname|
318
- File.unlink(fname)
319
- end
320
- end
321
- end
322
- end
323
-
324
-
325
- def test_context_scope
326
- return if ENV['TEST'] && ENV['TEST'] != 'template_args'
327
- data = TESTDATA['test_context_scope']
328
- content = data['content']
329
- expected = data['expected']
330
- begin
331
- File.write('base.rbhtml', data['base'])
332
- File.write('part.rbhtml', data['part'])
333
- engine = Tenjin::Engine.new()
334
- actual = engine.render('base.rbhtml');
335
- assert_text_equal(expected, actual)
336
- ensure
337
- _remove_files(['base', 'part'])
338
- end
339
- end
340
-
341
310
 
342
311
  def test_template_args
343
- return if ENV['TEST'] && ENV['TEST'] != 'template_args'
344
312
  data = TESTDATA['test_template_args']
345
313
  content = data['content']
346
314
  expected = data['expected']
@@ -359,7 +327,9 @@ class TenjinEngineTest < Test::Unit::TestCase
359
327
  assert_not_nil(args1)
360
328
  output = engine.render('content.rbhtml', context)
361
329
  end
362
- assert_equal(errormsg, ex.to_s.sub(/:0x\w+>/, '>'))
330
+ msg = ex.to_s.sub(/:0x[0-9a-fA-F]\w+/, ':0x12345')
331
+ msg = msg[0, errormsg.length-1]+'>' if defined?(RBX_VERSION)
332
+ assert_equal(errormsg, msg)
363
333
  # when cache file exist
364
334
  ex = assert_raise(NameError) do
365
335
  #File.unlink('content.rbhtml');
@@ -370,7 +340,10 @@ class TenjinEngineTest < Test::Unit::TestCase
370
340
  assert_equal(args1, args2)
371
341
  output = engine.render('content.rbhtml', context)
372
342
  end
373
- assert_equal(errormsg, ex.to_s.sub(/:0x\w+>/, '>'))
343
+ #assert_equal(errormsg, ex.to_s.sub(/:0x\w+>/, '>'))
344
+ msg = ex.to_s.sub(/:0x[0-9a-fA-F]\w+/, ':0x12345')
345
+ msg = msg[0, errormsg.length-1]+'>' if defined?(RBX_VERSION)
346
+ assert_equal(errormsg, msg)
374
347
  ensure
375
348
  _remove_files(['content'])
376
349
  end
@@ -507,12 +480,8 @@ class TenjinEngineTest < Test::Unit::TestCase
507
480
  end
508
481
 
509
482
 
510
- if ENV['TEST']
511
- targetname = 'test_' + ENV['TEST']
512
- for m in self.instance_methods
513
- private m if m =~ /^test_/ && m != targetname
514
- end
515
- end
483
+ self.select_target_test()
484
+
516
485
 
517
486
  end
518
487
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 54 $
3
- ### $Release: 0.6.1 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 45 $
3
- ### $Release: 0.6.1 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 52 $
3
- ### $Release: 0.6.1 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 59 $
3
- ### $Release: 0.6.1 $
2
+ ### $Rev: 71 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -211,11 +211,13 @@ class TenjinMainTest < Test::Unit::TestCase
211
211
  # end
212
212
 
213
213
 
214
- def test_execute() # ''
214
+ def test_render() # (nothing), -a render
215
215
  @options = ""
216
216
  @input = INPUT
217
217
  @expected = OUTPUT
218
218
  _test()
219
+ @options = '-a render'
220
+ _test()
219
221
  end
220
222
 
221
223
 
@@ -259,6 +261,178 @@ class TenjinMainTest < Test::Unit::TestCase
259
261
  end
260
262
 
261
263
 
264
+ INPUT_FOR_RETRIEVE = <<END
265
+ <div>
266
+ <?rb if list ?>
267
+ <table>
268
+ <thead>
269
+ <tr>
270
+ <th>#</th><th>item</th>
271
+ </tr>
272
+ </thead>
273
+ </tbody>
274
+ <?rb i = 0 ?>
275
+ <?rb for item in list ?>
276
+ \t<?rb i += 1 ?>
277
+ <tr bgcolor="${i % 2 ? "#FFCCCC" : "#CCCCFF"}">
278
+ \t<td>\#{i}</td>
279
+ \t<td>${item}</td>
280
+ </tr>
281
+ <?rb end ?>
282
+ </tbody>
283
+ </table>
284
+ <?rb end ?>
285
+ </div>
286
+ END
287
+
288
+
289
+ def test_retrieve() # -S, -a retrieve
290
+ @input = INPUT_FOR_RETRIEVE
291
+ @expected = <<'END'
292
+ _buf = '';
293
+ if list
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+ i = 0
302
+ for item in list
303
+ i += 1
304
+ escape((i % 2 ? "#FFCCCC" : "#CCCCFF").to_s);
305
+
306
+ escape((item).to_s);
307
+
308
+ end
309
+
310
+
311
+ end
312
+
313
+ _buf.to_s
314
+ END
315
+ @options = '-S'
316
+ _test()
317
+ @options = '-a retrieve'
318
+ _test()
319
+ end
320
+
321
+
322
+ def test_retrieve2() # -SU, -SNU
323
+ @input = INPUT_FOR_RETRIEVE
324
+ @expected = <<'END'
325
+ _buf = '';
326
+ if list
327
+
328
+ i = 0
329
+ for item in list
330
+ i += 1
331
+ escape((i % 2 ? "#FFCCCC" : "#CCCCFF").to_s);
332
+
333
+ escape((item).to_s);
334
+
335
+ end
336
+
337
+ end
338
+
339
+ _buf.to_s
340
+ END
341
+ @options = '-SU'
342
+ _test()
343
+ #
344
+ @expected = <<'END'
345
+ 1: _buf = '';
346
+ 2: if list
347
+
348
+ 10: i = 0
349
+ 11: for item in list
350
+ 12: i += 1
351
+ 13: escape((i % 2 ? "#FFCCCC" : "#CCCCFF").to_s);
352
+
353
+ 15: escape((item).to_s);
354
+
355
+ 17: end
356
+
357
+ 20: end
358
+
359
+ 22: _buf.to_s
360
+ END
361
+ @options = '-SUN'
362
+ _test()
363
+ end
364
+
365
+
366
+ def test_retrieve3() # -SC, -SNC
367
+ @input = INPUT_FOR_RETRIEVE
368
+ @expected = <<'END'
369
+ _buf = '';
370
+ if list
371
+ i = 0
372
+ for item in list
373
+ i += 1
374
+ escape((i % 2 ? "#FFCCCC" : "#CCCCFF").to_s);
375
+ escape((item).to_s);
376
+ end
377
+ end
378
+ _buf.to_s
379
+ END
380
+ @options = '-SC'
381
+ _test()
382
+ #
383
+ @expected = <<'END'
384
+ 1: _buf = '';
385
+ 2: if list
386
+ 10: i = 0
387
+ 11: for item in list
388
+ 12: i += 1
389
+ 13: escape((i % 2 ? "#FFCCCC" : "#CCCCFF").to_s);
390
+ 15: escape((item).to_s);
391
+ 17: end
392
+ 20: end
393
+ 22: _buf.to_s
394
+ END
395
+ @options = '-SNC'
396
+ _test()
397
+ end
398
+
399
+
400
+ def test_statements() # -X, -a statements
401
+ @input = INPUT_FOR_RETRIEVE
402
+ @expected = <<'END'
403
+ _buf = '';
404
+ if list
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+ i = 0
413
+ for item in list
414
+ i += 1
415
+
416
+
417
+
418
+
419
+ end
420
+
421
+
422
+ end
423
+
424
+ _buf.to_s
425
+ END
426
+ @options = '-X'
427
+ _test()
428
+ @options = '-a statements'
429
+ _test()
430
+ end
431
+
432
+ # def test_dump() # -d, -a dump
433
+ # end
434
+
435
+
262
436
  # def test_indent() # -si2
263
437
  # @options = "-si2"
264
438
  # @input = INPUT
@@ -393,7 +567,11 @@ class TenjinMainTest < Test::Unit::TestCase
393
567
  @context_file = context_filename
394
568
  @context_data = CONTEXT1
395
569
  #@exception = yaml.parser.ScannerError
396
- @exception = ArgumentError
570
+ if defined?(RBX_VERSION)
571
+ @exception = RbYAML::ScannerError
572
+ else
573
+ @exception = ArgumentError
574
+ end
397
575
  _test()
398
576
  end
399
577
 
@@ -404,7 +582,10 @@ class TenjinMainTest < Test::Unit::TestCase
404
582
  @input = INPUT
405
583
  @expected = OUTPUT
406
584
  @exception = NameError
407
- if defined?(YARVCore)
585
+ if defined?(RBX_VERSION)
586
+ #@errormsg = "Missing or uninitialized constant: CGI"
587
+ @errormsg = "Missing or uninitialized constant: ERB"
588
+ elsif defined?(YARVCore)
408
589
  #@errormsg = "uninitialized constant Tenjin::Context::CGI"
409
590
  @errormsg = "uninitialized constant Tenjin::Context::ERB"
410
591
  else
@@ -561,4 +742,7 @@ END
561
742
  end
562
743
 
563
744
 
745
+ self.select_target_test()
746
+
747
+
564
748
  end
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 59 $
3
- ### $Release: 0.6.1 $
2
+ ### $Rev: 71 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -15,7 +15,12 @@ class TenjinTemplateTest < Test::Unit::TestCase
15
15
 
16
16
  filename = __FILE__.sub(/\.\w+$/, '.yaml')
17
17
  #load_yaml_testdata(filename)
18
- eval load_yaml_testdata(filename, :lang=>'ruby')
18
+ if defined?(RBX_VERSION)
19
+ lang = ['rubinius', 'ruby']
20
+ else
21
+ lang = 'ruby'
22
+ end
23
+ eval load_yaml_testdata(filename, :lang=>lang)
19
24
 
20
25
  def _test
21
26
 
@@ -68,7 +73,14 @@ class TenjinTemplateTest < Test::Unit::TestCase
68
73
  template.render(@context)
69
74
  end
70
75
  #assert_equal(@exception, ex.class.name)
71
- assert_equal(@errormsg, ex.to_s.sub(/:0x\w+>/, '>')) if @errormsg
76
+ if @errormsg
77
+ errmsg = ex.to_s.sub(/:0x[0-9a-fA-F]+/, ':0x12345')
78
+ if defined?(RBX_VERSION)
79
+ assert_equal(@errormsg, errmsg[0, @errormsg.length-1] + '>')
80
+ else
81
+ assert_equal(@errormsg, errmsg)
82
+ end
83
+ end
72
84
  assert_equal(@filename, ex.filename) if @filename
73
85
  else
74
86
  template = @templateclass.new(@options)
@@ -110,4 +122,7 @@ END
110
122
  #def test_import_module2()
111
123
 
112
124
 
125
+ self.select_target_test()
126
+
127
+
113
128
  end
@@ -416,7 +416,7 @@
416
416
  desc: lspaces
417
417
  testopts: { spacechar: '^' }
418
418
  input*:
419
- "python": |5
419
+ python: |4
420
420
  <?py
421
421
  i = 0
422
422
  for item in ['a', 'b', 'c']:
@@ -430,7 +430,7 @@
430
430
  <?py
431
431
  #endfor
432
432
  ?>
433
- "ruby": |5
433
+ ruby: |4
434
434
  <?rb
435
435
  i = 0
436
436
  for item in ['a', 'b', 'c']
@@ -459,7 +459,7 @@
459
459
 
460
460
  #endfor
461
461
 
462
- "ruby": |5+
462
+ "ruby": |5
463
463
  ^^
464
464
  i = 0
465
465
  for item in ['a', 'b', 'c']
@@ -889,7 +889,8 @@
889
889
  "ruby": NameError
890
890
  errormsg*:
891
891
  "python": "name 'name2' is not defined"
892
- "ruby": "undefined local variable or method `name2' for #<Tenjin::Context>"
892
+ "ruby": "undefined local variable or method `name2' for #<Tenjin::Context:0x12345>"
893
+ #"rubinius": 'undefined local variable or method `name2\' for #<Tenjin::Context:0x12345 @name="world" @_buf="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\">\\n">'
893
894
 
894
895
 
895
896
  ##
@@ -1112,7 +1113,7 @@
1112
1113
  #{{link_to('"Show '+_P("item['name']")+'"', '/items/show/'+_p("item['id']"))}}
1113
1114
  #{{escape('<b>'+_P('item["name"]')+'</b>')}}
1114
1115
  "ruby": |
1115
- <?RB def link_to(label, url) ?>
1116
+ <?RB def self.link_to(label, url) ?>
1116
1117
  <?RB require 'cgi' ?>
1117
1118
  <?RB return '<a href="%s">%s</a>' % [CGI::escape(url).gsub(/%2F/,'/'), label] ?>
1118
1119
  <?RB end ?>
@@ -1144,7 +1145,7 @@
1144
1145
  ''', to_str(_decode_params(link_to('"Show '+_P("item['name']")+'"', '/items/show/'+_p("item['id']")))), '''
1145
1146
  ''', to_str(_decode_params(escape('<b>'+_P('item["name"]')+'</b>'))), '''\n''', ));
1146
1147
  "ruby": |
1147
- def link_to(label, url)
1148
+ def self.link_to(label, url)
1148
1149
  require 'cgi'
1149
1150
  return '<a href="%s">%s</a>' % [CGI::escape(url).gsub(/%2F/,'/'), label]
1150
1151
  end
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 48 $
3
- ### $Release: 0.6.1 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
@@ -1,10 +1,21 @@
1
1
  ###
2
- ### $Rev: 42 $
3
- ### $Release: 0.6.1 $
2
+ ### $Rev: 72 $
3
+ ### $Release: 0.6.2 $
4
4
  ### copyright(c) 2007-2008 kuwata-lab.com all rights reserved.
5
5
  ###
6
6
 
7
- require 'yaml'
7
+ if defined?(RBX_VERSION)
8
+ require 'kwalify'
9
+ def load_yaml_documents_str(s, &block)
10
+ parser = Kwalify::Yaml::Parser.new()
11
+ parser.parse_documents(s, &block)
12
+ end
13
+ else
14
+ require 'yaml'
15
+ def load_yaml_documents_str(s, &block)
16
+ YAML.load_documents(s, &block)
17
+ end
18
+ end
8
19
  require 'test/unit/testcase'
9
20
 
10
21
 
@@ -19,7 +30,13 @@ def _data_convert(data, lang='ruby')
19
30
  v = data[k]
20
31
  if k[-1,1] == '*'
21
32
  v.is_a?(Hash) or raise "** assertion error"
22
- data[k[0..-2]] = data.delete(k)[lang]
33
+ data.delete(k)
34
+ if lang.is_a?(Array)
35
+ v = v[ lang.find{|l| v[l]} ]
36
+ else
37
+ v = v[lang]
38
+ end
39
+ data[k[0..-2]] = v
23
40
  elsif v.is_a?(Hash) && v.key?(lang)
24
41
  data[k] = v[lang]
25
42
  else
@@ -39,6 +56,15 @@ end
39
56
  class Test::Unit::TestCase # :nodoc:
40
57
 
41
58
 
59
+ def self.select_target_test(target_name=ENV['TEST'])
60
+ if target_name
61
+ self.instance_methods.each do |method|
62
+ private method if method =~ /^test_(.*)/ && $1 != target_name
63
+ end
64
+ end
65
+ end
66
+
67
+
42
68
  def self._untabify(str, width=8) # :nodoc:
43
69
  list = str.split(/\t/, -1)
44
70
  return list.first if list.length == 1
@@ -72,13 +98,11 @@ class Test::Unit::TestCase # :nodoc:
72
98
  identkey = options[:identkey] || 'name'
73
99
  list = []
74
100
  table = {}
75
- YAML.load_documents(str) do |ydoc|
76
- if ydoc.is_a?(Hash)
77
- list << ydoc
78
- elsif ydoc.is_a?(Array)
79
- list += ydoc
80
- else
81
- raise "*** invalid ydoc: #{ydoc.inspect}"
101
+ load_yaml_documents_str(str) do |ydoc|
102
+ case ydoc
103
+ when Hash ; list << ydoc
104
+ when Array ; list += ydoc
105
+ else ; raise "*** invalid ydoc: #{ydoc.inspect}"
82
106
  end
83
107
  end
84
108
  #
@@ -115,8 +139,12 @@ class Test::Unit::TestCase # :nodoc:
115
139
  ydoc.each do |key, val|
116
140
  if key[-1] == ?*
117
141
  key = key[0, key.length-1]
118
- k = special_keys.include?(key) ? 'ruby' : lang
119
- val = val[k]
142
+ #k = special_keys.include?(key) ? 'ruby' : lang
143
+ if lang.is_a?(Array)
144
+ val = val[ lang.find{|l| val[l]} ]
145
+ else
146
+ val = val[lang]
147
+ end
120
148
  end
121
149
  s << " @#{key} = #{val.inspect}\n"
122
150
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tenjin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - makoto kuwata
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-02-07 00:00:00 +09:00
12
+ date: 2008-02-25 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -155,6 +155,7 @@ files:
155
155
  - test/data/users_guide/user_edit.rbhtml
156
156
  - test/data/users_guide/user_form.rbhtml
157
157
  - test/data/users_guide/user_layout.rbhtml
158
+ - test/Rookbook.yaml
158
159
  - test/test_all.rb
159
160
  - test/test_engine.rb
160
161
  - test/test_engine.yaml
@@ -185,6 +186,7 @@ files:
185
186
  - examples/preprocessing/Makefile
186
187
  - examples/preprocessing/Rakefile
187
188
  - examples/preprocessing/select.rbhtml
189
+ - examples/preprocessing/select.rbhtml.cache
188
190
  - examples/table
189
191
  - examples/table/Makefile
190
192
  - examples/table/Rakefile