tilt 0.6 → 1.0.1

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.
@@ -6,7 +6,7 @@ class StringTemplateTest < Test::Unit::TestCase
6
6
  assert_equal Tilt::StringTemplate, Tilt['test.str']
7
7
  end
8
8
 
9
- test "compiling and evaluating templates on #render" do
9
+ test "loading and evaluating templates on #render" do
10
10
  template = Tilt::StringTemplate.new { |t| "Hello World!" }
11
11
  assert_equal "Hello World!", template.render
12
12
  end
@@ -26,6 +26,7 @@ class StringTemplateTest < Test::Unit::TestCase
26
26
  test "passing a block for yield" do
27
27
  template = Tilt::StringTemplate.new { 'Hey #{yield}!' }
28
28
  assert_equal "Hey Joe!", template.render { 'Joe' }
29
+ assert_equal "Hey Moe!", template.render { 'Moe' }
29
30
  end
30
31
 
31
32
  test "multiline templates" do
@@ -66,6 +67,91 @@ class StringTemplateTest < Test::Unit::TestCase
66
67
  end
67
68
  end
68
69
 
70
+
71
+ class CompiledStringTemplateTest < Test::Unit::TestCase
72
+ def teardown
73
+ GC.start
74
+ end
75
+
76
+ class Scope
77
+ include Tilt::CompileSite
78
+ end
79
+
80
+ test "compiling template source to a method" do
81
+ template = Tilt::StringTemplate.new { |t| "Hello World!" }
82
+ template.render(Scope.new)
83
+ method_name = template.send(:compiled_method_name, [])
84
+ method_name = method_name.to_sym if Symbol === Kernel.methods.first
85
+ assert Tilt::CompileSite.instance_methods.include?(method_name),
86
+ "CompileSite.instance_methods.include?(#{method_name.inspect})"
87
+ assert Scope.new.respond_to?(method_name),
88
+ "scope.respond_to?(#{method_name.inspect})"
89
+ end
90
+
91
+ test "loading and evaluating templates on #render" do
92
+ template = Tilt::StringTemplate.new { |t| "Hello World!" }
93
+ assert_equal "Hello World!", template.render(Scope.new)
94
+ end
95
+
96
+ test "passing locals" do
97
+ template = Tilt::StringTemplate.new { 'Hey #{name}!' }
98
+ assert_equal "Hey Joe!", template.render(Scope.new, :name => 'Joe')
99
+ assert_equal "Hey Moe!", template.render(Scope.new, :name => 'Moe')
100
+ end
101
+
102
+ test "evaluating in an object scope" do
103
+ template = Tilt::StringTemplate.new { 'Hey #{@name}!' }
104
+ scope = Scope.new
105
+ scope.instance_variable_set :@name, 'Joe'
106
+ assert_equal "Hey Joe!", template.render(scope)
107
+ scope.instance_variable_set :@name, 'Moe'
108
+ assert_equal "Hey Moe!", template.render(scope)
109
+ end
110
+
111
+ test "passing a block for yield" do
112
+ template = Tilt::StringTemplate.new { 'Hey #{yield}!' }
113
+ assert_equal "Hey Joe!", template.render(Scope.new) { 'Joe' }
114
+ assert_equal "Hey Moe!", template.render(Scope.new) { 'Moe' }
115
+ end
116
+
117
+ test "multiline templates" do
118
+ template = Tilt::StringTemplate.new { "Hello\nWorld!\n" }
119
+ assert_equal "Hello\nWorld!\n", template.render(Scope.new)
120
+ end
121
+
122
+ test "backtrace file and line reporting without locals" do
123
+ data = File.read(__FILE__).split("\n__END__\n").last
124
+ fail unless data[0] == ?<
125
+ template = Tilt::StringTemplate.new('test.str', 11) { data }
126
+ begin
127
+ template.render(Scope.new)
128
+ fail 'should have raised an exception'
129
+ rescue => boom
130
+ assert_kind_of NameError, boom
131
+ line = boom.backtrace.first
132
+ file, line, meth = line.split(":")
133
+ assert_equal 'test.str', file
134
+ assert_equal '13', line
135
+ end
136
+ end
137
+
138
+ test "backtrace file and line reporting with locals" do
139
+ data = File.read(__FILE__).split("\n__END__\n").last
140
+ fail unless data[0] == ?<
141
+ template = Tilt::StringTemplate.new('test.str') { data }
142
+ begin
143
+ template.render(Scope.new, :name => 'Joe', :foo => 'bar')
144
+ fail 'should have raised an exception'
145
+ rescue => boom
146
+ assert_kind_of RuntimeError, boom
147
+ line = boom.backtrace.first
148
+ file, line, meth = line.split(":")
149
+ assert_equal 'test.str', file
150
+ assert_equal '6', line
151
+ end
152
+ end
153
+ end
154
+
69
155
  __END__
70
156
  <html>
71
157
  <body>
@@ -2,44 +2,50 @@ require 'contest'
2
2
  require 'tilt'
3
3
 
4
4
  class TiltTemplateTest < Test::Unit::TestCase
5
+
6
+ class MockTemplate < Tilt::Template
7
+ def prepare
8
+ end
9
+ end
10
+
5
11
  test "needs a file or block" do
6
12
  assert_raise(ArgumentError) { Tilt::Template.new }
7
13
  end
8
14
 
9
15
  test "initializing with a file" do
10
- inst = Tilt::Template.new('foo.erb')
16
+ inst = MockTemplate.new('foo.erb') {}
11
17
  assert_equal 'foo.erb', inst.file
12
18
  end
13
19
 
14
20
  test "initializing with a file and line" do
15
- inst = Tilt::Template.new('foo.erb', 55)
21
+ inst = MockTemplate.new('foo.erb', 55) {}
16
22
  assert_equal 'foo.erb', inst.file
17
23
  assert_equal 55, inst.line
18
24
  end
19
25
 
20
26
  test "uses correct eval_file" do
21
- inst = Tilt::Template.new('foo.erb', 55)
27
+ inst = MockTemplate.new('foo.erb', 55) {}
22
28
  assert_equal 'foo.erb', inst.eval_file
23
29
  end
24
30
 
25
31
  test "uses a default filename for #eval_file when no file provided" do
26
- inst = Tilt::Template.new { 'Hi' }
32
+ inst = MockTemplate.new { 'Hi' }
27
33
  assert_not_nil inst.eval_file
28
34
  assert !inst.eval_file.include?("\n")
29
35
  end
30
36
 
31
37
  test "calculating template's #basename" do
32
- inst = Tilt::Template.new('/tmp/templates/foo.html.erb')
38
+ inst = MockTemplate.new('/tmp/templates/foo.html.erb') {}
33
39
  assert_equal 'foo.html.erb', inst.basename
34
40
  end
35
41
 
36
42
  test "calculating the template's #name" do
37
- inst = Tilt::Template.new('/tmp/templates/foo.html.erb')
43
+ inst = MockTemplate.new('/tmp/templates/foo.html.erb') {}
38
44
  assert_equal 'foo', inst.name
39
45
  end
40
46
 
41
47
  test "initializing with a data loading block" do
42
- Tilt::Template.new { |template| "Hello World!" }
48
+ MockTemplate.new { |template| "Hello World!" }
43
49
  end
44
50
 
45
51
  class InitializingMockTemplate < Tilt::Template
@@ -52,7 +58,7 @@ class TiltTemplateTest < Test::Unit::TestCase
52
58
  @@initialized_count += 1
53
59
  end
54
60
 
55
- def compile!
61
+ def prepare
56
62
  end
57
63
  end
58
64
 
@@ -68,44 +74,43 @@ class TiltTemplateTest < Test::Unit::TestCase
68
74
  assert_equal 1, InitializingMockTemplate.initialized_count
69
75
  end
70
76
 
71
- class CompilingMockTemplate < Tilt::Template
77
+ class PreparingMockTemplate < Tilt::Template
72
78
  include Test::Unit::Assertions
73
- def compile!
79
+ def prepare
74
80
  assert !data.nil?
75
- @compiled = true
81
+ @prepared = true
76
82
  end
77
- def compiled? ; @compiled ; end
83
+ def prepared? ; @prepared ; end
78
84
  end
79
85
 
80
- test "raises NotImplementedError when #compile! not defined" do
81
- inst = Tilt::Template.new { |template| "Hello World!" }
82
- assert_raise(NotImplementedError) { inst.render }
86
+ test "raises NotImplementedError when #prepare not defined" do
87
+ assert_raise(NotImplementedError) { Tilt::Template.new { |template| "Hello World!" } }
83
88
  end
84
89
 
85
90
  test "raises NotImplementedError when #evaluate or #template_source not defined" do
86
- inst = CompilingMockTemplate.new { |t| "Hello World!" }
91
+ inst = PreparingMockTemplate.new { |t| "Hello World!" }
87
92
  assert_raise(NotImplementedError) { inst.render }
88
- assert inst.compiled?
93
+ assert inst.prepared?
89
94
  end
90
95
 
91
- class SimpleMockTemplate < CompilingMockTemplate
96
+ class SimpleMockTemplate < PreparingMockTemplate
92
97
  include Test::Unit::Assertions
93
98
  def evaluate(scope, locals, &block)
94
- assert compiled?
99
+ assert prepared?
95
100
  assert !scope.nil?
96
101
  assert !locals.nil?
97
102
  "<em>#{@data}</em>"
98
103
  end
99
104
  end
100
105
 
101
- test "compiles and evaluates the template on #render" do
106
+ test "prepares and evaluates the template on #render" do
102
107
  inst = SimpleMockTemplate.new { |t| "Hello World!" }
103
108
  assert_equal "<em>Hello World!</em>", inst.render
104
- assert inst.compiled?
109
+ assert inst.prepared?
105
110
  end
106
111
 
107
- class SourceGeneratingMockTemplate < CompilingMockTemplate
108
- def template_source
112
+ class SourceGeneratingMockTemplate < PreparingMockTemplate
113
+ def precompiled_template(locals)
109
114
  "foo = [] ; foo << %Q{#{data}} ; foo.join"
110
115
  end
111
116
  end
@@ -113,10 +118,12 @@ class TiltTemplateTest < Test::Unit::TestCase
113
118
  test "template_source with locals" do
114
119
  inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{name}!' }
115
120
  assert_equal "Hey Joe!", inst.render(Object.new, :name => 'Joe')
116
- assert inst.compiled?
121
+ assert inst.prepared?
117
122
  end
118
123
 
119
124
  class Person
125
+ CONSTANT = "Bob"
126
+
120
127
  attr_accessor :name
121
128
  def initialize(name)
122
129
  @name = name
@@ -133,4 +140,20 @@ class TiltTemplateTest < Test::Unit::TestCase
133
140
  inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{yield}!' }
134
141
  assert_equal "Hey Joe!", inst.render(Object.new){ 'Joe' }
135
142
  end
143
+
144
+ test "template which accesses a constant" do
145
+ inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{CONSTANT}!' }
146
+ assert_equal "Hey Bob!", inst.render(Person.new("Joe"))
147
+ end
148
+
149
+ class FastPerson < Person
150
+ include Tilt::CompileSite
151
+ end
152
+
153
+ # FAILING CONSTANT TEST. DISABLED FOR 1.0.
154
+
155
+ # test "template which accesses a constant with Tilt::CompileSite" do
156
+ # inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{CONSTANT}!' }
157
+ # assert_equal "Hey Bob!", inst.render(FastPerson.new("Joe"))
158
+ # end
136
159
  end
data/test/tilt_test.rb CHANGED
@@ -14,15 +14,23 @@ class TiltTest < Test::Unit::TestCase
14
14
  Tilt.register('mock', MockTemplate)
15
15
  end
16
16
 
17
+ test "an extension is registered if explicit handle is found" do
18
+ Tilt.register('mock', MockTemplate)
19
+ assert Tilt.registered?('mock')
20
+ end
21
+
17
22
  test "registering template classes by symbol file extension" do
18
23
  Tilt.register(:mock, MockTemplate)
19
24
  end
20
25
 
21
- test "looking up template classes by file extension" do
26
+ test "looking up template classes by exact file extension" do
22
27
  Tilt.register('mock', MockTemplate)
23
28
  impl = Tilt['mock']
24
29
  assert_equal MockTemplate, impl
30
+ end
25
31
 
32
+ test "looking up template classes by implicit file extension" do
33
+ Tilt.register('mock', MockTemplate)
26
34
  impl = Tilt['.mock']
27
35
  assert_equal MockTemplate, impl
28
36
  end
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 = '0.6'
7
- s.date = '2010-02-22'
6
+ s.version = '1.0.1'
7
+ s.date = '2010-06-15'
8
8
 
9
9
  s.description = "Generic interface to multiple Ruby template engines"
10
10
  s.summary = s.description
@@ -20,16 +20,16 @@ Gem::Specification.new do |s|
20
20
  TEMPLATES.md
21
21
  bin/tilt
22
22
  lib/tilt.rb
23
+ test/contest.rb
23
24
  test/tilt_buildertemplate_test.rb
24
25
  test/tilt_cache_test.rb
25
- test/tilt_coffeetemplate_test.rb
26
+ test/tilt_compilesite_test.rb
26
27
  test/tilt_erbtemplate_test.rb
27
28
  test/tilt_erubistemplate_test.rb
28
29
  test/tilt_hamltemplate_test.rb
29
30
  test/tilt_lesstemplate_test.rb
30
31
  test/tilt_liquidtemplate_test.rb
31
- test/tilt_mustache_views/external.rb
32
- test/tilt_mustachetemplate_test.rb
32
+ test/tilt_radiustemplate_test.rb
33
33
  test/tilt_rdiscounttemplate_test.rb
34
34
  test/tilt_rdoctemplate_test.rb
35
35
  test/tilt_redclothtemplate_test.rb
@@ -41,15 +41,18 @@ Gem::Specification.new do |s|
41
41
  ]
42
42
  # = MANIFEST =
43
43
 
44
- s.test_files = s.files.select {|path| path =~ /^test\/spec_.*.rb/}
44
+ s.default_executable = 'tilt'
45
+ s.executables = ['tilt']
46
+
47
+ s.test_files = s.files.select {|path| path =~ /^test\/.*_test.rb/}
45
48
  s.add_development_dependency 'contest'
46
49
  s.add_development_dependency 'builder'
47
50
  s.add_development_dependency 'erubis'
48
- s.add_development_dependency 'haml'
49
- s.add_development_dependency 'mustache'
51
+ s.add_development_dependency 'haml', '>= 2.2.11'
50
52
  s.add_development_dependency 'rdiscount'
51
53
  s.add_development_dependency 'liquid'
52
54
  s.add_development_dependency 'less'
55
+ s.add_development_dependency 'radius'
53
56
 
54
57
  s.extra_rdoc_files = %w[COPYING]
55
58
 
metadata CHANGED
@@ -1,11 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tilt
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 21
4
5
  prerelease: false
5
6
  segments:
7
+ - 1
6
8
  - 0
7
- - 6
8
- version: "0.6"
9
+ - 1
10
+ version: 1.0.1
9
11
  platform: ruby
10
12
  authors:
11
13
  - Ryan Tomayko
@@ -13,16 +15,18 @@ autorequire:
13
15
  bindir: bin
14
16
  cert_chain: []
15
17
 
16
- date: 2010-02-22 00:00:00 -08:00
17
- default_executable:
18
+ date: 2010-06-15 00:00:00 -07:00
19
+ default_executable: tilt
18
20
  dependencies:
19
21
  - !ruby/object:Gem::Dependency
20
22
  name: contest
21
23
  prerelease: false
22
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
29
+ hash: 3
26
30
  segments:
27
31
  - 0
28
32
  version: "0"
@@ -32,9 +36,11 @@ dependencies:
32
36
  name: builder
33
37
  prerelease: false
34
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
35
40
  requirements:
36
41
  - - ">="
37
42
  - !ruby/object:Gem::Version
43
+ hash: 3
38
44
  segments:
39
45
  - 0
40
46
  version: "0"
@@ -44,9 +50,11 @@ dependencies:
44
50
  name: erubis
45
51
  prerelease: false
46
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
47
54
  requirements:
48
55
  - - ">="
49
56
  - !ruby/object:Gem::Version
57
+ hash: 3
50
58
  segments:
51
59
  - 0
52
60
  version: "0"
@@ -56,57 +64,69 @@ dependencies:
56
64
  name: haml
57
65
  prerelease: false
58
66
  requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
59
68
  requirements:
60
69
  - - ">="
61
70
  - !ruby/object:Gem::Version
71
+ hash: 17
62
72
  segments:
63
- - 0
64
- version: "0"
73
+ - 2
74
+ - 2
75
+ - 11
76
+ version: 2.2.11
65
77
  type: :development
66
78
  version_requirements: *id004
67
79
  - !ruby/object:Gem::Dependency
68
- name: mustache
80
+ name: rdiscount
69
81
  prerelease: false
70
82
  requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
71
84
  requirements:
72
85
  - - ">="
73
86
  - !ruby/object:Gem::Version
87
+ hash: 3
74
88
  segments:
75
89
  - 0
76
90
  version: "0"
77
91
  type: :development
78
92
  version_requirements: *id005
79
93
  - !ruby/object:Gem::Dependency
80
- name: rdiscount
94
+ name: liquid
81
95
  prerelease: false
82
96
  requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
83
98
  requirements:
84
99
  - - ">="
85
100
  - !ruby/object:Gem::Version
101
+ hash: 3
86
102
  segments:
87
103
  - 0
88
104
  version: "0"
89
105
  type: :development
90
106
  version_requirements: *id006
91
107
  - !ruby/object:Gem::Dependency
92
- name: liquid
108
+ name: less
93
109
  prerelease: false
94
110
  requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
95
112
  requirements:
96
113
  - - ">="
97
114
  - !ruby/object:Gem::Version
115
+ hash: 3
98
116
  segments:
99
117
  - 0
100
118
  version: "0"
101
119
  type: :development
102
120
  version_requirements: *id007
103
121
  - !ruby/object:Gem::Dependency
104
- name: less
122
+ name: radius
105
123
  prerelease: false
106
124
  requirement: &id008 !ruby/object:Gem::Requirement
125
+ none: false
107
126
  requirements:
108
127
  - - ">="
109
128
  - !ruby/object:Gem::Version
129
+ hash: 3
110
130
  segments:
111
131
  - 0
112
132
  version: "0"
@@ -114,8 +134,8 @@ dependencies:
114
134
  version_requirements: *id008
115
135
  description: Generic interface to multiple Ruby template engines
116
136
  email: r@tomayko.com
117
- executables: []
118
-
137
+ executables:
138
+ - tilt
119
139
  extensions: []
120
140
 
121
141
  extra_rdoc_files:
@@ -127,16 +147,16 @@ files:
127
147
  - TEMPLATES.md
128
148
  - bin/tilt
129
149
  - lib/tilt.rb
150
+ - test/contest.rb
130
151
  - test/tilt_buildertemplate_test.rb
131
152
  - test/tilt_cache_test.rb
132
- - test/tilt_coffeetemplate_test.rb
153
+ - test/tilt_compilesite_test.rb
133
154
  - test/tilt_erbtemplate_test.rb
134
155
  - test/tilt_erubistemplate_test.rb
135
156
  - test/tilt_hamltemplate_test.rb
136
157
  - test/tilt_lesstemplate_test.rb
137
158
  - test/tilt_liquidtemplate_test.rb
138
- - test/tilt_mustache_views/external.rb
139
- - test/tilt_mustachetemplate_test.rb
159
+ - test/tilt_radiustemplate_test.rb
140
160
  - test/tilt_rdiscounttemplate_test.rb
141
161
  - test/tilt_rdoctemplate_test.rb
142
162
  - test/tilt_redclothtemplate_test.rb
@@ -160,25 +180,44 @@ rdoc_options:
160
180
  require_paths:
161
181
  - lib
162
182
  required_ruby_version: !ruby/object:Gem::Requirement
183
+ none: false
163
184
  requirements:
164
185
  - - ">="
165
186
  - !ruby/object:Gem::Version
187
+ hash: 3
166
188
  segments:
167
189
  - 0
168
190
  version: "0"
169
191
  required_rubygems_version: !ruby/object:Gem::Requirement
192
+ none: false
170
193
  requirements:
171
194
  - - ">="
172
195
  - !ruby/object:Gem::Version
196
+ hash: 3
173
197
  segments:
174
198
  - 0
175
199
  version: "0"
176
200
  requirements: []
177
201
 
178
202
  rubyforge_project: wink
179
- rubygems_version: 1.3.6
203
+ rubygems_version: 1.3.7
180
204
  signing_key:
181
205
  specification_version: 2
182
206
  summary: Generic interface to multiple Ruby template engines
183
- test_files: []
184
-
207
+ test_files:
208
+ - test/tilt_buildertemplate_test.rb
209
+ - test/tilt_cache_test.rb
210
+ - test/tilt_compilesite_test.rb
211
+ - test/tilt_erbtemplate_test.rb
212
+ - test/tilt_erubistemplate_test.rb
213
+ - test/tilt_hamltemplate_test.rb
214
+ - test/tilt_lesstemplate_test.rb
215
+ - test/tilt_liquidtemplate_test.rb
216
+ - test/tilt_radiustemplate_test.rb
217
+ - test/tilt_rdiscounttemplate_test.rb
218
+ - test/tilt_rdoctemplate_test.rb
219
+ - test/tilt_redclothtemplate_test.rb
220
+ - test/tilt_sasstemplate_test.rb
221
+ - test/tilt_stringtemplate_test.rb
222
+ - test/tilt_template_test.rb
223
+ - test/tilt_test.rb
@@ -1,20 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'coffee-script'
6
-
7
- class CoffeeTemplateTest < Test::Unit::TestCase
8
- test "is registered for '.coffee' files" do
9
- assert_equal Tilt::CoffeeTemplate, Tilt['test.coffee']
10
- end
11
-
12
- test "compiles and evaluates the template on #render" do
13
- template = Tilt::CoffeeTemplate.new { |t| "greeting: \"Hello CoffeeScript\"" }
14
- assert_equal "(function(){\n var greeting;\n greeting = \"Hello CoffeeScript\";\n})();", template.render
15
- end
16
- end
17
-
18
- rescue LoadError => boom
19
- warn "Tilt::CoffeeTemplate (disabled)\n"
20
- end
@@ -1,9 +0,0 @@
1
- require 'mustache'
2
-
3
- module Views
4
- class External < Mustache
5
- def hello
6
- "Stached"
7
- end
8
- end
9
- end
@@ -1,73 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'mustache'
6
- raise LoadError, "mustache version must be > 0.2.2" if !Mustache.respond_to?(:compiled?)
7
-
8
- module Views
9
- class Foo < Mustache
10
- attr_reader :foo
11
- end
12
- end
13
-
14
- class MustacheTemplateTest < Test::Unit::TestCase
15
- test "registered for '.mustache' files" do
16
- assert_equal Tilt::MustacheTemplate, Tilt['test.mustache']
17
- end
18
-
19
- test "compiling and evaluating templates on #render" do
20
- template = Tilt::MustacheTemplate.new { |t| "Hello World!" }
21
- assert_equal "Hello World!", template.render
22
- end
23
-
24
- test "passing locals" do
25
- template = Tilt::MustacheTemplate.new { "<p>Hey {{name}}!</p>" }
26
- assert_equal "<p>Hey Joe!</p>", template.render(nil, :name => 'Joe')
27
- end
28
-
29
- test "passing a block for yield" do
30
- template = Tilt::MustacheTemplate.new { "<p>Hey {{yield}}!</p>" }
31
- assert_equal "<p>Hey Joe!</p>", template.render { 'Joe' }
32
- end
33
-
34
- test "locating views defined at the top-level" do
35
- template = Tilt::MustacheTemplate.new('foo.mustache') { "<p>Hey {{foo}}!</p>" }
36
- template.compile
37
- assert_equal Views::Foo, template.engine
38
- end
39
-
40
- module Bar
41
- module Views
42
- class Bizzle < Mustache
43
- end
44
- end
45
- end
46
-
47
- test "locating views defined in a custom namespace" do
48
- template = Tilt::MustacheTemplate.new('bizzle.mustache', :namespace => Bar) { "<p>Hello World!</p>" }
49
- template.compile
50
- assert_equal Bar::Views::Bizzle, template.engine
51
- assert_equal "<p>Hello World!</p>", template.render
52
- end
53
-
54
- test "locating views in files" do
55
- view_path = File.expand_path('../tilt_mustache_views', __FILE__)
56
- template = Tilt::MustacheTemplate.new('external.mustache', :view_path => view_path) { "<p>{{hello}}!</p>" }
57
- template.compile
58
- assert defined?(Views::External), "external.rb should have been required"
59
- assert_equal Views::External, template.engine
60
- assert_equal "<p>Stached!</p>", template.render
61
- end
62
-
63
- test "copying instance variables from scope object" do
64
- template = Tilt::MustacheTemplate.new('foo.mustache') { "<p>Hey {{foo}}!</p>" }
65
- scope = Object.new
66
- scope.instance_variable_set(:@foo, 'Jane!')
67
- assert_equal "<p>Hey Jane!!</p>", template.render(scope)
68
- end
69
- end
70
-
71
- rescue LoadError => boom
72
- warn "Tilt::MustacheTemplate (disabled)\n"
73
- end