tilt 1.4.1 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,22 @@
1
+ require 'tilt/template'
2
+ require 'wikicloth'
3
+
4
+ module Tilt
5
+ # WikiCloth implementation. See:
6
+ # http://redcloth.org/
7
+ class WikiClothTemplate < Template
8
+ def prepare
9
+ @parser = options.delete(:parser) || WikiCloth::Parser
10
+ @engine = @parser.new options.merge(:data => data)
11
+ @output = nil
12
+ end
13
+
14
+ def evaluate(scope, locals, &block)
15
+ @output ||= @engine.to_html
16
+ end
17
+
18
+ def allows_script?
19
+ false
20
+ end
21
+ end
22
+ end
@@ -1,4 +1,5 @@
1
1
  require 'tilt/template'
2
+ require 'yajl'
2
3
 
3
4
  module Tilt
4
5
 
@@ -42,14 +43,6 @@ module Tilt
42
43
 
43
44
  self.default_mime_type = 'application/json'
44
45
 
45
- def self.engine_initialized?
46
- defined? ::Yajl
47
- end
48
-
49
- def initialize_engine
50
- require_template_library 'yajl'
51
- end
52
-
53
46
  def prepare
54
47
  end
55
48
 
@@ -1,21 +1,15 @@
1
- require "test/unit"
1
+ require 'bundler'
2
+ Bundler.setup
2
3
 
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
4
+ require 'minitest/autorun'
5
+ require 'minitest/mock'
12
6
 
13
7
  # Contest adds +teardown+, +test+ and +context+ as class methods, and the
14
8
  # instance methods +setup+ and +teardown+ now iterate on the corresponding
15
9
  # blocks. Note that all setup and teardown blocks must be defined with the
16
10
  # block syntax. Adding setup or teardown instance methods defeats the purpose
17
11
  # of this library.
18
- class Test::Unit::TestCase
12
+ class Minitest::Test
19
13
  def self.setup(&block)
20
14
  define_method :setup do
21
15
  super(&block)
@@ -1,10 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'asciidoctor'
5
+ require 'tilt/asciidoc'
6
6
 
7
- class AsciidoctorTemplateTest < Test::Unit::TestCase
7
+ class AsciidoctorTemplateTest < Minitest::Test
8
8
  HTML5_OUTPUT = "<div class=\"sect1\"><h2 id=\"_hello_world\">Hello World!</h2><div class=\"sectionbody\"></div></div>"
9
9
  DOCBOOK_OUTPUT = "<section id=\"_hello_world\"><title>Hello World!</title></section>"
10
10
 
@@ -13,15 +13,15 @@ begin
13
13
  end
14
14
 
15
15
  test "registered for '.ad' files" do
16
- assert Tilt.mappings['ad'].include?(Tilt::AsciidoctorTemplate)
16
+ assert_equal Tilt::AsciidoctorTemplate, Tilt['ad']
17
17
  end
18
18
 
19
19
  test "registered for '.adoc' files" do
20
- assert Tilt.mappings['adoc'].include?(Tilt::AsciidoctorTemplate)
20
+ assert_equal Tilt::AsciidoctorTemplate, Tilt['adoc']
21
21
  end
22
22
 
23
23
  test "registered for '.asciidoc' files" do
24
- assert Tilt.mappings['asciidoc'].include?(Tilt::AsciidoctorTemplate)
24
+ assert_equal Tilt::AsciidoctorTemplate, Tilt['asciidoc']
25
25
  end
26
26
 
27
27
  test "preparing and evaluating html5 templates on #render" do
@@ -1,22 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'bluecloth'
6
-
7
- class BlueClothTemplateTest < Test::Unit::TestCase
8
- test "registered for '.md' files" do
9
- assert Tilt.mappings['md'].include?(Tilt::BlueClothTemplate)
10
- end
11
-
12
- test "registered for '.mkd' files" do
13
- assert Tilt.mappings['mkd'].include?(Tilt::BlueClothTemplate)
14
- end
15
-
16
- test "registered for '.markdown' files" do
17
- assert Tilt.mappings['markdown'].include?(Tilt::BlueClothTemplate)
18
- end
5
+ require 'tilt/bluecloth'
19
6
 
7
+ class BlueClothTemplateTest < Minitest::Test
20
8
  test "preparing and evaluating templates on #render" do
21
9
  template = Tilt::BlueClothTemplate.new { |t| "# Hello World!" }
22
10
  assert_equal "<h1>Hello World!</h1>", template.render
@@ -1,9 +1,9 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'builder'
6
- class BuilderTemplateTest < Test::Unit::TestCase
5
+ require 'tilt/builder'
6
+ class BuilderTemplateTest < Minitest::Test
7
7
  test "registered for '.builder' files" do
8
8
  assert_equal Tilt::BuilderTemplate, Tilt['test.builder']
9
9
  assert_equal Tilt::BuilderTemplate, Tilt['test.xml.builder']
@@ -1,7 +1,7 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
- class TiltCacheTest < Test::Unit::TestCase
4
+ class TiltCacheTest < Minitest::Test
5
5
  setup { @cache = Tilt::Cache.new }
6
6
 
7
7
  test "caching with single simple argument to #fetch" do
@@ -1,20 +1,10 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'coffee_script'
5
+ require 'tilt/coffee'
6
6
 
7
- class CoffeeScriptTemplateTest < Test::Unit::TestCase
8
-
9
- unless method_defined?(:assert_not_match)
10
- # assert_not_match is missing on 1.8.7, which uses assert_no_match
11
- def assert_not_match(a, b)
12
- unless a.kind_of?(Regexp)
13
- a = Regexp.new(Regexp.escape(a))
14
- end
15
- assert_no_match(a,b)
16
- end
17
- end
7
+ class CoffeeScriptTemplateTest < Minitest::Test
18
8
 
19
9
  test "is registered for '.coffee' files" do
20
10
  assert_equal Tilt::CoffeeScriptTemplate, Tilt['test.coffee']
@@ -42,11 +32,11 @@ begin
42
32
  assert_match "puts(\"Hello \" + name);\n", template.render
43
33
 
44
34
  template = Tilt::CoffeeScriptTemplate.new(:bare => true) { str }
45
- assert_not_match "(function() {", template.render
35
+ refute_match "(function() {", template.render
46
36
  assert_equal "var name;\n\nname = \"Josh\";\n\nputs(\"Hello \" + name);\n", template.render
47
37
 
48
38
  template2 = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { str}
49
- assert_not_match "(function() {", template.render
39
+ refute_match "(function() {", template.render
50
40
  assert_equal "var name;\n\nname = \"Josh\";\n\nputs(\"Hello \" + name);\n", template.render
51
41
  end
52
42
 
@@ -69,13 +59,13 @@ begin
69
59
  test "overridden by :bare" do
70
60
  template = Tilt::CoffeeScriptTemplate.new(:bare => true) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
71
61
  assert_match "puts(\"Hello, \" + name);", template.render
72
- assert_not_match "(function() {", template.render
62
+ refute_match "(function() {", template.render
73
63
  end
74
64
 
75
65
  test "overridden by :no_wrap" do
76
66
  template = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
77
67
  assert_match "puts(\"Hello, \" + name);", template.render
78
- assert_not_match "(function() {", template.render
68
+ refute_match "(function() {", template.render
79
69
  end
80
70
  end
81
71
 
@@ -92,7 +82,7 @@ begin
92
82
  test "no options" do
93
83
  template = Tilt::CoffeeScriptTemplate.new { |t| 'name = "Josh"; puts "Hello, #{name}"' }
94
84
  assert_match "puts(\"Hello, \" + name);", template.render
95
- assert_not_match "(function() {", template.render
85
+ refute_match "(function() {", template.render
96
86
  end
97
87
 
98
88
  test "overridden by :bare" do
@@ -1,8 +1,8 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
  require 'thread'
4
4
 
5
- class CompileSiteTest < Test::Unit::TestCase
5
+ class CompileSiteTest < Minitest::Test
6
6
  def setup
7
7
  GC.start
8
8
  end
@@ -1,18 +1,14 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'creole'
5
+ require 'tilt/creole'
6
6
 
7
- class CreoleTemplateTest < Test::Unit::TestCase
7
+ class CreoleTemplateTest < Minitest::Test
8
8
  test "is registered for '.creole' files" do
9
9
  assert_equal Tilt::CreoleTemplate, Tilt['test.creole']
10
10
  end
11
11
 
12
- test "registered for '.wiki' files" do
13
- assert Tilt.mappings['wiki'].include?(Tilt::CreoleTemplate)
14
- end
15
-
16
12
  test "compiles and evaluates the template on #render" do
17
13
  template = Tilt::CreoleTemplate.new { |t| "= Hello World!" }
18
14
  assert_equal "<h1>Hello World!</h1>", template.render
@@ -1,17 +1,13 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- if RUBY_VERSION >= '1.9.0'
6
- require 'csv'
7
- else
8
- require 'fastercsv'
9
- end
5
+ require 'tilt/csv'
10
6
 
11
- class CSVTemplateTest < Test::Unit::TestCase
7
+ class CSVTemplateTest < Minitest::Test
12
8
 
13
9
  test "registered for '.rcsv' files" do
14
- assert Tilt.mappings['rcsv'].include?(Tilt::CSVTemplate)
10
+ assert_equal Tilt::CSVTemplate, Tilt['rcsv']
15
11
  end
16
12
 
17
13
  test "compiles and evaluates the template on #render" do
@@ -66,4 +62,4 @@ raise NameError
66
62
 
67
63
  # rows
68
64
  csv << ['Frog', 2]
69
- csv << ['Cat', 5]
65
+ csv << ['Cat', 5]
@@ -1,16 +1,16 @@
1
1
  # coding: utf-8
2
- require 'contest'
2
+ require 'test_helper'
3
3
  require 'tilt'
4
- require 'erb'
4
+ require 'tilt/erb'
5
5
  require 'tempfile'
6
6
 
7
- class ERBTemplateTest < Test::Unit::TestCase
7
+ class ERBTemplateTest < Minitest::Test
8
8
  test "registered for '.erb' files" do
9
- assert Tilt.mappings['erb'].include?(Tilt::ERBTemplate)
9
+ assert_includes Tilt.lazy_map['erb'], ['Tilt::ERBTemplate', 'tilt/erb']
10
10
  end
11
11
 
12
12
  test "registered for '.rhtml' files" do
13
- assert Tilt.mappings['rhtml'].include?(Tilt::ERBTemplate)
13
+ assert_includes Tilt.lazy_map['rhtml'], ['Tilt::ERBTemplate', 'tilt/erb']
14
14
  end
15
15
 
16
16
  test "loading and evaluating templates on #render" do
@@ -45,7 +45,7 @@ class ERBTemplateTest < Test::Unit::TestCase
45
45
  template = Tilt::ERBTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
46
46
  scope = MockOutputVariableScope.new
47
47
  template.render(scope)
48
- assert_not_nil scope.exposed_buffer
48
+ refute_nil scope.exposed_buffer
49
49
  assert_equal scope.exposed_buffer, 'hey'
50
50
  ensure
51
51
  Tilt::ERBTemplate.default_output_variable = '_erbout'
@@ -118,7 +118,7 @@ class ERBTemplateTest < Test::Unit::TestCase
118
118
  end
119
119
  end
120
120
 
121
- class CompiledERBTemplateTest < Test::Unit::TestCase
121
+ class CompiledERBTemplateTest < Minitest::Test
122
122
  def teardown
123
123
  GC.start
124
124
  end
@@ -1,9 +1,9 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'erubis'
6
- class ErubisTemplateTest < Test::Unit::TestCase
5
+ require 'tilt/erubis'
6
+ class ErubisTemplateTest < Minitest::Test
7
7
  test "registered for '.erubis' files" do
8
8
  assert_equal Tilt::ErubisTemplate, Tilt['test.erubis']
9
9
  assert_equal Tilt::ErubisTemplate, Tilt['test.html.erubis']
@@ -11,9 +11,9 @@ begin
11
11
 
12
12
  test "registered above ERB" do
13
13
  %w[erb rhtml].each do |ext|
14
- mappings = Tilt.mappings[ext]
15
- erubis_idx = mappings.index(Tilt::ErubisTemplate)
16
- erb_idx = mappings.index(Tilt::ERBTemplate)
14
+ lazy = Tilt.lazy_map[ext]
15
+ erubis_idx = lazy.index { |klass, file| klass == 'Tilt::ErubisTemplate' }
16
+ erb_idx = lazy.index { |klass, file| klass == 'Tilt::ERBTemplate' }
17
17
  assert erubis_idx < erb_idx,
18
18
  "#{erubis_idx} should be lower than #{erb_idx}"
19
19
  end
@@ -51,7 +51,7 @@ begin
51
51
  template = Tilt::ErubisTemplate.new { '<% self.exposed_buffer = @_out_buf %>hey' }
52
52
  scope = MockOutputVariableScope.new
53
53
  template.render(scope)
54
- assert_not_nil scope.exposed_buffer
54
+ refute_nil scope.exposed_buffer
55
55
  assert_equal scope.exposed_buffer, 'hey'
56
56
  ensure
57
57
  Tilt::ErubisTemplate.default_output_variable = '_erbout'
@@ -1,7 +1,8 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
+ require 'tilt/etanni'
3
4
 
4
- class EtanniTemplateTest < Test::Unit::TestCase
5
+ class EtanniTemplateTest < Minitest::Test
5
6
  test "registered for '.etn' files" do
6
7
  assert_equal Tilt::EtanniTemplate, Tilt['test.etn']
7
8
  end
@@ -77,7 +78,7 @@ class EtanniTemplateTest < Test::Unit::TestCase
77
78
  end
78
79
 
79
80
 
80
- class CompiledEtanniTemplateTest < Test::Unit::TestCase
81
+ class CompiledEtanniTemplateTest < Minitest::Test
81
82
  def teardown
82
83
  GC.start
83
84
  end
@@ -1,13 +1,13 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
5
  class ::MockError < NameError
6
6
  end
7
7
 
8
- require 'haml'
8
+ require 'tilt/haml'
9
9
 
10
- class HamlTemplateTest < Test::Unit::TestCase
10
+ class HamlTemplateTest < Minitest::Test
11
11
  test "registered for '.haml' files" do
12
12
  assert_equal Tilt::HamlTemplate, Tilt['test.haml']
13
13
  end
@@ -71,7 +71,7 @@ begin
71
71
  end
72
72
  end
73
73
 
74
- class CompiledHamlTemplateTest < Test::Unit::TestCase
74
+ class CompiledHamlTemplateTest < Minitest::Test
75
75
  class Scope
76
76
  end
77
77
 
@@ -1,40 +1,18 @@
1
- require 'contest'
1
+ require 'test_helper'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'kramdown'
6
-
7
- class MarukuTemplateTest < Test::Unit::TestCase
8
- test "registered for '.md' files" do
9
- assert Tilt.mappings['md'].include?(Tilt::KramdownTemplate)
10
- end
11
-
12
- test "registered for '.mkd' files" do
13
- assert Tilt.mappings['mkd'].include?(Tilt::KramdownTemplate)
14
- end
15
-
16
- test "registered for '.markdown' files" do
17
- assert Tilt.mappings['markdown'].include?(Tilt::KramdownTemplate)
18
- end
19
-
20
- test "registered above MarukuTemplate" do
21
- %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)
25
- assert kram_idx < maru_idx,
26
- "#{kram_idx} should be lower than #{maru_idx}"
27
- end
28
- end
5
+ require 'tilt/kramdown'
29
6
 
7
+ class KramdownTemplateTest < Minitest::Test
30
8
  test "preparing and evaluating templates on #render" do
31
9
  template = Tilt::KramdownTemplate.new { |t| "# Hello World!" }
32
- assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render
10
+ assert_equal '<h1 id="hello-world">Hello World!</h1>', template.render.strip
33
11
  end
34
12
 
35
13
  test "can be rendered more than once" do
36
14
  template = Tilt::KramdownTemplate.new { |t| "# Hello World!" }
37
- 3.times { assert_equal "<h1 id='hello_world'>Hello World!</h1>", template.render }
15
+ 3.times { assert_equal '<h1 id="hello-world">Hello World!</h1>', template.render.strip }
38
16
  end
39
17
  end
40
18
  rescue LoadError => boom