tilt 1.4.1 → 2.0.0.beta1

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.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile +33 -26
  4. data/README.md +21 -48
  5. data/Rakefile +21 -30
  6. data/{TEMPLATES.md → docs/TEMPLATES.md} +10 -4
  7. data/docs/common.css +14 -0
  8. data/lib/tilt.rb +85 -154
  9. data/lib/tilt/asciidoc.rb +1 -8
  10. data/lib/tilt/bluecloth.rb +24 -0
  11. data/lib/tilt/builder.rb +1 -8
  12. data/lib/tilt/coffee.rb +1 -8
  13. data/lib/tilt/creole.rb +25 -0
  14. data/lib/tilt/csv.rb +7 -13
  15. data/lib/tilt/erb.rb +2 -55
  16. data/lib/tilt/erubis.rb +43 -0
  17. data/lib/tilt/haml.rb +1 -8
  18. data/lib/tilt/kramdown.rb +33 -0
  19. data/lib/tilt/less.rb +38 -0
  20. data/lib/tilt/liquid.rb +1 -8
  21. data/lib/tilt/mapping.rb +247 -0
  22. data/lib/tilt/markaby.rb +1 -8
  23. data/lib/tilt/maruku.rb +22 -0
  24. data/lib/tilt/nokogiri.rb +1 -8
  25. data/lib/tilt/radius.rb +1 -8
  26. data/lib/tilt/rdiscount.rb +39 -0
  27. data/lib/tilt/rdoc.rb +3 -10
  28. data/lib/tilt/redcarpet.rb +104 -0
  29. data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
  30. data/lib/tilt/sass.rb +41 -0
  31. data/lib/tilt/template.rb +85 -92
  32. data/lib/tilt/wikicloth.rb +22 -0
  33. data/lib/tilt/yajl.rb +1 -8
  34. data/test/{contest.rb → test_helper.rb} +5 -11
  35. data/test/tilt_asciidoctor_test.rb +6 -6
  36. data/test/tilt_blueclothtemplate_test.rb +3 -15
  37. data/test/tilt_buildertemplate_test.rb +3 -3
  38. data/test/tilt_cache_test.rb +2 -2
  39. data/test/tilt_coffeescripttemplate_test.rb +8 -18
  40. data/test/tilt_compilesite_test.rb +2 -2
  41. data/test/tilt_creoletemplate_test.rb +3 -7
  42. data/test/tilt_csv_test.rb +5 -9
  43. data/test/tilt_erbtemplate_test.rb +7 -7
  44. data/test/tilt_erubistemplate_test.rb +7 -7
  45. data/test/tilt_etannitemplate_test.rb +4 -3
  46. data/test/tilt_hamltemplate_test.rb +4 -4
  47. data/test/tilt_kramdown_test.rb +5 -27
  48. data/test/tilt_lesstemplate_test.rb +3 -3
  49. data/test/tilt_liquidtemplate_test.rb +3 -3
  50. data/test/tilt_mapping.rb +215 -0
  51. data/test/tilt_markaby_test.rb +4 -4
  52. data/test/tilt_markdown_test.rb +13 -14
  53. data/test/tilt_marukutemplate_test.rb +6 -18
  54. data/test/tilt_metadata_test.rb +42 -0
  55. data/test/tilt_nokogiritemplate_test.rb +3 -3
  56. data/test/tilt_radiustemplate_test.rb +3 -3
  57. data/test/tilt_rdiscounttemplate_test.rb +6 -18
  58. data/test/tilt_rdoctemplate_test.rb +3 -5
  59. data/test/tilt_redcarpettemplate_test.rb +11 -23
  60. data/test/tilt_redclothtemplate_test.rb +3 -3
  61. data/test/tilt_sasstemplate_test.rb +4 -4
  62. data/test/tilt_stringtemplate_test.rb +4 -3
  63. data/test/tilt_template_test.rb +35 -49
  64. data/test/tilt_test.rb +10 -15
  65. data/test/tilt_wikiclothtemplate_test.rb +3 -3
  66. data/test/tilt_yajltemplate_test.rb +3 -3
  67. data/tilt.gemspec +19 -32
  68. metadata +26 -386
  69. data/lib/tilt/css.rb +0 -80
  70. data/lib/tilt/markdown.rb +0 -214
  71. data/lib/tilt/wiki.rb +0 -58
  72. data/test/tilt_fallback_test.rb +0 -122
@@ -1,11 +1,11 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
5
  require 'pathname'
6
- require 'less'
6
+ require 'tilt/less'
7
7
 
8
- class LessTemplateTest < Test::Unit::TestCase
8
+ class LessTemplateTest < Minitest::Test
9
9
  def assert_similar(a, b)
10
10
  assert_equal a.gsub(/\s+/m, ' '), b.gsub(/\s+/m, ' ')
11
11
  end
@@ -1,10 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'liquid'
5
+ require 'tilt/liquid'
6
6
 
7
- class LiquidTemplateTest < Test::Unit::TestCase
7
+ class LiquidTemplateTest < Minitest::Test
8
8
  test "registered for '.liquid' files" do
9
9
  assert_equal Tilt::LiquidTemplate, Tilt['test.liquid']
10
10
  end
@@ -0,0 +1,215 @@
1
+ require 'test_helper'
2
+ require 'tilt'
3
+ require 'tilt/mapping'
4
+
5
+ module Tilt
6
+
7
+ class MappingTest < Minitest::Test
8
+ class Stub
9
+ end
10
+
11
+ class Stub2
12
+ end
13
+
14
+ setup do
15
+ @mapping = Mapping.new
16
+ end
17
+
18
+ test "registered?" do
19
+ @mapping.register(Stub, 'foo', 'bar')
20
+ assert @mapping.registered?('foo')
21
+ assert @mapping.registered?('bar')
22
+ refute @mapping.registered?('baz')
23
+ end
24
+
25
+ test "lookups on registered" do
26
+ @mapping.register(Stub, 'foo', 'bar')
27
+ assert_equal Stub, @mapping['foo']
28
+ assert_equal Stub, @mapping['bar']
29
+ assert_equal Stub, @mapping['hello.foo']
30
+ assert_nil @mapping['foo.baz']
31
+ end
32
+
33
+ test "can be dup'd" do
34
+ @mapping.register(Stub, 'foo')
35
+ other = @mapping.dup
36
+ assert other.registered?('foo')
37
+
38
+ # @mapping doesn't leak to other
39
+ @mapping.register(Stub, 'bar')
40
+ refute other.registered?('bar')
41
+
42
+ # other doesn't leak to @mapping
43
+ other.register(Stub, 'baz')
44
+ refute @mapping.registered?('baz')
45
+ end
46
+
47
+ context "lazy with one template class" do
48
+ setup do
49
+ @mapping.register_lazy('MyTemplate', 'my_template', 'mt')
50
+ end
51
+
52
+ teardown do
53
+ Object.send :remove_const, :MyTemplate if defined? ::MyTemplate
54
+ end
55
+
56
+ test "registered?" do
57
+ assert @mapping.registered?('mt')
58
+ end
59
+
60
+ test "basic lookup" do
61
+ req = proc do |file|
62
+ assert_equal 'my_template', file
63
+ class ::MyTemplate; end
64
+ true
65
+ end
66
+
67
+ @mapping.stub :require, req do
68
+ klass = @mapping['hello.mt']
69
+ assert_equal ::MyTemplate, klass
70
+ end
71
+ end
72
+
73
+ test "doesn't require when template class is present" do
74
+ class ::MyTemplate; end
75
+
76
+ req = proc do |file|
77
+ flunk "#require shouldn't be called"
78
+ end
79
+
80
+ @mapping.stub :require, req do
81
+ klass = @mapping['hello.mt']
82
+ assert_equal ::MyTemplate, klass
83
+ end
84
+ end
85
+
86
+ test "raises NameError when the class name is defined" do
87
+ req = proc do |file|
88
+ # do nothing
89
+ end
90
+
91
+ @mapping.stub :require, req do
92
+ assert_raises(NameError) do
93
+ @mapping['hello.mt']
94
+ end
95
+ end
96
+ end
97
+
98
+ test "warns when there's multiple threads" do
99
+ Thread.new do
100
+ req = proc do |file|
101
+ class ::MyTemplate; end
102
+ end
103
+
104
+ @mapping.stub :require, req do
105
+ assert_output '', /autoloading 'my_template'/ do
106
+ @mapping['hello.mt']
107
+ end
108
+ end
109
+ end.join
110
+ end
111
+ end
112
+
113
+ context "lazy with two template classes" do
114
+ setup do
115
+ @mapping.register_lazy('MyTemplate1', 'my_template1', 'mt')
116
+ @mapping.register_lazy('MyTemplate2', 'my_template2', 'mt')
117
+ end
118
+
119
+ teardown do
120
+ Object.send :remove_const, :MyTemplate1 if defined? ::MyTemplate1
121
+ Object.send :remove_const, :MyTemplate2 if defined? ::MyTemplate2
122
+ end
123
+
124
+ test "registered?" do
125
+ assert @mapping.registered?('mt')
126
+ end
127
+
128
+ test "only attempt to load the last template" do
129
+ req = proc do |file|
130
+ assert_equal 'my_template2', file
131
+ class ::MyTemplate2; end
132
+ true
133
+ end
134
+
135
+ @mapping.stub :require, req do
136
+ klass = @mapping['hello.mt']
137
+ assert_equal ::MyTemplate2, klass
138
+ end
139
+ end
140
+
141
+ test "uses the first template if it's present" do
142
+ class ::MyTemplate1; end
143
+
144
+ req = proc do |file|
145
+ flunk
146
+ end
147
+
148
+ @mapping.stub :require, req do
149
+ klass = @mapping['hello.mt']
150
+ assert_equal ::MyTemplate1, klass
151
+ end
152
+ end
153
+
154
+ test "falls back when LoadError is thrown" do
155
+ req = proc do |file|
156
+ raise LoadError unless file == 'my_template1'
157
+ class ::MyTemplate1; end
158
+ true
159
+ end
160
+
161
+ @mapping.stub :require, req do
162
+ klass = @mapping['hello.mt']
163
+ assert_equal ::MyTemplate1, klass
164
+ end
165
+ end
166
+
167
+ test "raises the first LoadError when everything fails" do
168
+ req = proc do |file|
169
+ raise LoadError, file
170
+ end
171
+
172
+ @mapping.stub :require, req do
173
+ err = assert_raises(LoadError) do
174
+ klass = @mapping['hello.mt']
175
+ end
176
+
177
+ assert_equal 'my_template2', err.message
178
+ end
179
+ end
180
+
181
+ test "handles autoloaded constants" do
182
+ Object.autoload :MyTemplate2, 'my_template2'
183
+ class ::MyTemplate1; end
184
+
185
+ assert_equal MyTemplate1, @mapping['hello.mt']
186
+ end
187
+ end
188
+
189
+ test "raises NameError on invalid class name" do
190
+ @mapping.register_lazy '#foo', 'my_template', 'mt'
191
+
192
+ req = proc do |file|
193
+ # do nothing
194
+ end
195
+
196
+ @mapping.stub :require, req do
197
+ assert_raises(NameError) do
198
+ @mapping['hello.mt']
199
+ end
200
+ end
201
+ end
202
+
203
+ context "#templates_for" do
204
+ setup do
205
+ @mapping.register Stub, 'a'
206
+ @mapping.register Stub2, 'b'
207
+ end
208
+
209
+ test "handles multiple engines" do
210
+ assert_equal [Stub2, Stub], @mapping.templates_for('hello/world.a.b')
211
+ end
212
+ end
213
+ end
214
+ end
215
+
@@ -1,10 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'markaby'
5
+ require 'tilt/markaby'
6
6
 
7
- class MarkabyTiltTest < Test::Unit::TestCase
7
+ class MarkabyTiltTest < Minitest::Test
8
8
  def setup
9
9
  @block = lambda do |t|
10
10
  File.read(File.dirname(__FILE__) + "/#{t.file}")
@@ -85,4 +85,4 @@ begin
85
85
 
86
86
  rescue LoadError => boom
87
87
  warn "Tilt::MarkabyTemplate (disabled)"
88
- end
88
+ end
@@ -1,5 +1,6 @@
1
1
  # coding: UTF-8
2
2
  require 'tilt'
3
+ require 'test_helper'
3
4
 
4
5
  begin
5
6
  require 'nokogiri'
@@ -38,9 +39,6 @@ module MarkdownTests
38
39
  end
39
40
 
40
41
  def test_escape_html_true
41
- if self.class.template == Tilt::RedcarpetTemplate
42
- flunk "redcarpet doesn't support :escape_html yet"
43
- end
44
42
  html = nrender "Hello <b>World</b>", :escape_html => true
45
43
  assert_equal "<p>Hello &lt;b&gt;World&lt;/b&gt;</p>", html
46
44
  end
@@ -77,9 +75,9 @@ module MarkdownTests
77
75
  end
78
76
 
79
77
  begin
80
- require 'rdiscount'
78
+ require 'tilt/rdiscount'
81
79
 
82
- class MarkdownRDiscountTest < Test::Unit::TestCase
80
+ class MarkdownRDiscountTest < Minitest::Test
83
81
  include MarkdownTests
84
82
  template Tilt::RDiscountTemplate
85
83
  end
@@ -88,17 +86,18 @@ rescue LoadError => boom
88
86
  end
89
87
 
90
88
  begin
91
- require 'redcarpet'
89
+ require 'tilt/redcarpet'
92
90
 
93
- class MarkdownRedcarpetTest < Test::Unit::TestCase
91
+ class MarkdownRedcarpetTest < Minitest::Test
94
92
  include MarkdownTests
95
93
  template Tilt::RedcarpetTemplate
96
94
  # Doesn't support escaping
97
95
  undef test_escape_html_true
98
96
 
99
97
  def test_smarty_pants_true
98
+ # Various versions of Redcarpet support various versions of Smart pants.
100
99
  html = nrender "Hello ``World'' -- This is --- a test ...", :smartypants => true
101
- assert_equal "<p>Hello “World'' – This is — a test …</p>", html
100
+ assert_match /<p>Hello “World(''|”) – This is — a test …<\/p>/, html
102
101
  end
103
102
 
104
103
  def test_fenced_code_blocks_with_lang
@@ -117,9 +116,9 @@ rescue LoadError => boom
117
116
  end
118
117
 
119
118
  begin
120
- require 'bluecloth'
119
+ require 'tilt/bluecloth'
121
120
 
122
- class MarkdownBlueClothTest < Test::Unit::TestCase
121
+ class MarkdownBlueClothTest < Minitest::Test
123
122
  include MarkdownTests
124
123
  template Tilt::BlueClothTemplate
125
124
  end
@@ -128,9 +127,9 @@ rescue LoadError => boom
128
127
  end
129
128
 
130
129
  begin
131
- require 'kramdown'
130
+ require 'tilt/kramdown'
132
131
 
133
- class MarkdownKramdownTest < Test::Unit::TestCase
132
+ class MarkdownKramdownTest < Minitest::Test
134
133
  include MarkdownTests
135
134
  template Tilt::KramdownTemplate
136
135
  # Doesn't support escaping
@@ -146,9 +145,9 @@ end
146
145
 
147
146
 
148
147
  begin
149
- require 'maruku'
148
+ require 'tilt/maruku'
150
149
 
151
- class MarkdownMarukuTest < Test::Unit::TestCase
150
+ class MarkdownMarukuTest < Minitest::Test
152
151
  include MarkdownTests
153
152
  template Tilt::MarukuTemplate
154
153
  # Doesn't support escaping
@@ -1,27 +1,15 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'maruku'
6
-
7
- class MarukuTemplateTest < Test::Unit::TestCase
8
- test "registered for '.md' files" do
9
- assert Tilt.mappings['md'].include?(Tilt::MarukuTemplate)
10
- end
11
-
12
- test "registered for '.mkd' files" do
13
- assert Tilt.mappings['mkd'].include?(Tilt::MarukuTemplate)
14
- end
15
-
16
- test "registered for '.markdown' files" do
17
- assert Tilt.mappings['markdown'].include?(Tilt::MarukuTemplate)
18
- end
5
+ require 'tilt/maruku'
19
6
 
7
+ class MarukuTemplateTest < Minitest::Test
20
8
  test "registered below Kramdown" do
21
9
  %w[md mkd markdown].each do |ext|
22
- mappings = Tilt.mappings[ext]
23
- kram_idx = mappings.index(Tilt::KramdownTemplate)
24
- maru_idx = mappings.index(Tilt::MarukuTemplate)
10
+ lazy = Tilt.lazy_map[ext]
11
+ kram_idx = lazy.index { |klass, file| klass == 'Tilt::KramdownTemplate' }
12
+ maru_idx = lazy.index { |klass, file| klass == 'Tilt::MarukuTemplate' }
25
13
  assert maru_idx > kram_idx,
26
14
  "#{maru_idx} should be higher than #{kram_idx}"
27
15
  end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+ require 'tilt/template'
3
+
4
+ module Tilt
5
+ class TemplateMetadataTest < Minitest::Test
6
+ class MyTemplate < Template
7
+ metadata[:global] = 1
8
+ self.default_mime_type = 'text/html'
9
+
10
+ def prepare
11
+ end
12
+
13
+ def allows_script?
14
+ true
15
+ end
16
+ end
17
+
18
+ test "global metadata" do
19
+ assert MyTemplate.metadata
20
+ assert_equal 1, MyTemplate.metadata[:global]
21
+ end
22
+
23
+ test "instance metadata" do
24
+ tmpl = MyTemplate.new { '' }
25
+ assert_equal 1, tmpl.metadata[:global]
26
+ end
27
+
28
+ test "gracefully handles default_mime_type" do
29
+ assert_equal 'text/html', MyTemplate.metadata[:mime_type]
30
+ end
31
+
32
+ test "still allows .default_mime_type" do
33
+ assert_equal 'text/html', MyTemplate.default_mime_type
34
+ end
35
+
36
+ test "gracefully handles allows_script?" do
37
+ tmpl = MyTemplate.new { '' }
38
+ assert_equal true, tmpl.metadata[:allows_script]
39
+ end
40
+ end
41
+ end
42
+
@@ -1,9 +1,9 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'nokogiri'
6
- class NokogiriTemplateTest < Test::Unit::TestCase
5
+ require 'tilt/nokogiri'
6
+ class NokogiriTemplateTest < Minitest::Test
7
7
  test "registered for '.nokogiri' files" do
8
8
  assert_equal Tilt::NokogiriTemplate, Tilt['test.nokogiri']
9
9
  assert_equal Tilt::NokogiriTemplate, Tilt['test.xml.nokogiri']
@@ -1,14 +1,14 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'radius'
5
+ require 'tilt/radius'
6
6
 
7
7
  # Disable radius tests under Ruby versions >= 1.9.1 since it's still buggy.
8
8
  # Remove when fixed upstream.
9
9
  raise LoadError if RUBY_VERSION >= "1.9.1" and Radius.version < "0.7"
10
10
 
11
- class RadiusTemplateTest < Test::Unit::TestCase
11
+ class RadiusTemplateTest < Minitest::Test
12
12
  test "registered for '.radius' files" do
13
13
  assert_equal Tilt::RadiusTemplate, Tilt['test.radius']
14
14
  end