tilt 1.2.2 → 1.3.3

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 (43) hide show
  1. data/Gemfile +2 -0
  2. data/README.md +59 -24
  3. data/TEMPLATES.md +252 -175
  4. data/lib/tilt/builder.rb +40 -0
  5. data/lib/tilt/coffee.rb +50 -0
  6. data/lib/tilt/css.rb +72 -0
  7. data/lib/tilt/erb.rb +110 -0
  8. data/lib/tilt/haml.rb +64 -0
  9. data/lib/tilt/liquid.rb +41 -0
  10. data/lib/tilt/markaby.rb +52 -0
  11. data/lib/tilt/markdown.rb +190 -0
  12. data/lib/tilt/nokogiri.rb +43 -0
  13. data/lib/tilt/radius.rb +51 -0
  14. data/lib/tilt/rdoc.rb +32 -0
  15. data/lib/tilt/string.rb +21 -0
  16. data/lib/tilt/template.rb +285 -0
  17. data/lib/tilt/textile.rb +25 -0
  18. data/lib/tilt/wiki.rb +50 -0
  19. data/lib/tilt/yajl.rb +94 -0
  20. data/lib/tilt.rb +105 -816
  21. data/test/tilt_blueclothtemplate_test.rb +6 -25
  22. data/test/tilt_coffeescripttemplate_test.rb +32 -1
  23. data/test/tilt_compilesite_test.rb +1 -1
  24. data/test/tilt_creoletemplate_test.rb +28 -0
  25. data/test/tilt_erbtemplate_test.rb +18 -19
  26. data/test/tilt_erubistemplate_test.rb +12 -2
  27. data/test/tilt_fallback_test.rb +122 -0
  28. data/test/tilt_hamltemplate_test.rb +4 -4
  29. data/test/tilt_kramdown_test.rb +42 -0
  30. data/test/tilt_lesstemplate_test.rb +3 -2
  31. data/test/tilt_markdown_test.rb +161 -0
  32. data/test/tilt_marukutemplate_test.rb +48 -0
  33. data/test/tilt_nokogiritemplate_test.rb +11 -0
  34. data/test/tilt_radiustemplate_test.rb +3 -3
  35. data/test/tilt_rdiscounttemplate_test.rb +16 -6
  36. data/test/tilt_redcarpettemplate_test.rb +59 -0
  37. data/test/tilt_sasstemplate_test.rb +0 -1
  38. data/test/tilt_stringtemplate_test.rb +10 -3
  39. data/test/tilt_template_test.rb +6 -0
  40. data/test/tilt_wikiclothtemplate_test.rb +32 -0
  41. data/test/tilt_yajltemplate_test.rb +92 -0
  42. data/tilt.gemspec +39 -8
  43. metadata +276 -150
@@ -70,6 +70,17 @@ begin
70
70
  assert_equal 'strong', doc.root.name
71
71
  end
72
72
  end
73
+
74
+ test "doesn't modify self when template is a string" do
75
+ template = Tilt::NokogiriTemplate.new { "xml.root { xml.child @hello }" }
76
+ scope = Object.new
77
+ scope.instance_variable_set(:@hello, "Hello World!")
78
+
79
+ 3.times do
80
+ doc = Nokogiri.XML(template.render(scope))
81
+ assert_equal "Hello World!", doc.text.strip
82
+ end
83
+ end
73
84
  end
74
85
  rescue LoadError
75
86
  warn "Tilt::NokogiriTemplate (disabled)"
@@ -2,11 +2,11 @@ require 'contest'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
+ require 'radius'
6
+
5
7
  # Disable radius tests under Ruby versions >= 1.9.1 since it's still buggy.
6
8
  # Remove when fixed upstream.
7
- raise LoadError if RUBY_VERSION >= "1.9.1"
8
-
9
- require 'radius'
9
+ raise LoadError if RUBY_VERSION >= "1.9.1" and Radius.version < "0.7"
10
10
 
11
11
  class RadiusTemplateTest < Test::Unit::TestCase
12
12
  test "registered for '.radius' files" do
@@ -5,16 +5,26 @@ begin
5
5
  require 'rdiscount'
6
6
 
7
7
  class RDiscountTemplateTest < Test::Unit::TestCase
8
- test "registered for '.markdown' files" do
9
- assert_equal Tilt::RDiscountTemplate, Tilt['test.markdown']
10
- end
11
-
12
8
  test "registered for '.md' files" do
13
- assert_equal Tilt::RDiscountTemplate, Tilt['test.md']
9
+ assert Tilt.mappings['md'].include?(Tilt::RDiscountTemplate)
14
10
  end
15
11
 
16
12
  test "registered for '.mkd' files" do
17
- assert_equal Tilt::RDiscountTemplate, Tilt['test.mkd']
13
+ assert Tilt.mappings['mkd'].include?(Tilt::RDiscountTemplate)
14
+ end
15
+
16
+ test "registered for '.markdown' files" do
17
+ assert Tilt.mappings['markdown'].include?(Tilt::RDiscountTemplate)
18
+ end
19
+
20
+ test "registered above BlueCloth" do
21
+ %w[md mkd markdown].each do |ext|
22
+ mappings = Tilt.mappings[ext]
23
+ blue_idx = mappings.index(Tilt::BlueClothTemplate)
24
+ rdis_idx = mappings.index(Tilt::RDiscountTemplate)
25
+ assert rdis_idx < blue_idx,
26
+ "#{rdis_idx} should be lower than #{blue_idx}"
27
+ end
18
28
  end
19
29
 
20
30
  test "preparing and evaluating templates on #render" do
@@ -0,0 +1,59 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'redcarpet'
6
+
7
+ class RedcarpetTemplateTest < Test::Unit::TestCase
8
+ test "registered for '.md' files" do
9
+ assert Tilt.mappings['md'].include?(Tilt::RedcarpetTemplate)
10
+ end
11
+
12
+ test "registered for '.mkd' files" do
13
+ assert Tilt.mappings['mkd'].include?(Tilt::RedcarpetTemplate)
14
+ end
15
+
16
+ test "registered for '.markdown' files" do
17
+ assert Tilt.mappings['markdown'].include?(Tilt::RedcarpetTemplate)
18
+ end
19
+
20
+ test "registered above BlueCloth" do
21
+ %w[md mkd markdown].each do |ext|
22
+ mappings = Tilt.mappings[ext]
23
+ blue_idx = mappings.index(Tilt::BlueClothTemplate)
24
+ redc_idx = mappings.index(Tilt::RedcarpetTemplate)
25
+ assert redc_idx < blue_idx,
26
+ "#{redc_idx} should be lower than #{blue_idx}"
27
+ end
28
+ end
29
+
30
+ test "registered above RDiscount" do
31
+ %w[md mkd markdown].each do |ext|
32
+ mappings = Tilt.mappings[ext]
33
+ rdis_idx = mappings.index(Tilt::RDiscountTemplate)
34
+ redc_idx = mappings.index(Tilt::RedcarpetTemplate)
35
+ assert redc_idx < rdis_idx,
36
+ "#{redc_idx} should be lower than #{rdis_idx}"
37
+ end
38
+ end
39
+
40
+ test "preparing and evaluating templates on #render" do
41
+ template = Tilt::RedcarpetTemplate.new { |t| "# Hello World!" }
42
+ assert_equal "<h1>Hello World!</h1>\n", template.render
43
+ end
44
+
45
+ test "can be rendered more than once" do
46
+ template = Tilt::RedcarpetTemplate.new { |t| "# Hello World!" }
47
+ 3.times { assert_equal "<h1>Hello World!</h1>\n", template.render }
48
+ end
49
+
50
+ test "smartypants when :smart is set" do
51
+ template = Tilt::RedcarpetTemplate.new(:smart => true) { |t|
52
+ "OKAY -- 'Smarty Pants'" }
53
+ assert_match /<p>OKAY &[nm]dash; &lsquo;Smarty Pants&rsquo;<\/p>/,
54
+ template.render
55
+ end
56
+ end
57
+ rescue LoadError => boom
58
+ warn "Tilt::RedcarpetTemplate (disabled)\n"
59
+ end
@@ -2,7 +2,6 @@ require 'contest'
2
2
  require 'tilt'
3
3
 
4
4
  begin
5
- require 'haml'
6
5
  require 'sass'
7
6
 
8
7
  class SassTemplateTest < Test::Unit::TestCase
@@ -48,9 +48,9 @@ class StringTemplateTest < Test::Unit::TestCase
48
48
  fail 'should have raised an exception'
49
49
  rescue => boom
50
50
  assert_kind_of NameError, boom
51
- line = boom.backtrace.first
51
+ line = boom.backtrace.grep(/^test\.str:/).first
52
+ assert line, "Backtrace didn't contain test.str"
52
53
  file, line, meth = line.split(":")
53
- assert_equal 'test.str', file
54
54
  assert_equal '13', line
55
55
  end
56
56
  end
@@ -119,6 +119,12 @@ class CompiledStringTemplateTest < Test::Unit::TestCase
119
119
  assert_equal "Hello\nWorld!\n", template.render(Scope.new)
120
120
  end
121
121
 
122
+
123
+ test "template with '}'" do
124
+ template = Tilt::StringTemplate.new { "Hello }" }
125
+ assert_equal "Hello }", template.render
126
+ end
127
+
122
128
  test "backtrace file and line reporting without locals" do
123
129
  data = File.read(__FILE__).split("\n__END__\n").last
124
130
  fail unless data[0] == ?<
@@ -129,8 +135,9 @@ class CompiledStringTemplateTest < Test::Unit::TestCase
129
135
  rescue => boom
130
136
  assert_kind_of NameError, boom
131
137
  line = boom.backtrace.first
138
+ line = boom.backtrace.grep(/^test\.str:/).first
139
+ assert line, "Backtrace didn't contain test.str"
132
140
  file, line, meth = line.split(":")
133
- assert_equal 'test.str', file
134
141
  assert_equal '13', line
135
142
  end
136
143
  end
@@ -121,6 +121,12 @@ class TiltTemplateTest < Test::Unit::TestCase
121
121
  assert inst.prepared?
122
122
  end
123
123
 
124
+ test "template_source with locals of strings" do
125
+ inst = SourceGeneratingMockTemplate.new { |t| 'Hey #{name}!' }
126
+ assert_equal "Hey Joe!", inst.render(Object.new, 'name' => 'Joe')
127
+ assert inst.prepared?
128
+ end
129
+
124
130
  class Person
125
131
  CONSTANT = "Bob"
126
132
 
@@ -0,0 +1,32 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'wikicloth'
6
+
7
+ class WikiClothTemplateTest < Test::Unit::TestCase
8
+ test "is registered for '.mediawiki' files" do
9
+ assert_equal Tilt::WikiClothTemplate, Tilt['test.mediawiki']
10
+ end
11
+
12
+ test "is registered for '.mw' files" do
13
+ assert_equal Tilt::WikiClothTemplate, Tilt['test.mw']
14
+ end
15
+
16
+ test "is registered for '.wiki' files" do
17
+ assert_equal Tilt::WikiClothTemplate, Tilt['test.wiki']
18
+ end
19
+
20
+ test "compiles and evaluates the template on #render" do
21
+ template = Tilt::WikiClothTemplate.new { |t| "= Hello World! =" }
22
+ assert_match /<h1>.*Hello World!.*<\/h1>/, template.render
23
+ end
24
+
25
+ test "can be rendered more than once" do
26
+ template = Tilt::WikiClothTemplate.new { |t| "= Hello World! =" }
27
+ 3.times { assert_match /<h1>.*Hello World!.*<\/h1>/, template.render }
28
+ end
29
+ end
30
+ rescue LoadError => boom
31
+ warn "Tilt::WikiClothTemplate (disabled)\n"
32
+ end
@@ -0,0 +1,92 @@
1
+ require 'contest'
2
+ require 'tilt'
3
+
4
+ begin
5
+ require 'yajl'
6
+
7
+ class YajlTemplateTest < Test::Unit::TestCase
8
+ test "is registered for '.yajl' files" do
9
+ assert_equal Tilt::YajlTemplate, Tilt['test.yajl']
10
+ end
11
+
12
+ test "compiles and evaluates the template on #render" do
13
+ template = Tilt::YajlTemplate.new { "json = { :integer => 3, :string => 'hello' }" }
14
+ assert_equal '{"integer":3,"string":"hello"}', template.render
15
+ end
16
+
17
+ test "can be rendered more than once" do
18
+ template = Tilt::YajlTemplate.new { "json = { :integer => 3, :string => 'hello' }" }
19
+ 3.times { assert_equal '{"integer":3,"string":"hello"}', template.render }
20
+ end
21
+
22
+ test "evaluating ruby code" do
23
+ template = Tilt::YajlTemplate.new { "json = { :integer => (3 * 2) }" }
24
+ assert_equal '{"integer":6}', template.render
25
+ end
26
+
27
+ test "evaluating in an object scope" do
28
+ template = Tilt::YajlTemplate.new { "json = { :string => 'Hey ' + @name + '!' }" }
29
+ scope = Object.new
30
+ scope.instance_variable_set :@name, 'Joe'
31
+ assert_equal '{"string":"Hey Joe!"}', template.render(scope)
32
+ end
33
+
34
+ test "passing locals" do
35
+ template = Tilt::YajlTemplate.new { "json = { :string => 'Hey ' + name + '!' }" }
36
+ assert_equal '{"string":"Hey Joe!"}', template.render(Object.new, :name => 'Joe')
37
+ end
38
+
39
+ test "passing a block for yield" do
40
+ template = Tilt::YajlTemplate.new { "json = { :string => 'Hey ' + yield + '!' }" }
41
+ assert_equal '{"string":"Hey Joe!"}', template.render { 'Joe' }
42
+ assert_equal '{"string":"Hey Moe!"}', template.render { 'Moe' }
43
+ end
44
+
45
+ test "template multiline" do
46
+ template = Tilt::YajlTemplate.new { %Q{
47
+ json = {
48
+ :string => "hello"
49
+ }
50
+ } }
51
+ assert_equal '{"string":"hello"}', template.render
52
+ end
53
+
54
+ test "template can reuse existing json buffer" do
55
+ template = Tilt::YajlTemplate.new { "json.merge! :string => 'hello'" }
56
+ assert_equal '{"string":"hello"}', template.render
57
+ end
58
+
59
+ test "template can end with any statement" do
60
+ template = Tilt::YajlTemplate.new { %Q{
61
+ json = {
62
+ :string => "hello"
63
+ }
64
+ four = 2 * 2
65
+ json[:integer] = four
66
+ nil
67
+ } }
68
+ assert_equal '{"string":"hello","integer":4}', template.render
69
+ end
70
+
71
+ test "option callback" do
72
+ options = { :callback => 'foo' }
73
+ template = Tilt::YajlTemplate.new(nil, options) { "json = { :string => 'hello' }" }
74
+ assert_equal 'foo({"string":"hello"});', template.render
75
+ end
76
+
77
+ test "option variable" do
78
+ options = { :variable => 'output' }
79
+ template = Tilt::YajlTemplate.new(nil, options) { "json = { :string => 'hello' }" }
80
+ assert_equal 'var output = {"string":"hello"};', template.render
81
+ end
82
+
83
+ test "option callback and variable" do
84
+ options = { :callback => 'foo', :variable => 'output' }
85
+ template = Tilt::YajlTemplate.new(nil, options) { "json = { :string => 'hello' }" }
86
+ assert_equal 'var output = {"string":"hello"}; foo(output);', template.render
87
+ end
88
+
89
+ end
90
+ rescue LoadError
91
+ warn "Tilt::YajlTemplateTest (disabled)\n"
92
+ 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 = '1.2.2'
7
- s.date = '2011-01-17'
6
+ s.version = '1.3.3'
7
+ s.date = '2011-08-25'
8
8
 
9
9
  s.description = "Generic interface to multiple Ruby template engines"
10
10
  s.summary = s.description
@@ -15,11 +15,28 @@ Gem::Specification.new do |s|
15
15
  # = MANIFEST =
16
16
  s.files = %w[
17
17
  COPYING
18
+ Gemfile
18
19
  README.md
19
20
  Rakefile
20
21
  TEMPLATES.md
21
22
  bin/tilt
22
23
  lib/tilt.rb
24
+ lib/tilt/builder.rb
25
+ lib/tilt/coffee.rb
26
+ lib/tilt/css.rb
27
+ lib/tilt/erb.rb
28
+ lib/tilt/haml.rb
29
+ lib/tilt/liquid.rb
30
+ lib/tilt/markaby.rb
31
+ lib/tilt/markdown.rb
32
+ lib/tilt/nokogiri.rb
33
+ lib/tilt/radius.rb
34
+ lib/tilt/rdoc.rb
35
+ lib/tilt/string.rb
36
+ lib/tilt/template.rb
37
+ lib/tilt/textile.rb
38
+ lib/tilt/wiki.rb
39
+ lib/tilt/yajl.rb
23
40
  test/contest.rb
24
41
  test/markaby/locals.mab
25
42
  test/markaby/markaby.mab
@@ -32,33 +49,40 @@ Gem::Specification.new do |s|
32
49
  test/tilt_cache_test.rb
33
50
  test/tilt_coffeescripttemplate_test.rb
34
51
  test/tilt_compilesite_test.rb
52
+ test/tilt_creoletemplate_test.rb
35
53
  test/tilt_erbtemplate_test.rb
36
54
  test/tilt_erubistemplate_test.rb
55
+ test/tilt_fallback_test.rb
37
56
  test/tilt_hamltemplate_test.rb
57
+ test/tilt_kramdown_test.rb
38
58
  test/tilt_lesstemplate_test.rb
39
59
  test/tilt_liquidtemplate_test.rb
40
60
  test/tilt_markaby_test.rb
61
+ test/tilt_markdown_test.rb
62
+ test/tilt_marukutemplate_test.rb
41
63
  test/tilt_nokogiritemplate_test.rb
42
64
  test/tilt_radiustemplate_test.rb
43
65
  test/tilt_rdiscounttemplate_test.rb
44
66
  test/tilt_rdoctemplate_test.rb
67
+ test/tilt_redcarpettemplate_test.rb
45
68
  test/tilt_redclothtemplate_test.rb
46
69
  test/tilt_sasstemplate_test.rb
47
70
  test/tilt_stringtemplate_test.rb
48
71
  test/tilt_template_test.rb
49
72
  test/tilt_test.rb
73
+ test/tilt_wikiclothtemplate_test.rb
74
+ test/tilt_yajltemplate_test.rb
50
75
  tilt.gemspec
51
76
  ]
52
77
  # = MANIFEST =
53
78
 
54
- s.default_executable = 'tilt'
55
79
  s.executables = ['tilt']
56
-
57
80
  s.test_files = s.files.select {|path| path =~ /^test\/.*_test.rb/}
58
81
  s.add_development_dependency 'contest'
59
82
  s.add_development_dependency 'builder'
60
83
  s.add_development_dependency 'erubis'
61
84
  s.add_development_dependency 'haml', '>= 2.2.11'
85
+ s.add_development_dependency 'sass'
62
86
  s.add_development_dependency 'rdiscount'
63
87
  s.add_development_dependency 'liquid'
64
88
  s.add_development_dependency 'less'
@@ -66,13 +90,20 @@ Gem::Specification.new do |s|
66
90
  s.add_development_dependency 'nokogiri'
67
91
  s.add_development_dependency 'markaby'
68
92
  s.add_development_dependency 'coffee-script'
93
+ s.add_development_dependency 'bluecloth'
94
+ s.add_development_dependency 'RedCloth'
95
+ s.add_development_dependency 'maruku'
96
+ s.add_development_dependency 'creole'
97
+ s.add_development_dependency 'kramdown'
98
+ s.add_development_dependency 'redcarpet'
99
+ s.add_development_dependency 'creole'
100
+ s.add_development_dependency 'yajl-ruby'
101
+ s.add_development_dependency 'wikicloth'
102
+ s.add_development_dependency 'redcarpet'
103
+ s.add_development_dependency 'kramdown'
69
104
 
70
- s.extra_rdoc_files = %w[COPYING]
71
-
72
- s.has_rdoc = true
73
105
  s.homepage = "http://github.com/rtomayko/tilt/"
74
106
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tilt", "--main", "Tilt"]
75
107
  s.require_paths = %w[lib]
76
- s.rubyforge_project = 'wink'
77
108
  s.rubygems_version = '1.1.1'
78
109
  end