tilt 1.2 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/tilt.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Tilt
2
2
  TOPOBJECT = defined?(BasicObject) ? BasicObject : Object
3
- VERSION = '1.2'
3
+ VERSION = '1.2.2'
4
4
 
5
5
  @template_mappings = {}
6
6
 
@@ -43,9 +43,6 @@ module Tilt
43
43
 
44
44
  # Deprecated module.
45
45
  module CompileSite
46
- def self.append_features(*)
47
- warn "WARNING: Tilt::CompileSite is deprecated and will be removed in Tilt 2.0 (#{caller.first})."
48
- end
49
46
  end
50
47
 
51
48
  # Base class for template implementations. Subclasses must implement
@@ -167,6 +164,10 @@ module Tilt
167
164
  raise NotImplementedError
168
165
  end
169
166
  end
167
+
168
+ def evaluate(scope, locals, &block)
169
+ cached_evaluate(scope, locals, &block)
170
+ end
170
171
 
171
172
  # Process the template and return the result. The first time this
172
173
  # method is called, the template source is evaluated with instance_eval.
@@ -174,9 +175,9 @@ module Tilt
174
175
  # unbound method which will lead to better performance. In any case,
175
176
  # template executation is guaranteed to be performed in the scope object
176
177
  # with the locals specified and with support for yielding to the block.
177
- def evaluate(scope, locals, &block)
178
+ def cached_evaluate(scope, locals, &block)
178
179
  # Redefine itself to use method compilation the next time:
179
- def self.evaluate(scope, locals, &block)
180
+ def self.cached_evaluate(scope, locals, &block)
180
181
  method = compiled_method(locals.keys)
181
182
  method.bind(scope).call(locals, &block)
182
183
  end
@@ -623,17 +624,24 @@ module Tilt
623
624
  end
624
625
 
625
626
  def prepare; end
626
-
627
+
627
628
  def evaluate(scope, locals, &block)
628
- xml = ::Nokogiri::XML::Builder.new
629
+ block &&= proc { yield.gsub(/^<\?xml version=\"1\.0\"\?>\n?/, "") }
630
+
629
631
  if data.respond_to?(:to_str)
630
- locals[:xml] = xml
631
- block &&= proc { yield.gsub(/^<\?xml version=\"1\.0\"\?>\n?/, "") }
632
632
  super(scope, locals, &block)
633
- elsif data.kind_of?(Proc)
634
- data.call(xml)
633
+ else
634
+ ::Nokogiri::XML::Builder.new.tap(&data).to_xml
635
635
  end
636
- xml.to_xml
636
+ end
637
+
638
+ def precompiled_preamble(locals)
639
+ return super if locals.include? :xml
640
+ "xml = ::Nokogiri::XML::Builder.new\n#{super}"
641
+ end
642
+
643
+ def precompiled_postamble(locals)
644
+ "xml.to_xml"
637
645
  end
638
646
 
639
647
  def precompiled_template(locals)
@@ -650,20 +658,24 @@ module Tilt
650
658
  require_template_library 'builder'
651
659
  end
652
660
 
653
- def prepare
654
- end
661
+ def prepare; end
655
662
 
656
663
  def evaluate(scope, locals, &block)
664
+ return super(scope, locals, &block) if data.respond_to?(:to_str)
657
665
  xml = ::Builder::XmlMarkup.new(:indent => 2)
658
- if data.respond_to?(:to_str)
659
- locals[:xml] = xml
660
- super(scope, locals, &block)
661
- elsif data.kind_of?(Proc)
662
- data.call(xml)
663
- end
666
+ data.call(xml)
664
667
  xml.target!
665
668
  end
666
669
 
670
+ def precompiled_preamble(locals)
671
+ return super if locals.include? :xml
672
+ "xml = ::Builder::XmlMarkup.new(:indent => 2)\n#{super}"
673
+ end
674
+
675
+ def precompiled_postamble(locals)
676
+ "xml.target!"
677
+ end
678
+
667
679
  def precompiled_template(locals)
668
680
  data.to_str
669
681
  end
@@ -10,14 +10,14 @@ begin
10
10
  Tilt.register('md', Tilt::BlueClothTemplate)
11
11
  Tilt.register('mkd', Tilt::BlueClothTemplate)
12
12
  end
13
-
13
+
14
14
  teardown do
15
15
  # Need to revert to RDiscount, otherwise the RDiscount test will fail
16
16
  Tilt.register('markdown', Tilt::RDiscountTemplate)
17
17
  Tilt.register('md', Tilt::RDiscountTemplate)
18
18
  Tilt.register('mkd', Tilt::RDiscountTemplate)
19
19
  end
20
-
20
+
21
21
  test "registered for '.markdown' files unless RDiscount is loaded" do
22
22
  unless defined?(RDiscount)
23
23
  assert_equal Tilt::BlueClothTemplate, Tilt['test.markdown']
@@ -41,6 +41,11 @@ begin
41
41
  assert_equal "<h1>Hello World!</h1>", template.render
42
42
  end
43
43
 
44
+ test "can be rendered more than once" do
45
+ template = Tilt::BlueClothTemplate.new { |t| "# Hello World!" }
46
+ 3.times { assert_equal "<h1>Hello World!</h1>", template.render }
47
+ end
48
+
44
49
  test "smartypants when :smart is set" do
45
50
  template = Tilt::BlueClothTemplate.new(:smartypants => true) { |t|
46
51
  "OKAY -- 'Smarty Pants'" }
@@ -14,6 +14,11 @@ begin
14
14
  assert_equal "<em>Hello World!</em>\n", template.render
15
15
  end
16
16
 
17
+ test "can be rendered more than once" do
18
+ template = Tilt::BuilderTemplate.new { |t| "xml.em 'Hello World!'" }
19
+ 3.times { assert_equal "<em>Hello World!</em>\n", template.render }
20
+ end
21
+
17
22
  test "passing locals" do
18
23
  template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + name + '!')" }
19
24
  assert_equal "<em>Hey Joe!</em>\n", template.render(Object.new, :name => 'Joe')
@@ -28,7 +33,7 @@ begin
28
33
 
29
34
  test "passing a block for yield" do
30
35
  template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + yield + '!')" }
31
- assert_equal "<em>Hey Joe!</em>\n", template.render { 'Joe' }
36
+ 3.times { assert_equal "<em>Hey Joe!</em>\n", template.render { 'Joe' }}
32
37
  end
33
38
 
34
39
  test "block style templates" do
@@ -38,6 +43,16 @@ begin
38
43
  end
39
44
  assert_equal "<em>Hey Joe!</em>\n", template.render
40
45
  end
46
+
47
+ test "allows nesting raw XML" do
48
+ subtemplate = Tilt::BuilderTemplate.new { "xml.em 'Hello World!'" }
49
+ template = Tilt::BuilderTemplate.new { "xml.strong { xml << yield }" }
50
+ 3.times do
51
+ options = { :xml => Builder::XmlMarkup.new }
52
+ assert_equal "<strong>\n<em>Hello World!</em>\n</strong>\n",
53
+ template.render(options) { subtemplate.render(options) }
54
+ end
55
+ end
41
56
  end
42
57
  rescue LoadError
43
58
  warn "Tilt::BuilderTemplate (disabled)"
@@ -14,6 +14,11 @@ begin
14
14
  assert_match "puts('Hello, World!');", template.render
15
15
  end
16
16
 
17
+ test "can be rendered more than once" do
18
+ template = Tilt::CoffeeScriptTemplate.new { |t| "puts 'Hello, World!'\n" }
19
+ 3.times { assert_match "puts('Hello, World!');", template.render }
20
+ end
21
+
17
22
  test "disabling coffee-script wrapper" do
18
23
  template = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { |t| "puts 'Hello, World!'\n" }
19
24
  assert_equal "puts('Hello, World!');", template.render
@@ -19,6 +19,11 @@ class ERBTemplateTest < Test::Unit::TestCase
19
19
  assert_equal "Hello World!", template.render
20
20
  end
21
21
 
22
+ test "can be rendered more than once" do
23
+ template = Tilt::ERBTemplate.new { |t| "Hello World!" }
24
+ 3.times { assert_equal "Hello World!", template.render }
25
+ end
26
+
22
27
  test "passing locals" do
23
28
  template = Tilt::ERBTemplate.new { 'Hey <%= name %>!' }
24
29
  assert_equal "Hey Joe!", template.render(Object.new, :name => 'Joe')
@@ -14,6 +14,11 @@ begin
14
14
  assert_equal "Hello World!", template.render
15
15
  end
16
16
 
17
+ test "can be rendered more than once" do
18
+ template = Tilt::ErubisTemplate.new { |t| "Hello World!" }
19
+ 3.times { assert_equal "Hello World!", template.render }
20
+ end
21
+
17
22
  test "passing locals" do
18
23
  template = Tilt::ErubisTemplate.new { 'Hey <%= name %>!' }
19
24
  assert_equal "Hey Joe!", template.render(Object.new, :name => 'Joe')
@@ -17,6 +17,11 @@ begin
17
17
  assert_equal "<p>Hello World!</p>\n", template.render
18
18
  end
19
19
 
20
+ test "can be rendered more than once" do
21
+ template = Tilt::HamlTemplate.new { |t| "%p Hello World!" }
22
+ 3.times { assert_equal "<p>Hello World!</p>\n", template.render }
23
+ end
24
+
20
25
  test "passing locals" do
21
26
  template = Tilt::HamlTemplate.new { "%p= 'Hey ' + name + '!'" }
22
27
  assert_equal "<p>Hey Joe!</p>\n", template.render(Object.new, :name => 'Joe')
@@ -13,6 +13,11 @@ begin
13
13
  template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
14
14
  assert_equal ".bg, #main { background-color: #0000ff; }\n", template.render
15
15
  end
16
+
17
+ test "can be rendered more than once" do
18
+ template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
19
+ 3.times { assert_equal ".bg, #main { background-color: #0000ff; }\n", template.render }
20
+ end
16
21
  end
17
22
 
18
23
  rescue LoadError => boom
@@ -14,6 +14,11 @@ begin
14
14
  assert_equal "Hello World!", template.render
15
15
  end
16
16
 
17
+ test "can be rendered more than once" do
18
+ template = Tilt::LiquidTemplate.new { |t| "Hello World!" }
19
+ 3.times { assert_equal "Hello World!", template.render }
20
+ end
21
+
17
22
  test "passing locals" do
18
23
  template = Tilt::LiquidTemplate.new { "Hey {{ name }}!" }
19
24
  assert_equal "Hey Joe!", template.render(nil, :name => 'Joe')
@@ -26,6 +26,11 @@ begin
26
26
  assert_equal "<html></html>", tilt.render
27
27
  end
28
28
 
29
+ test "can be rendered more than once" do
30
+ tilt = ::Tilt::MarkabyTemplate.new { "html do; end" }
31
+ 3.times { assert_equal "<html></html>", tilt.render }
32
+ end
33
+
29
34
  test "should evaluate a template file in the scope given" do
30
35
  scope = Object.new
31
36
  def scope.foo
@@ -16,6 +16,15 @@ begin
16
16
  assert_equal 'em', doc.root.name
17
17
  end
18
18
 
19
+ test "can be rendered more than once" do
20
+ template = Tilt::NokogiriTemplate.new { |t| "xml.em 'Hello World!'" }
21
+ 3.times do
22
+ doc = Nokogiri.XML template.render
23
+ assert_equal 'Hello World!', doc.root.text
24
+ assert_equal 'em', doc.root.name
25
+ end
26
+ end
27
+
19
28
  test "passing locals" do
20
29
  template = Tilt::NokogiriTemplate.new { "xml.em('Hey ' + name + '!')" }
21
30
  doc = Nokogiri.XML template.render(Object.new, :name => 'Joe')
@@ -34,9 +43,11 @@ begin
34
43
 
35
44
  test "passing a block for yield" do
36
45
  template = Tilt::NokogiriTemplate.new { "xml.em('Hey ' + yield + '!')" }
37
- doc = Nokogiri.XML template.render { 'Joe' }
38
- assert_equal 'Hey Joe!', doc.root.text
39
- assert_equal 'em', doc.root.name
46
+ 3.times do
47
+ doc = Nokogiri.XML template.render { 'Joe' }
48
+ assert_equal 'Hey Joe!', doc.root.text
49
+ assert_equal 'em', doc.root.name
50
+ end
40
51
  end
41
52
 
42
53
  test "block style templates" do
@@ -52,10 +63,12 @@ begin
52
63
  test "allows nesting raw XML, API-compatible to Builder" do
53
64
  subtemplate = Tilt::NokogiriTemplate.new { "xml.em 'Hello World!'" }
54
65
  template = Tilt::NokogiriTemplate.new { "xml.strong { xml << yield }" }
55
- options = { :xml => Nokogiri::XML::Builder.new }
56
- doc = Nokogiri.XML(template.render(options) { subtemplate.render(options) })
57
- assert_equal 'Hello World!', doc.root.text.strip
58
- assert_equal 'strong', doc.root.name
66
+ 3.times do
67
+ options = { :xml => Nokogiri::XML::Builder.new }
68
+ doc = Nokogiri.XML(template.render(options) { subtemplate.render(options) })
69
+ assert_equal 'Hello World!', doc.root.text.strip
70
+ assert_equal 'strong', doc.root.name
71
+ end
59
72
  end
60
73
  end
61
74
  rescue LoadError
@@ -18,6 +18,11 @@ begin
18
18
  assert_equal "Hello World!", template.render
19
19
  end
20
20
 
21
+ test "can be rendered more than once" do
22
+ template = Tilt::RadiusTemplate.new { |t| "Hello World!" }
23
+ 3.times { assert_equal "Hello World!", template.render }
24
+ end
25
+
21
26
  test "passing locals" do
22
27
  template = Tilt::RadiusTemplate.new { "Hey <r:name />!" }
23
28
  assert_equal "Hey Joe!", template.render(nil, :name => 'Joe')
@@ -22,6 +22,11 @@ begin
22
22
  assert_equal "<h1>Hello World!</h1>\n", template.render
23
23
  end
24
24
 
25
+ test "can be rendered more than once" do
26
+ template = Tilt::RDiscountTemplate.new { |t| "# Hello World!" }
27
+ 3.times { assert_equal "<h1>Hello World!</h1>\n", template.render }
28
+ end
29
+
25
30
  test "smartypants when :smart is set" do
26
31
  template = Tilt::RDiscountTemplate.new(:smart => true) { |t|
27
32
  "OKAY -- 'Smarty Pants'" }
@@ -11,7 +11,12 @@ begin
11
11
 
12
12
  test "preparing and evaluating the template with #render" do
13
13
  template = Tilt::RDocTemplate.new { |t| "= Hello World!" }
14
- assert_equal "<h1>Hello World!</h1>\n", template.render
14
+ assert_equal "<h1>Hello World!</h1>", template.render.strip
15
+ end
16
+
17
+ test "can be rendered more than once" do
18
+ template = Tilt::RDocTemplate.new { |t| "= Hello World!" }
19
+ 3.times { assert_equal "<h1>Hello World!</h1>", template.render.strip }
15
20
  end
16
21
  end
17
22
  rescue LoadError => boom
@@ -14,6 +14,10 @@ begin
14
14
  assert_equal "<h1>Hello World!</h1>", template.render
15
15
  end
16
16
 
17
+ test "can be rendered more than once" do
18
+ template = Tilt::RedClothTemplate.new { |t| "h1. Hello World!" }
19
+ 3.times { assert_equal "<h1>Hello World!</h1>", template.render }
20
+ end
17
21
  end
18
22
  rescue LoadError => boom
19
23
  warn "Tilt::RedClothTemplate (disabled)\n"
@@ -14,6 +14,11 @@ begin
14
14
  template = Tilt::SassTemplate.new { |t| "#main\n :background-color #0000f1" }
15
15
  assert_equal "#main {\n background-color: #0000f1; }\n", template.render
16
16
  end
17
+
18
+ test "can be rendered more than once" do
19
+ template = Tilt::SassTemplate.new { |t| "#main\n :background-color #0000f1" }
20
+ 3.times { assert_equal "#main {\n background-color: #0000f1; }\n", template.render }
21
+ end
17
22
  end
18
23
 
19
24
  class ScssTemplateTest < Test::Unit::TestCase
@@ -25,6 +30,11 @@ begin
25
30
  template = Tilt::ScssTemplate.new { |t| "#main {\n background-color: #0000f1;\n}" }
26
31
  assert_equal "#main {\n background-color: #0000f1; }\n", template.render
27
32
  end
33
+
34
+ test "can be rendered more than once" do
35
+ template = Tilt::ScssTemplate.new { |t| "#main {\n background-color: #0000f1;\n}" }
36
+ 3.times { assert_equal "#main {\n background-color: #0000f1; }\n", template.render }
37
+ end
28
38
  end
29
39
 
30
40
  rescue LoadError => boom
@@ -11,6 +11,11 @@ class StringTemplateTest < Test::Unit::TestCase
11
11
  assert_equal "Hello World!", template.render
12
12
  end
13
13
 
14
+ test "can be rendered more than once" do
15
+ template = Tilt::StringTemplate.new { |t| "Hello World!" }
16
+ 3.times { assert_equal "Hello World!", template.render }
17
+ end
18
+
14
19
  test "passing locals" do
15
20
  template = Tilt::StringTemplate.new { 'Hey #{name}!' }
16
21
  assert_equal "Hey Joe!", template.render(Object.new, :name => 'Joe')
data/tilt.gemspec CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
4
 
5
5
  s.name = 'tilt'
6
- s.version = '1.2'
7
- s.date = '2010-12-24'
6
+ s.version = '1.2.2'
7
+ s.date = '2011-01-17'
8
8
 
9
9
  s.description = "Generic interface to multiple Ruby template engines"
10
10
  s.summary = s.description
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tilt
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
4
  prerelease: false
6
5
  segments:
7
6
  - 1
8
7
  - 2
9
- version: "1.2"
8
+ - 2
9
+ version: 1.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ryan Tomayko
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-24 00:00:00 -08:00
17
+ date: 2011-01-17 00:00:00 -08:00
18
18
  default_executable: tilt
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -25,7 +25,6 @@ dependencies:
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- hash: 3
29
28
  segments:
30
29
  - 0
31
30
  version: "0"
@@ -39,7 +38,6 @@ dependencies:
39
38
  requirements:
40
39
  - - ">="
41
40
  - !ruby/object:Gem::Version
42
- hash: 3
43
41
  segments:
44
42
  - 0
45
43
  version: "0"
@@ -53,7 +51,6 @@ dependencies:
53
51
  requirements:
54
52
  - - ">="
55
53
  - !ruby/object:Gem::Version
56
- hash: 3
57
54
  segments:
58
55
  - 0
59
56
  version: "0"
@@ -67,7 +64,6 @@ dependencies:
67
64
  requirements:
68
65
  - - ">="
69
66
  - !ruby/object:Gem::Version
70
- hash: 17
71
67
  segments:
72
68
  - 2
73
69
  - 2
@@ -83,7 +79,6 @@ dependencies:
83
79
  requirements:
84
80
  - - ">="
85
81
  - !ruby/object:Gem::Version
86
- hash: 3
87
82
  segments:
88
83
  - 0
89
84
  version: "0"
@@ -97,7 +92,6 @@ dependencies:
97
92
  requirements:
98
93
  - - ">="
99
94
  - !ruby/object:Gem::Version
100
- hash: 3
101
95
  segments:
102
96
  - 0
103
97
  version: "0"
@@ -111,7 +105,6 @@ dependencies:
111
105
  requirements:
112
106
  - - ">="
113
107
  - !ruby/object:Gem::Version
114
- hash: 3
115
108
  segments:
116
109
  - 0
117
110
  version: "0"
@@ -125,7 +118,6 @@ dependencies:
125
118
  requirements:
126
119
  - - ">="
127
120
  - !ruby/object:Gem::Version
128
- hash: 3
129
121
  segments:
130
122
  - 0
131
123
  version: "0"
@@ -139,7 +131,6 @@ dependencies:
139
131
  requirements:
140
132
  - - ">="
141
133
  - !ruby/object:Gem::Version
142
- hash: 3
143
134
  segments:
144
135
  - 0
145
136
  version: "0"
@@ -153,7 +144,6 @@ dependencies:
153
144
  requirements:
154
145
  - - ">="
155
146
  - !ruby/object:Gem::Version
156
- hash: 3
157
147
  segments:
158
148
  - 0
159
149
  version: "0"
@@ -167,7 +157,6 @@ dependencies:
167
157
  requirements:
168
158
  - - ">="
169
159
  - !ruby/object:Gem::Version
170
- hash: 3
171
160
  segments:
172
161
  - 0
173
162
  version: "0"
@@ -235,7 +224,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
235
224
  requirements:
236
225
  - - ">="
237
226
  - !ruby/object:Gem::Version
238
- hash: 3
239
227
  segments:
240
228
  - 0
241
229
  version: "0"
@@ -244,7 +232,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
232
  requirements:
245
233
  - - ">="
246
234
  - !ruby/object:Gem::Version
247
- hash: 3
248
235
  segments:
249
236
  - 0
250
237
  version: "0"