tilt 1.3.3 → 1.4.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/CHANGELOG.md +40 -0
- data/COPYING +1 -1
- data/Gemfile +31 -1
- data/HACKING +16 -0
- data/README.md +26 -2
- data/Rakefile +25 -1
- data/TEMPLATES.md +13 -13
- data/bin/tilt +8 -6
- data/lib/tilt/asciidoc.rb +34 -0
- data/lib/tilt/coffee.rb +4 -0
- data/lib/tilt/css.rb +10 -2
- data/lib/tilt/csv.rb +71 -0
- data/lib/tilt/erb.rb +2 -2
- data/lib/tilt/etanni.rb +27 -0
- data/lib/tilt/liquid.rb +4 -0
- data/lib/tilt/markdown.rb +35 -11
- data/lib/tilt/nokogiri.rb +4 -4
- data/lib/tilt/plain.rb +20 -0
- data/lib/tilt/radius.rb +4 -0
- data/lib/tilt/rdoc.rb +20 -5
- data/lib/tilt/template.rb +96 -92
- data/lib/tilt/textile.rb +5 -0
- data/lib/tilt/wiki.rb +8 -0
- data/lib/tilt.rb +15 -1
- data/test/tilt_asciidoctor_test.rb +44 -0
- data/test/tilt_blueclothtemplate_test.rb +1 -1
- data/test/tilt_coffeescripttemplate_test.rb +64 -11
- data/test/tilt_creoletemplate_test.rb +1 -1
- data/test/tilt_csv_test.rb +69 -0
- data/test/tilt_erbtemplate_test.rb +5 -0
- data/test/tilt_erubistemplate_test.rb +1 -1
- data/test/tilt_etannitemplate_test.rb +173 -0
- data/test/tilt_fallback_test.rb +6 -6
- data/test/tilt_hamltemplate_test.rb +1 -1
- data/test/tilt_kramdown_test.rb +1 -1
- data/test/tilt_lesstemplate_test.less +1 -0
- data/test/tilt_lesstemplate_test.rb +19 -3
- data/test/tilt_liquidtemplate_test.rb +1 -1
- data/test/tilt_markaby_test.rb +1 -1
- data/test/tilt_markdown_test.rb +16 -5
- data/test/tilt_marukutemplate_test.rb +1 -1
- data/test/tilt_radiustemplate_test.rb +1 -1
- data/test/tilt_rdiscounttemplate_test.rb +1 -1
- data/test/tilt_rdoctemplate_test.rb +10 -3
- data/test/tilt_redcarpettemplate_test.rb +15 -3
- data/test/tilt_redclothtemplate_test.rb +13 -1
- data/test/tilt_sasstemplate_test.rb +1 -1
- data/test/tilt_stringtemplate_test.rb +1 -1
- data/test/tilt_template_test.rb +122 -0
- data/test/tilt_wikiclothtemplate_test.rb +1 -1
- data/test/tilt_yajltemplate_test.rb +13 -4
- data/tilt.gemspec +28 -17
- metadata +204 -75
data/test/tilt_template_test.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
# coding: utf-8
|
|
1
2
|
require 'contest'
|
|
2
3
|
require 'tilt'
|
|
4
|
+
require 'tempfile'
|
|
3
5
|
|
|
4
6
|
class TiltTemplateTest < Test::Unit::TestCase
|
|
5
7
|
|
|
@@ -23,6 +25,23 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
|
23
25
|
assert_equal 55, inst.line
|
|
24
26
|
end
|
|
25
27
|
|
|
28
|
+
test "initializing with a tempfile" do
|
|
29
|
+
tempfile = Tempfile.new('tilt_template_test')
|
|
30
|
+
inst = MockTemplate.new(tempfile)
|
|
31
|
+
assert_equal File.basename(tempfile.path), inst.basename
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class SillyHash < Hash
|
|
35
|
+
def path(arg)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
test "initialize with hash that implements #path" do
|
|
40
|
+
options = SillyHash[:key => :value]
|
|
41
|
+
inst = MockTemplate.new(options) {}
|
|
42
|
+
assert_equal :value, inst.options[:key]
|
|
43
|
+
end
|
|
44
|
+
|
|
26
45
|
test "uses correct eval_file" do
|
|
27
46
|
inst = MockTemplate.new('foo.erb', 55) {}
|
|
28
47
|
assert_equal 'foo.erb', inst.eval_file
|
|
@@ -127,6 +146,13 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
|
127
146
|
assert inst.prepared?
|
|
128
147
|
end
|
|
129
148
|
|
|
149
|
+
test "template_source with locals having non-variable keys raises error" do
|
|
150
|
+
inst = SourceGeneratingMockTemplate.new { |t| '1 + 2 = #{_answer}' }
|
|
151
|
+
err = assert_raise(RuntimeError) { inst.render(Object.new, 'ANSWER' => 3) }
|
|
152
|
+
assert_equal "invalid locals key: \"ANSWER\" (keys must be variable names)", err.message
|
|
153
|
+
assert_equal "1 + 2 = 3", inst.render(Object.new, '_answer' => 3)
|
|
154
|
+
end
|
|
155
|
+
|
|
130
156
|
class Person
|
|
131
157
|
CONSTANT = "Bob"
|
|
132
158
|
|
|
@@ -151,4 +177,100 @@ class TiltTemplateTest < Test::Unit::TestCase
|
|
|
151
177
|
inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{CONSTANT}!' }
|
|
152
178
|
assert_equal "Hey Bob!", inst.render(Person.new("Joe"))
|
|
153
179
|
end
|
|
180
|
+
|
|
181
|
+
##
|
|
182
|
+
# Encodings
|
|
183
|
+
|
|
184
|
+
class DynamicMockTemplate < MockTemplate
|
|
185
|
+
def precompiled_template(locals)
|
|
186
|
+
options[:code]
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
class UTF8Template < MockTemplate
|
|
191
|
+
def default_encoding
|
|
192
|
+
Encoding::UTF_8
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
if ''.respond_to?(:encoding)
|
|
197
|
+
original_encoding = Encoding.default_external
|
|
198
|
+
|
|
199
|
+
setup do
|
|
200
|
+
@file = Tempfile.open('template')
|
|
201
|
+
@file.puts "stuff"
|
|
202
|
+
@file.close
|
|
203
|
+
@template = @file.path
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
teardown do
|
|
207
|
+
Encoding.default_external = original_encoding
|
|
208
|
+
Encoding.default_internal = nil
|
|
209
|
+
@file.delete
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
test "reading from file assumes default external encoding" do
|
|
213
|
+
Encoding.default_external = 'Big5'
|
|
214
|
+
inst = MockTemplate.new(@template)
|
|
215
|
+
assert_equal 'Big5', inst.data.encoding.to_s
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
test "reading from file with a :default_encoding overrides default external" do
|
|
219
|
+
Encoding.default_external = 'Big5'
|
|
220
|
+
inst = MockTemplate.new(@template, :default_encoding => 'GBK')
|
|
221
|
+
assert_equal 'GBK', inst.data.encoding.to_s
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
test "reading from file with default_internal set does no transcoding" do
|
|
225
|
+
Encoding.default_internal = 'utf-8'
|
|
226
|
+
Encoding.default_external = 'Big5'
|
|
227
|
+
inst = MockTemplate.new(@template)
|
|
228
|
+
assert_equal 'Big5', inst.data.encoding.to_s
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
test "using provided template data verbatim when given as string" do
|
|
232
|
+
Encoding.default_internal = 'Big5'
|
|
233
|
+
inst = MockTemplate.new(@template) { "blah".force_encoding('GBK') }
|
|
234
|
+
assert_equal 'GBK', inst.data.encoding.to_s
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
test "uses the template from the generated source code" do
|
|
238
|
+
tmpl = "ふが"
|
|
239
|
+
code = tmpl.inspect.encode('Shift_JIS')
|
|
240
|
+
inst = DynamicMockTemplate.new(:code => code) { '' }
|
|
241
|
+
res = inst.render
|
|
242
|
+
assert_equal 'Shift_JIS', res.encoding.to_s
|
|
243
|
+
assert_equal tmpl, res.encode(tmpl.encoding)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
test "uses the magic comment from the generated source code" do
|
|
247
|
+
tmpl = "ふが"
|
|
248
|
+
code = ("# coding: Shift_JIS\n" + tmpl.inspect).encode('Shift_JIS')
|
|
249
|
+
# Set it to an incorrect encoding
|
|
250
|
+
code.force_encoding('UTF-8')
|
|
251
|
+
|
|
252
|
+
inst = DynamicMockTemplate.new(:code => code) { '' }
|
|
253
|
+
res = inst.render
|
|
254
|
+
assert_equal 'Shift_JIS', res.encoding.to_s
|
|
255
|
+
assert_equal tmpl, res.encode(tmpl.encoding)
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
test "uses #default_encoding instead of default_external" do
|
|
259
|
+
Encoding.default_external = 'Big5'
|
|
260
|
+
inst = UTF8Template.new(@template)
|
|
261
|
+
assert_equal 'UTF-8', inst.data.encoding.to_s
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
test "uses #default_encoding instead of current encoding" do
|
|
265
|
+
tmpl = "".force_encoding('Big5')
|
|
266
|
+
inst = UTF8Template.new(@template) { tmpl }
|
|
267
|
+
assert_equal 'UTF-8', inst.data.encoding.to_s
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
test "raises error if the encoding is not valid" do
|
|
271
|
+
assert_raises(Encoding::InvalidByteSequenceError) do
|
|
272
|
+
UTF8Template.new(@template) { "\xe4" }
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
154
276
|
end
|
|
@@ -11,12 +11,20 @@ begin
|
|
|
11
11
|
|
|
12
12
|
test "compiles and evaluates the template on #render" do
|
|
13
13
|
template = Tilt::YajlTemplate.new { "json = { :integer => 3, :string => 'hello' }" }
|
|
14
|
-
|
|
14
|
+
output = template.render
|
|
15
|
+
result = Yajl::Parser.parse(output)
|
|
16
|
+
expect = {"integer" => 3,"string" => "hello"}
|
|
17
|
+
assert_equal expect, result
|
|
15
18
|
end
|
|
16
19
|
|
|
17
20
|
test "can be rendered more than once" do
|
|
18
21
|
template = Tilt::YajlTemplate.new { "json = { :integer => 3, :string => 'hello' }" }
|
|
19
|
-
|
|
22
|
+
expect = {"integer" => 3,"string" => "hello"}
|
|
23
|
+
3.times do
|
|
24
|
+
output = template.render
|
|
25
|
+
result = Yajl::Parser.parse(output)
|
|
26
|
+
assert_equal expect, result
|
|
27
|
+
end
|
|
20
28
|
end
|
|
21
29
|
|
|
22
30
|
test "evaluating ruby code" do
|
|
@@ -65,7 +73,8 @@ begin
|
|
|
65
73
|
json[:integer] = four
|
|
66
74
|
nil
|
|
67
75
|
} }
|
|
68
|
-
|
|
76
|
+
result = template.render
|
|
77
|
+
assert( (result == '{"string":"hello","integer":4}') || (result == '{"integer":4,"string":"hello"}') )
|
|
69
78
|
end
|
|
70
79
|
|
|
71
80
|
test "option callback" do
|
|
@@ -88,5 +97,5 @@ begin
|
|
|
88
97
|
|
|
89
98
|
end
|
|
90
99
|
rescue LoadError
|
|
91
|
-
warn "Tilt::YajlTemplateTest (disabled)
|
|
100
|
+
warn "Tilt::YajlTemplateTest (disabled)"
|
|
92
101
|
end
|
data/tilt.gemspec
CHANGED
|
@@ -3,33 +3,40 @@ 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.
|
|
7
|
-
s.date = '
|
|
6
|
+
s.version = '1.4.0'
|
|
7
|
+
s.date = '2013-05-01'
|
|
8
8
|
|
|
9
9
|
s.description = "Generic interface to multiple Ruby template engines"
|
|
10
10
|
s.summary = s.description
|
|
11
|
+
s.license = "MIT"
|
|
11
12
|
|
|
12
13
|
s.authors = ["Ryan Tomayko"]
|
|
13
14
|
s.email = "r@tomayko.com"
|
|
14
15
|
|
|
15
16
|
# = MANIFEST =
|
|
16
17
|
s.files = %w[
|
|
18
|
+
CHANGELOG.md
|
|
17
19
|
COPYING
|
|
18
20
|
Gemfile
|
|
21
|
+
HACKING
|
|
19
22
|
README.md
|
|
20
23
|
Rakefile
|
|
21
24
|
TEMPLATES.md
|
|
22
25
|
bin/tilt
|
|
23
26
|
lib/tilt.rb
|
|
27
|
+
lib/tilt/asciidoc.rb
|
|
24
28
|
lib/tilt/builder.rb
|
|
25
29
|
lib/tilt/coffee.rb
|
|
26
30
|
lib/tilt/css.rb
|
|
31
|
+
lib/tilt/csv.rb
|
|
27
32
|
lib/tilt/erb.rb
|
|
33
|
+
lib/tilt/etanni.rb
|
|
28
34
|
lib/tilt/haml.rb
|
|
29
35
|
lib/tilt/liquid.rb
|
|
30
36
|
lib/tilt/markaby.rb
|
|
31
37
|
lib/tilt/markdown.rb
|
|
32
38
|
lib/tilt/nokogiri.rb
|
|
39
|
+
lib/tilt/plain.rb
|
|
33
40
|
lib/tilt/radius.rb
|
|
34
41
|
lib/tilt/rdoc.rb
|
|
35
42
|
lib/tilt/string.rb
|
|
@@ -44,17 +51,21 @@ Gem::Specification.new do |s|
|
|
|
44
51
|
test/markaby/render_twice.mab
|
|
45
52
|
test/markaby/scope.mab
|
|
46
53
|
test/markaby/yielding.mab
|
|
54
|
+
test/tilt_asciidoctor_test.rb
|
|
47
55
|
test/tilt_blueclothtemplate_test.rb
|
|
48
56
|
test/tilt_buildertemplate_test.rb
|
|
49
57
|
test/tilt_cache_test.rb
|
|
50
58
|
test/tilt_coffeescripttemplate_test.rb
|
|
51
59
|
test/tilt_compilesite_test.rb
|
|
52
60
|
test/tilt_creoletemplate_test.rb
|
|
61
|
+
test/tilt_csv_test.rb
|
|
53
62
|
test/tilt_erbtemplate_test.rb
|
|
54
63
|
test/tilt_erubistemplate_test.rb
|
|
64
|
+
test/tilt_etannitemplate_test.rb
|
|
55
65
|
test/tilt_fallback_test.rb
|
|
56
66
|
test/tilt_hamltemplate_test.rb
|
|
57
67
|
test/tilt_kramdown_test.rb
|
|
68
|
+
test/tilt_lesstemplate_test.less
|
|
58
69
|
test/tilt_lesstemplate_test.rb
|
|
59
70
|
test/tilt_liquidtemplate_test.rb
|
|
60
71
|
test/tilt_markaby_test.rb
|
|
@@ -78,29 +89,29 @@ Gem::Specification.new do |s|
|
|
|
78
89
|
|
|
79
90
|
s.executables = ['tilt']
|
|
80
91
|
s.test_files = s.files.select {|path| path =~ /^test\/.*_test.rb/}
|
|
81
|
-
s.add_development_dependency '
|
|
92
|
+
s.add_development_dependency 'asciidoctor', '>= 0.1.0'
|
|
93
|
+
s.add_development_dependency 'RedCloth'
|
|
94
|
+
s.add_development_dependency 'bluecloth'
|
|
82
95
|
s.add_development_dependency 'builder'
|
|
96
|
+
s.add_development_dependency 'coffee-script'
|
|
97
|
+
s.add_development_dependency 'contest'
|
|
98
|
+
s.add_development_dependency 'creole'
|
|
83
99
|
s.add_development_dependency 'erubis'
|
|
84
100
|
s.add_development_dependency 'haml', '>= 2.2.11'
|
|
85
|
-
s.add_development_dependency '
|
|
86
|
-
s.add_development_dependency 'rdiscount'
|
|
87
|
-
s.add_development_dependency 'liquid'
|
|
101
|
+
s.add_development_dependency 'kramdown'
|
|
88
102
|
s.add_development_dependency 'less'
|
|
89
|
-
s.add_development_dependency '
|
|
90
|
-
s.add_development_dependency 'nokogiri'
|
|
103
|
+
s.add_development_dependency 'liquid'
|
|
91
104
|
s.add_development_dependency 'markaby'
|
|
92
|
-
s.add_development_dependency 'coffee-script'
|
|
93
|
-
s.add_development_dependency 'bluecloth'
|
|
94
|
-
s.add_development_dependency 'RedCloth'
|
|
95
105
|
s.add_development_dependency 'maruku'
|
|
96
|
-
s.add_development_dependency '
|
|
97
|
-
s.add_development_dependency '
|
|
106
|
+
s.add_development_dependency 'nokogiri'
|
|
107
|
+
s.add_development_dependency 'radius'
|
|
108
|
+
s.add_development_dependency 'rdiscount'
|
|
109
|
+
s.add_development_dependency 'rdoc'
|
|
98
110
|
s.add_development_dependency 'redcarpet'
|
|
99
|
-
s.add_development_dependency '
|
|
100
|
-
s.add_development_dependency 'yajl-ruby'
|
|
111
|
+
s.add_development_dependency 'sass'
|
|
101
112
|
s.add_development_dependency 'wikicloth'
|
|
102
|
-
s.add_development_dependency '
|
|
103
|
-
s.add_development_dependency '
|
|
113
|
+
s.add_development_dependency 'yajl-ruby'
|
|
114
|
+
s.add_development_dependency 'rdoc'
|
|
104
115
|
|
|
105
116
|
s.homepage = "http://github.com/rtomayko/tilt/"
|
|
106
117
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tilt", "--main", "Tilt"]
|