tilt 0.7 → 1.0
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/COPYING +1 -1
- data/README.md +47 -4
- data/Rakefile +7 -24
- data/TEMPLATES.md +70 -54
- data/bin/tilt +45 -16
- data/lib/tilt.rb +236 -163
- data/test/contest.rb +68 -0
- data/test/tilt_compilesite_test.rb +28 -4
- data/test/tilt_erbtemplate_test.rb +18 -1
- data/test/tilt_erubistemplate_test.rb +43 -0
- data/test/tilt_hamltemplate_test.rb +11 -0
- data/test/tilt_radiustemplate_test.rb +66 -0
- data/test/tilt_sasstemplate_test.rb +2 -2
- data/test/tilt_stringtemplate_test.rb +1 -1
- data/test/tilt_template_test.rb +19 -1
- data/test/tilt_test.rb +9 -1
- data/tilt.gemspec +10 -7
- metadata +41 -13
- data/test/tilt_coffeetemplate_test.rb +0 -20
- data/test/tilt_mustache_views/external.rb +0 -9
- data/test/tilt_mustachetemplate_test.rb +0 -70
data/test/contest.rb
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
|
|
3
|
+
# Test::Unit loads a default test if the suite is empty, whose purpose is to
|
|
4
|
+
# fail. Since having empty contexts is a common practice, we decided to
|
|
5
|
+
# overwrite TestSuite#empty? in order to allow them. Having a failure when no
|
|
6
|
+
# tests have been defined seems counter-intuitive.
|
|
7
|
+
class Test::Unit::TestSuite
|
|
8
|
+
def empty?
|
|
9
|
+
false
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Contest adds +teardown+, +test+ and +context+ as class methods, and the
|
|
14
|
+
# instance methods +setup+ and +teardown+ now iterate on the corresponding
|
|
15
|
+
# blocks. Note that all setup and teardown blocks must be defined with the
|
|
16
|
+
# block syntax. Adding setup or teardown instance methods defeats the purpose
|
|
17
|
+
# of this library.
|
|
18
|
+
class Test::Unit::TestCase
|
|
19
|
+
def self.setup(&block)
|
|
20
|
+
define_method :setup do
|
|
21
|
+
super(&block)
|
|
22
|
+
instance_eval(&block)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.teardown(&block)
|
|
27
|
+
define_method :teardown do
|
|
28
|
+
instance_eval(&block)
|
|
29
|
+
super(&block)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.context(name, &block)
|
|
34
|
+
subclass = Class.new(self)
|
|
35
|
+
remove_tests(subclass)
|
|
36
|
+
subclass.class_eval(&block) if block_given?
|
|
37
|
+
const_set(context_name(name), subclass)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def self.test(name, &block)
|
|
41
|
+
define_method(test_name(name), &block)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class << self
|
|
45
|
+
alias_method :should, :test
|
|
46
|
+
alias_method :describe, :context
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def self.context_name(name)
|
|
52
|
+
"Test#{sanitize_name(name).gsub(/(^| )(\w)/) { $2.upcase }}".to_sym
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.test_name(name)
|
|
56
|
+
"test_#{sanitize_name(name).gsub(/\s+/,'_')}".to_sym
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.sanitize_name(name)
|
|
60
|
+
name.gsub(/\W+/, ' ').strip
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.remove_tests(subclass)
|
|
64
|
+
subclass.public_instance_methods.grep(/^test_/).each do |meth|
|
|
65
|
+
subclass.send(:undef_method, meth.to_sym)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'contest'
|
|
2
2
|
require 'tilt'
|
|
3
|
+
require 'thread'
|
|
3
4
|
|
|
4
5
|
class CompileSiteTest < Test::Unit::TestCase
|
|
5
6
|
def setup
|
|
@@ -10,7 +11,7 @@ class CompileSiteTest < Test::Unit::TestCase
|
|
|
10
11
|
def prepare
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
def
|
|
14
|
+
def precompiled_template(locals)
|
|
14
15
|
@data.inspect
|
|
15
16
|
end
|
|
16
17
|
end
|
|
@@ -22,7 +23,7 @@ class CompileSiteTest < Test::Unit::TestCase
|
|
|
22
23
|
test "compiling template source to a method" do
|
|
23
24
|
template = CompilingTemplate.new { |t| "Hello World!" }
|
|
24
25
|
template.render(Scope.new)
|
|
25
|
-
method_name = template.send(:compiled_method_name, []
|
|
26
|
+
method_name = template.send(:compiled_method_name, [])
|
|
26
27
|
method_name = method_name.to_sym if Symbol === Kernel.methods.first
|
|
27
28
|
assert Tilt::CompileSite.instance_methods.include?(method_name),
|
|
28
29
|
"CompileSite.instance_methods.include?(#{method_name.inspect})"
|
|
@@ -32,7 +33,7 @@ class CompileSiteTest < Test::Unit::TestCase
|
|
|
32
33
|
|
|
33
34
|
test 'garbage collecting compiled methods' do
|
|
34
35
|
template = CompilingTemplate.new { '' }
|
|
35
|
-
method_name = template.send(:compiled_method_name, []
|
|
36
|
+
method_name = template.send(:compiled_method_name, [])
|
|
36
37
|
template.render(Scope.new)
|
|
37
38
|
assert Scope.new.respond_to?(method_name)
|
|
38
39
|
Tilt::Template.send(
|
|
@@ -46,7 +47,7 @@ class CompileSiteTest < Test::Unit::TestCase
|
|
|
46
47
|
def self.create_and_destroy_template
|
|
47
48
|
template = CompilingTemplate.new { 'Hello World' }
|
|
48
49
|
template.render(Scope.new)
|
|
49
|
-
method_name = template.send(:compiled_method_name, []
|
|
50
|
+
method_name = template.send(:compiled_method_name, [])
|
|
50
51
|
method_name = method_name.to_sym if Symbol === Kernel.methods.first
|
|
51
52
|
[template.object_id, method_name]
|
|
52
53
|
end
|
|
@@ -59,4 +60,27 @@ class CompileSiteTest < Test::Unit::TestCase
|
|
|
59
60
|
assert !Scope.new.respond_to?(finalized_method_name),
|
|
60
61
|
"Scope.new.respond_to?(#{finalized_method_name.inspect})"
|
|
61
62
|
end
|
|
63
|
+
|
|
64
|
+
# This test attempts to surface issues with compiling templates from
|
|
65
|
+
# multiple threads.
|
|
66
|
+
test "using compiled templates from multiple threads" do
|
|
67
|
+
template = CompilingTemplate.new { 'template' }
|
|
68
|
+
main_thread = Thread.current
|
|
69
|
+
10.times do |i|
|
|
70
|
+
threads =
|
|
71
|
+
(1..50).map do |j|
|
|
72
|
+
Thread.new {
|
|
73
|
+
begin
|
|
74
|
+
locals = { "local#{i}" => 'value' }
|
|
75
|
+
res = template.render(self, locals)
|
|
76
|
+
thread_id = Thread.current.object_id
|
|
77
|
+
res = template.render(self, "local#{thread_id.to_s}" => 'value')
|
|
78
|
+
rescue => boom
|
|
79
|
+
main_thread.raise(boom)
|
|
80
|
+
end
|
|
81
|
+
}
|
|
82
|
+
end
|
|
83
|
+
threads.each { |t| t.join }
|
|
84
|
+
end
|
|
85
|
+
end
|
|
62
86
|
end
|
|
@@ -29,6 +29,23 @@ class ERBTemplateTest < Test::Unit::TestCase
|
|
|
29
29
|
assert_equal "Hey Joe!", template.render(scope)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
class MockOutputVariableScope
|
|
33
|
+
attr_accessor :exposed_buffer
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test "exposing the buffer to the template by default" do
|
|
37
|
+
begin
|
|
38
|
+
Tilt::ERBTemplate.default_output_variable = '@_out_buf'
|
|
39
|
+
template = Tilt::ERBTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
|
|
40
|
+
scope = MockOutputVariableScope.new
|
|
41
|
+
template.render(scope)
|
|
42
|
+
assert_not_nil scope.exposed_buffer
|
|
43
|
+
assert_equal scope.exposed_buffer, 'hey'
|
|
44
|
+
ensure
|
|
45
|
+
Tilt::ERBTemplate.default_output_variable = '_erbout'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
32
49
|
test "passing a block for yield" do
|
|
33
50
|
template = Tilt::ERBTemplate.new { 'Hey <%= yield %>!' }
|
|
34
51
|
assert_equal "Hey Joe!", template.render { 'Joe' }
|
|
@@ -102,7 +119,7 @@ class CompiledERBTemplateTest < Test::Unit::TestCase
|
|
|
102
119
|
test "compiling template source to a method" do
|
|
103
120
|
template = Tilt::ERBTemplate.new { |t| "Hello World!" }
|
|
104
121
|
template.render(Scope.new)
|
|
105
|
-
method_name = template.send(:compiled_method_name, []
|
|
122
|
+
method_name = template.send(:compiled_method_name, [])
|
|
106
123
|
method_name = method_name.to_sym if Symbol === Kernel.methods.first
|
|
107
124
|
assert Tilt::CompileSite.instance_methods.include?(method_name),
|
|
108
125
|
"CompileSite.instance_methods.include?(#{method_name.inspect})"
|
|
@@ -26,6 +26,23 @@ begin
|
|
|
26
26
|
assert_equal "Hey Joe!", template.render(scope)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
class MockOutputVariableScope
|
|
30
|
+
attr_accessor :exposed_buffer
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test "exposing the buffer to the template by default" do
|
|
34
|
+
begin
|
|
35
|
+
Tilt::ErubisTemplate.default_output_variable = '@_out_buf'
|
|
36
|
+
template = Tilt::ErubisTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
|
|
37
|
+
scope = MockOutputVariableScope.new
|
|
38
|
+
template.render(scope)
|
|
39
|
+
assert_not_nil scope.exposed_buffer
|
|
40
|
+
assert_equal scope.exposed_buffer, 'hey'
|
|
41
|
+
ensure
|
|
42
|
+
Tilt::ErubisTemplate.default_output_variable = '_erbout'
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
29
46
|
test "passing a block for yield" do
|
|
30
47
|
template = Tilt::ErubisTemplate.new { 'Hey <%= yield %>!' }
|
|
31
48
|
assert_equal "Hey Joe!", template.render { 'Joe' }
|
|
@@ -77,6 +94,32 @@ begin
|
|
|
77
94
|
assert_equal '2', template.render(scope)
|
|
78
95
|
assert_equal 'original value', scope.instance_variable_get(:@buf)
|
|
79
96
|
end
|
|
97
|
+
|
|
98
|
+
test "using Erubis::EscapedEruby subclass via :engine_class option" do
|
|
99
|
+
template = Tilt::ErubisTemplate.new(nil, :engine_class => ::Erubis::EscapedEruby) { |t| %(<%= "<p>Hello World!</p>" %>) }
|
|
100
|
+
assert_equal "<p>Hello World!</p>", template.render
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
test "using :escape_html => true option" do
|
|
104
|
+
template = Tilt::ErubisTemplate.new(nil, :escape_html => true) { |t| %(<%= "<p>Hello World!</p>" %>) }
|
|
105
|
+
assert_equal "<p>Hello World!</p>", template.render
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
test "using :escape_html => false option" do
|
|
109
|
+
template = Tilt::ErubisTemplate.new(nil, :escape_html => false) { |t| %(<%= "<p>Hello World!</p>" %>) }
|
|
110
|
+
assert_equal "<p>Hello World!</p>", template.render
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
test "erubis default does not escape html" do
|
|
114
|
+
template = Tilt::ErubisTemplate.new { |t| %(<%= "<p>Hello World!</p>" %>) }
|
|
115
|
+
assert_equal "<p>Hello World!</p>", template.render
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
test "does not modify options argument" do
|
|
119
|
+
options_hash = {:escape_html => true}
|
|
120
|
+
template = Tilt::ErubisTemplate.new(nil, options_hash) { |t| "Hello World!" }
|
|
121
|
+
assert_equal({:escape_html => true}, options_hash)
|
|
122
|
+
end
|
|
80
123
|
end
|
|
81
124
|
rescue LoadError => boom
|
|
82
125
|
warn "Tilt::ErubisTemplate (disabled)\n"
|
|
@@ -71,6 +71,17 @@ begin
|
|
|
71
71
|
include Tilt::CompileSite
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
test "compiling template source to a method" do
|
|
75
|
+
template = Tilt::HamlTemplate.new { |t| "Hello World!" }
|
|
76
|
+
template.render(Scope.new)
|
|
77
|
+
method_name = template.send(:compiled_method_name, [])
|
|
78
|
+
method_name = method_name.to_sym if Symbol === Kernel.methods.first
|
|
79
|
+
assert Tilt::CompileSite.instance_methods.include?(method_name),
|
|
80
|
+
"CompileSite.instance_methods.include?(#{method_name.inspect})"
|
|
81
|
+
assert Scope.new.respond_to?(method_name),
|
|
82
|
+
"scope.respond_to?(#{method_name.inspect})"
|
|
83
|
+
end
|
|
84
|
+
|
|
74
85
|
test "passing locals" do
|
|
75
86
|
template = Tilt::HamlTemplate.new { "%p= 'Hey ' + name + '!'" }
|
|
76
87
|
assert_equal "<p>Hey Joe!</p>\n", template.render(Scope.new, :name => 'Joe')
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'contest'
|
|
2
|
+
require 'tilt'
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'radius'
|
|
6
|
+
|
|
7
|
+
class RadiusTemplateTest < Test::Unit::TestCase
|
|
8
|
+
test "registered for '.radius' files" do
|
|
9
|
+
assert_equal Tilt::RadiusTemplate, Tilt['test.radius']
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "preparing and evaluating templates on #render" do
|
|
13
|
+
template = Tilt::RadiusTemplate.new { |t| "Hello World!" }
|
|
14
|
+
assert_equal "Hello World!", template.render
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "passing locals" do
|
|
18
|
+
template = Tilt::RadiusTemplate.new { "Hey <r:name />!" }
|
|
19
|
+
assert_equal "Hey Joe!", template.render(nil, :name => 'Joe')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class ExampleRadiusScope
|
|
23
|
+
def beer; 'wet'; end
|
|
24
|
+
def whisky; 'wetter'; end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "combining scope and locals when scope responds" do
|
|
28
|
+
template = Tilt::RadiusTemplate.new {
|
|
29
|
+
'Beer is <r:beer /> but Whisky is <r:whisky />.'
|
|
30
|
+
}
|
|
31
|
+
scope = ExampleRadiusScope.new
|
|
32
|
+
assert_equal "Beer is wet but Whisky is wetter.", template.render(scope)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
test "precedence when locals and scope define same variables" do
|
|
36
|
+
template = Tilt::RadiusTemplate.new {
|
|
37
|
+
'Beer is <r:beer /> but Whisky is <r:whisky />.'
|
|
38
|
+
}
|
|
39
|
+
scope = ExampleRadiusScope.new
|
|
40
|
+
assert_equal "Beer is great but Whisky is greater.",
|
|
41
|
+
template.render(scope, :beer => 'great', :whisky => 'greater')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#test "handles local scope" do
|
|
45
|
+
# beer = 'wet'
|
|
46
|
+
# whisky = 'wetter'
|
|
47
|
+
#
|
|
48
|
+
# template = Tilt::RadiusTemplate.new {
|
|
49
|
+
# 'Beer is <r:beer /> but Whisky is <r:whisky />.'
|
|
50
|
+
# }
|
|
51
|
+
# assert_equal "Beer is wet but Whisky is wetter.", template.render(self)
|
|
52
|
+
#end
|
|
53
|
+
|
|
54
|
+
test "passing a block for yield" do
|
|
55
|
+
template = Tilt::RadiusTemplate.new {
|
|
56
|
+
'Beer is <r:yield /> but Whisky is <r:yield />ter.'
|
|
57
|
+
}
|
|
58
|
+
assert_equal "Beer is wet but Whisky is wetter.",
|
|
59
|
+
template.render({}) { 'wet' }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rescue LoadError => boom
|
|
64
|
+
warn "Tilt::RadiusTemplate (disabled)\n"
|
|
65
|
+
end
|
|
66
|
+
|
|
@@ -11,8 +11,8 @@ begin
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
test "compiles and evaluates the template on #render" do
|
|
14
|
-
template = Tilt::SassTemplate.new { |t| "#main\n :background-color #
|
|
15
|
-
assert_equal "#main {\n background-color: #
|
|
14
|
+
template = Tilt::SassTemplate.new { |t| "#main\n :background-color #0000f1" }
|
|
15
|
+
assert_equal "#main {\n background-color: #0000f1; }\n", template.render
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
@@ -80,7 +80,7 @@ class CompiledStringTemplateTest < Test::Unit::TestCase
|
|
|
80
80
|
test "compiling template source to a method" do
|
|
81
81
|
template = Tilt::StringTemplate.new { |t| "Hello World!" }
|
|
82
82
|
template.render(Scope.new)
|
|
83
|
-
method_name = template.send(:compiled_method_name, []
|
|
83
|
+
method_name = template.send(:compiled_method_name, [])
|
|
84
84
|
method_name = method_name.to_sym if Symbol === Kernel.methods.first
|
|
85
85
|
assert Tilt::CompileSite.instance_methods.include?(method_name),
|
|
86
86
|
"CompileSite.instance_methods.include?(#{method_name.inspect})"
|
data/test/tilt_template_test.rb
CHANGED
|
@@ -110,7 +110,7 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
class SourceGeneratingMockTemplate < PreparingMockTemplate
|
|
113
|
-
def
|
|
113
|
+
def precompiled_template(locals)
|
|
114
114
|
"foo = [] ; foo << %Q{#{data}} ; foo.join"
|
|
115
115
|
end
|
|
116
116
|
end
|
|
@@ -122,6 +122,8 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
class Person
|
|
125
|
+
CONSTANT = "Bob"
|
|
126
|
+
|
|
125
127
|
attr_accessor :name
|
|
126
128
|
def initialize(name)
|
|
127
129
|
@name = name
|
|
@@ -138,4 +140,20 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
|
138
140
|
inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{yield}!' }
|
|
139
141
|
assert_equal "Hey Joe!", inst.render(Object.new){ 'Joe' }
|
|
140
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
|
|
141
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
|
|
7
|
-
s.date = '2010-
|
|
6
|
+
s.version = '1.0'
|
|
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,17 +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
26
|
test/tilt_compilesite_test.rb
|
|
27
27
|
test/tilt_erbtemplate_test.rb
|
|
28
28
|
test/tilt_erubistemplate_test.rb
|
|
29
29
|
test/tilt_hamltemplate_test.rb
|
|
30
30
|
test/tilt_lesstemplate_test.rb
|
|
31
31
|
test/tilt_liquidtemplate_test.rb
|
|
32
|
-
test/
|
|
33
|
-
test/tilt_mustachetemplate_test.rb
|
|
32
|
+
test/tilt_radiustemplate_test.rb
|
|
34
33
|
test/tilt_rdiscounttemplate_test.rb
|
|
35
34
|
test/tilt_rdoctemplate_test.rb
|
|
36
35
|
test/tilt_redclothtemplate_test.rb
|
|
@@ -42,16 +41,20 @@ Gem::Specification.new do |s|
|
|
|
42
41
|
]
|
|
43
42
|
# = MANIFEST =
|
|
44
43
|
|
|
45
|
-
s.
|
|
44
|
+
s.default_executable = 'tilt'
|
|
45
|
+
s.executables = ['tilt']
|
|
46
|
+
|
|
47
|
+
s.test_files = s.files.select {|path| path =~ /^test\/.*_test.rb/}
|
|
46
48
|
s.add_development_dependency 'contest'
|
|
47
49
|
s.add_development_dependency 'builder'
|
|
48
50
|
s.add_development_dependency 'erubis'
|
|
49
|
-
s.add_development_dependency 'haml'
|
|
51
|
+
s.add_development_dependency 'haml', '>= 2.2.11'
|
|
50
52
|
s.add_development_dependency 'mustache'
|
|
51
53
|
s.add_development_dependency 'rdiscount'
|
|
52
54
|
s.add_development_dependency 'liquid'
|
|
53
55
|
s.add_development_dependency 'less'
|
|
54
56
|
s.add_development_dependency 'coffee-script'
|
|
57
|
+
s.add_development_dependency 'radius'
|
|
55
58
|
|
|
56
59
|
s.extra_rdoc_files = %w[COPYING]
|
|
57
60
|
|
metadata
CHANGED
|
@@ -3,9 +3,9 @@ name: tilt
|
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
|
5
5
|
segments:
|
|
6
|
+
- 1
|
|
6
7
|
- 0
|
|
7
|
-
|
|
8
|
-
version: "0.7"
|
|
8
|
+
version: "1.0"
|
|
9
9
|
platform: ruby
|
|
10
10
|
authors:
|
|
11
11
|
- Ryan Tomayko
|
|
@@ -13,8 +13,8 @@ autorequire:
|
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
15
|
|
|
16
|
-
date: 2010-
|
|
17
|
-
default_executable:
|
|
16
|
+
date: 2010-06-15 00:00:00 -07:00
|
|
17
|
+
default_executable: tilt
|
|
18
18
|
dependencies:
|
|
19
19
|
- !ruby/object:Gem::Dependency
|
|
20
20
|
name: contest
|
|
@@ -60,8 +60,10 @@ dependencies:
|
|
|
60
60
|
- - ">="
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
62
|
segments:
|
|
63
|
-
-
|
|
64
|
-
|
|
63
|
+
- 2
|
|
64
|
+
- 2
|
|
65
|
+
- 11
|
|
66
|
+
version: 2.2.11
|
|
65
67
|
type: :development
|
|
66
68
|
version_requirements: *id004
|
|
67
69
|
- !ruby/object:Gem::Dependency
|
|
@@ -124,10 +126,22 @@ dependencies:
|
|
|
124
126
|
version: "0"
|
|
125
127
|
type: :development
|
|
126
128
|
version_requirements: *id009
|
|
129
|
+
- !ruby/object:Gem::Dependency
|
|
130
|
+
name: radius
|
|
131
|
+
prerelease: false
|
|
132
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
|
133
|
+
requirements:
|
|
134
|
+
- - ">="
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
segments:
|
|
137
|
+
- 0
|
|
138
|
+
version: "0"
|
|
139
|
+
type: :development
|
|
140
|
+
version_requirements: *id010
|
|
127
141
|
description: Generic interface to multiple Ruby template engines
|
|
128
142
|
email: r@tomayko.com
|
|
129
|
-
executables:
|
|
130
|
-
|
|
143
|
+
executables:
|
|
144
|
+
- tilt
|
|
131
145
|
extensions: []
|
|
132
146
|
|
|
133
147
|
extra_rdoc_files:
|
|
@@ -139,17 +153,16 @@ files:
|
|
|
139
153
|
- TEMPLATES.md
|
|
140
154
|
- bin/tilt
|
|
141
155
|
- lib/tilt.rb
|
|
156
|
+
- test/contest.rb
|
|
142
157
|
- test/tilt_buildertemplate_test.rb
|
|
143
158
|
- test/tilt_cache_test.rb
|
|
144
|
-
- test/tilt_coffeetemplate_test.rb
|
|
145
159
|
- test/tilt_compilesite_test.rb
|
|
146
160
|
- test/tilt_erbtemplate_test.rb
|
|
147
161
|
- test/tilt_erubistemplate_test.rb
|
|
148
162
|
- test/tilt_hamltemplate_test.rb
|
|
149
163
|
- test/tilt_lesstemplate_test.rb
|
|
150
164
|
- test/tilt_liquidtemplate_test.rb
|
|
151
|
-
- test/
|
|
152
|
-
- test/tilt_mustachetemplate_test.rb
|
|
165
|
+
- test/tilt_radiustemplate_test.rb
|
|
153
166
|
- test/tilt_rdiscounttemplate_test.rb
|
|
154
167
|
- test/tilt_rdoctemplate_test.rb
|
|
155
168
|
- test/tilt_redclothtemplate_test.rb
|
|
@@ -193,5 +206,20 @@ rubygems_version: 1.3.6
|
|
|
193
206
|
signing_key:
|
|
194
207
|
specification_version: 2
|
|
195
208
|
summary: Generic interface to multiple Ruby template engines
|
|
196
|
-
test_files:
|
|
197
|
-
|
|
209
|
+
test_files:
|
|
210
|
+
- test/tilt_buildertemplate_test.rb
|
|
211
|
+
- test/tilt_cache_test.rb
|
|
212
|
+
- test/tilt_compilesite_test.rb
|
|
213
|
+
- test/tilt_erbtemplate_test.rb
|
|
214
|
+
- test/tilt_erubistemplate_test.rb
|
|
215
|
+
- test/tilt_hamltemplate_test.rb
|
|
216
|
+
- test/tilt_lesstemplate_test.rb
|
|
217
|
+
- test/tilt_liquidtemplate_test.rb
|
|
218
|
+
- test/tilt_radiustemplate_test.rb
|
|
219
|
+
- test/tilt_rdiscounttemplate_test.rb
|
|
220
|
+
- test/tilt_rdoctemplate_test.rb
|
|
221
|
+
- test/tilt_redclothtemplate_test.rb
|
|
222
|
+
- test/tilt_sasstemplate_test.rb
|
|
223
|
+
- test/tilt_stringtemplate_test.rb
|
|
224
|
+
- test/tilt_template_test.rb
|
|
225
|
+
- 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,70 +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 "preparing 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
|
-
assert_equal Views::Foo, template.engine
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
module Bar
|
|
40
|
-
module Views
|
|
41
|
-
class Bizzle < Mustache
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
test "locating views defined in a custom namespace" do
|
|
47
|
-
template = Tilt::MustacheTemplate.new('bizzle.mustache', :namespace => Bar) { "<p>Hello World!</p>" }
|
|
48
|
-
assert_equal Bar::Views::Bizzle, template.engine
|
|
49
|
-
assert_equal "<p>Hello World!</p>", template.render
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
test "locating views in files" do
|
|
53
|
-
view_path = File.expand_path('../tilt_mustache_views', __FILE__)
|
|
54
|
-
template = Tilt::MustacheTemplate.new('external.mustache', :view_path => view_path) { "<p>{{hello}}!</p>" }
|
|
55
|
-
assert defined?(Views::External), "external.rb should have been required"
|
|
56
|
-
assert_equal Views::External, template.engine
|
|
57
|
-
assert_equal "<p>Stached!</p>", template.render
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
test "copying instance variables from scope object" do
|
|
61
|
-
template = Tilt::MustacheTemplate.new('foo.mustache') { "<p>Hey {{foo}}!</p>" }
|
|
62
|
-
scope = Object.new
|
|
63
|
-
scope.instance_variable_set(:@foo, 'Jane!')
|
|
64
|
-
assert_equal "<p>Hey Jane!!</p>", template.render(scope)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
rescue LoadError => boom
|
|
69
|
-
warn "Tilt::MustacheTemplate (disabled)\n"
|
|
70
|
-
end
|