tilt 1.4.1 → 2.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +1 -1
  3. data/bin/tilt +18 -8
  4. data/lib/tilt/asciidoc.rb +1 -8
  5. data/lib/tilt/babel.rb +16 -0
  6. data/lib/tilt/bluecloth.rb +24 -0
  7. data/lib/tilt/builder.rb +12 -15
  8. data/lib/tilt/coffee.rb +10 -6
  9. data/lib/tilt/commonmarker.rb +88 -0
  10. data/lib/tilt/creole.rb +25 -0
  11. data/lib/tilt/csv.rb +12 -18
  12. data/lib/tilt/dummy.rb +3 -0
  13. data/lib/tilt/erb.rb +9 -56
  14. data/lib/tilt/erubi.rb +32 -0
  15. data/lib/tilt/erubis.rb +43 -0
  16. data/lib/tilt/haml.rb +66 -44
  17. data/lib/tilt/kramdown.rb +25 -0
  18. data/lib/tilt/less.rb +30 -0
  19. data/lib/tilt/liquid.rb +9 -10
  20. data/lib/tilt/livescript.rb +23 -0
  21. data/lib/tilt/mapping.rb +293 -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/pandoc.rb +57 -0
  26. data/lib/tilt/plain.rb +0 -4
  27. data/lib/tilt/prawn.rb +43 -0
  28. data/lib/tilt/radius.rb +1 -8
  29. data/lib/tilt/rdiscount.rb +39 -0
  30. data/lib/tilt/rdoc.rb +3 -10
  31. data/lib/tilt/redcarpet.rb +86 -0
  32. data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
  33. data/lib/tilt/rst-pandoc.rb +23 -0
  34. data/lib/tilt/sass.rb +78 -0
  35. data/lib/tilt/sigil.rb +34 -0
  36. data/lib/tilt/string.rb +1 -1
  37. data/lib/tilt/template.rb +121 -105
  38. data/lib/tilt/typescript.rb +26 -0
  39. data/lib/tilt/wikicloth.rb +22 -0
  40. data/lib/tilt/yajl.rb +1 -8
  41. data/lib/tilt.rb +118 -155
  42. metadata +38 -469
  43. data/CHANGELOG.md +0 -44
  44. data/Gemfile +0 -32
  45. data/HACKING +0 -16
  46. data/README.md +0 -232
  47. data/Rakefile +0 -104
  48. data/TEMPLATES.md +0 -516
  49. data/lib/tilt/css.rb +0 -80
  50. data/lib/tilt/markdown.rb +0 -214
  51. data/lib/tilt/wiki.rb +0 -58
  52. data/test/contest.rb +0 -68
  53. data/test/markaby/locals.mab +0 -1
  54. data/test/markaby/markaby.mab +0 -1
  55. data/test/markaby/markaby_other_static.mab +0 -1
  56. data/test/markaby/render_twice.mab +0 -1
  57. data/test/markaby/scope.mab +0 -1
  58. data/test/markaby/yielding.mab +0 -2
  59. data/test/tilt_asciidoctor_test.rb +0 -44
  60. data/test/tilt_blueclothtemplate_test.rb +0 -45
  61. data/test/tilt_buildertemplate_test.rb +0 -59
  62. data/test/tilt_cache_test.rb +0 -32
  63. data/test/tilt_coffeescripttemplate_test.rb +0 -114
  64. data/test/tilt_compilesite_test.rb +0 -51
  65. data/test/tilt_creoletemplate_test.rb +0 -28
  66. data/test/tilt_csv_test.rb +0 -69
  67. data/test/tilt_erbtemplate_test.rb +0 -239
  68. data/test/tilt_erubistemplate_test.rb +0 -151
  69. data/test/tilt_etannitemplate_test.rb +0 -173
  70. data/test/tilt_fallback_test.rb +0 -122
  71. data/test/tilt_hamltemplate_test.rb +0 -144
  72. data/test/tilt_kramdown_test.rb +0 -42
  73. data/test/tilt_lesstemplate_test.less +0 -1
  74. data/test/tilt_lesstemplate_test.rb +0 -42
  75. data/test/tilt_liquidtemplate_test.rb +0 -78
  76. data/test/tilt_markaby_test.rb +0 -88
  77. data/test/tilt_markdown_test.rb +0 -172
  78. data/test/tilt_marukutemplate_test.rb +0 -48
  79. data/test/tilt_nokogiritemplate_test.rb +0 -87
  80. data/test/tilt_radiustemplate_test.rb +0 -75
  81. data/test/tilt_rdiscounttemplate_test.rb +0 -55
  82. data/test/tilt_rdoctemplate_test.rb +0 -31
  83. data/test/tilt_redcarpettemplate_test.rb +0 -71
  84. data/test/tilt_redclothtemplate_test.rb +0 -36
  85. data/test/tilt_sasstemplate_test.rb +0 -41
  86. data/test/tilt_stringtemplate_test.rb +0 -170
  87. data/test/tilt_template_test.rb +0 -323
  88. data/test/tilt_test.rb +0 -65
  89. data/test/tilt_wikiclothtemplate_test.rb +0 -32
  90. data/test/tilt_yajltemplate_test.rb +0 -101
  91. data/tilt.gemspec +0 -120
data/lib/tilt/markdown.rb DELETED
@@ -1,214 +0,0 @@
1
- require 'tilt/template'
2
-
3
- module Tilt
4
- # Discount Markdown implementation. See:
5
- # http://github.com/rtomayko/rdiscount
6
- #
7
- # RDiscount is a simple text filter. It does not support +scope+ or
8
- # +locals+. The +:smart+ and +:filter_html+ options may be set true
9
- # to enable those flags on the underlying RDiscount object.
10
- class RDiscountTemplate < Template
11
- self.default_mime_type = 'text/html'
12
-
13
- ALIAS = {
14
- :escape_html => :filter_html,
15
- :smartypants => :smart
16
- }
17
-
18
- FLAGS = [:smart, :filter_html, :smartypants, :escape_html]
19
-
20
- def flags
21
- FLAGS.select { |flag| options[flag] }.map { |flag| ALIAS[flag] || flag }
22
- end
23
-
24
- def self.engine_initialized?
25
- defined? ::RDiscount
26
- end
27
-
28
- def initialize_engine
29
- require_template_library 'rdiscount'
30
- end
31
-
32
- def prepare
33
- @engine = RDiscount.new(data, *flags)
34
- @output = nil
35
- end
36
-
37
- def evaluate(scope, locals, &block)
38
- @output ||= @engine.to_html
39
- end
40
-
41
- def allows_script?
42
- false
43
- end
44
- end
45
-
46
- # Upskirt Markdown implementation. See:
47
- # https://github.com/tanoku/redcarpet
48
- #
49
- # Supports both Redcarpet 1.x and 2.x
50
- class RedcarpetTemplate < Template
51
- def self.engine_initialized?
52
- defined? ::Redcarpet
53
- end
54
-
55
- def initialize_engine
56
- require_template_library 'redcarpet'
57
- end
58
-
59
- def prepare
60
- klass = [Redcarpet2, Redcarpet1].detect { |e| e.engine_initialized? }
61
- @engine = klass.new(file, line, options) { data }
62
- end
63
-
64
- def evaluate(scope, locals, &block)
65
- @engine.evaluate(scope, locals, &block)
66
- end
67
-
68
- def allows_script?
69
- false
70
- end
71
-
72
- # Compatibility mode for Redcarpet 1.x
73
- class Redcarpet1 < RDiscountTemplate
74
- self.default_mime_type = 'text/html'
75
-
76
- def self.engine_initialized?
77
- defined? ::RedcarpetCompat
78
- end
79
-
80
- def prepare
81
- @engine = RedcarpetCompat.new(data, *flags)
82
- @output = nil
83
- end
84
- end
85
-
86
- # Future proof mode for Redcarpet 2.x (not yet released)
87
- class Redcarpet2 < Template
88
- self.default_mime_type = 'text/html'
89
-
90
- def self.engine_initialized?
91
- defined? ::Redcarpet::Render and defined? ::Redcarpet::Markdown
92
- end
93
-
94
- def generate_renderer
95
- renderer = options.delete(:renderer) || ::Redcarpet::Render::HTML
96
- return renderer unless options.delete(:smartypants)
97
- return renderer if renderer.is_a?(Class) && renderer <= ::Redcarpet::Render::SmartyPants
98
-
99
- if renderer == ::Redcarpet::Render::XHTML
100
- ::Redcarpet::Render::SmartyHTML.new(:xhtml => true)
101
- elsif renderer == ::Redcarpet::Render::HTML
102
- ::Redcarpet::Render::SmartyHTML
103
- elsif renderer.is_a? Class
104
- Class.new(renderer) { include ::Redcarpet::Render::SmartyPants }
105
- else
106
- renderer.extend ::Redcarpet::Render::SmartyPants
107
- end
108
- end
109
-
110
- def prepare
111
- # try to support the same aliases
112
- RDiscountTemplate::ALIAS.each do |opt, aka|
113
- next if options.key? opt or not options.key? aka
114
- options[opt] = options.delete(aka)
115
- end
116
-
117
- # only raise an exception if someone is trying to enable :escape_html
118
- options.delete(:escape_html) unless options[:escape_html]
119
-
120
- @engine = ::Redcarpet::Markdown.new(generate_renderer, options)
121
- @output = nil
122
- end
123
-
124
- def evaluate(scope, locals, &block)
125
- @output ||= @engine.render(data)
126
- end
127
-
128
- def allows_script?
129
- false
130
- end
131
- end
132
- end
133
-
134
- # BlueCloth Markdown implementation. See:
135
- # http://deveiate.org/projects/BlueCloth/
136
- class BlueClothTemplate < Template
137
- self.default_mime_type = 'text/html'
138
-
139
- def self.engine_initialized?
140
- defined? ::BlueCloth
141
- end
142
-
143
- def initialize_engine
144
- require_template_library 'bluecloth'
145
- end
146
-
147
- def prepare
148
- @engine = BlueCloth.new(data, options)
149
- @output = nil
150
- end
151
-
152
- def evaluate(scope, locals, &block)
153
- @output ||= @engine.to_html
154
- end
155
-
156
- def allows_script?
157
- false
158
- end
159
- end
160
-
161
- # Maruku markdown implementation. See:
162
- # http://maruku.rubyforge.org/
163
- class MarukuTemplate < Template
164
- def self.engine_initialized?
165
- defined? ::Maruku
166
- end
167
-
168
- def initialize_engine
169
- require_template_library 'maruku'
170
- end
171
-
172
- def prepare
173
- @engine = Maruku.new(data, options)
174
- @output = nil
175
- end
176
-
177
- def evaluate(scope, locals, &block)
178
- @output ||= @engine.to_html
179
- end
180
-
181
- def allows_script?
182
- false
183
- end
184
- end
185
-
186
- # Kramdown Markdown implementation. See:
187
- # http://kramdown.rubyforge.org/
188
- class KramdownTemplate < Template
189
- DUMB_QUOTES = [39, 39, 34, 34]
190
-
191
- def self.engine_initialized?
192
- defined? ::Kramdown
193
- end
194
-
195
- def initialize_engine
196
- require_template_library 'kramdown'
197
- end
198
-
199
- def prepare
200
- options[:smart_quotes] = DUMB_QUOTES unless options[:smartypants]
201
- @engine = Kramdown::Document.new(data, options)
202
- @output = nil
203
- end
204
-
205
- def evaluate(scope, locals, &block)
206
- @output ||= @engine.to_html
207
- end
208
-
209
- def allows_script?
210
- false
211
- end
212
- end
213
- end
214
-
data/lib/tilt/wiki.rb DELETED
@@ -1,58 +0,0 @@
1
- require 'tilt/template'
2
-
3
- module Tilt
4
- # Creole implementation. See:
5
- # http://www.wikicreole.org/
6
- class CreoleTemplate < Template
7
- def self.engine_initialized?
8
- defined? ::Creole
9
- end
10
-
11
- def initialize_engine
12
- require_template_library 'creole'
13
- end
14
-
15
- def prepare
16
- opts = {}
17
- [:allowed_schemes, :extensions, :no_escape].each do |k|
18
- opts[k] = options[k] if options[k]
19
- end
20
- @engine = Creole::Parser.new(data, opts)
21
- @output = nil
22
- end
23
-
24
- def evaluate(scope, locals, &block)
25
- @output ||= @engine.to_html
26
- end
27
-
28
- def allows_script?
29
- false
30
- end
31
- end
32
-
33
- # WikiCloth implementation. See:
34
- # http://redcloth.org/
35
- class WikiClothTemplate < Template
36
- def self.engine_initialized?
37
- defined? ::WikiCloth::Parser
38
- end
39
-
40
- def initialize_engine
41
- require_template_library 'wikicloth'
42
- end
43
-
44
- def prepare
45
- @parser = options.delete(:parser) || WikiCloth::Parser
46
- @engine = @parser.new options.merge(:data => data)
47
- @output = nil
48
- end
49
-
50
- def evaluate(scope, locals, &block)
51
- @output ||= @engine.to_html
52
- end
53
-
54
- def allows_script?
55
- false
56
- end
57
- end
58
- end
data/test/contest.rb DELETED
@@ -1,68 +0,0 @@
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 +0,0 @@
1
- li foo
@@ -1 +0,0 @@
1
- text "hello from markaby!"
@@ -1 +0,0 @@
1
- text "_why?"
@@ -1 +0,0 @@
1
- text "foo"
@@ -1 +0,0 @@
1
- li foo
@@ -1,2 +0,0 @@
1
- text("Hey ")
2
- yield
@@ -1,44 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'asciidoctor'
6
-
7
- class AsciidoctorTemplateTest < Test::Unit::TestCase
8
- HTML5_OUTPUT = "<div class=\"sect1\"><h2 id=\"_hello_world\">Hello World!</h2><div class=\"sectionbody\"></div></div>"
9
- DOCBOOK_OUTPUT = "<section id=\"_hello_world\"><title>Hello World!</title></section>"
10
-
11
- def strip_space(str)
12
- str.gsub(/>\s+</, '><').strip
13
- end
14
-
15
- test "registered for '.ad' files" do
16
- assert Tilt.mappings['ad'].include?(Tilt::AsciidoctorTemplate)
17
- end
18
-
19
- test "registered for '.adoc' files" do
20
- assert Tilt.mappings['adoc'].include?(Tilt::AsciidoctorTemplate)
21
- end
22
-
23
- test "registered for '.asciidoc' files" do
24
- assert Tilt.mappings['asciidoc'].include?(Tilt::AsciidoctorTemplate)
25
- end
26
-
27
- test "preparing and evaluating html5 templates on #render" do
28
- template = Tilt::AsciidoctorTemplate.new(:attributes => {"backend" => 'html5'}) { |t| "== Hello World!" }
29
- assert_equal HTML5_OUTPUT, strip_space(template.render)
30
- end
31
-
32
- test "preparing and evaluating docbook templates on #render" do
33
- template = Tilt::AsciidoctorTemplate.new(:attributes => {"backend" => 'docbook'}) { |t| "== Hello World!" }
34
- assert_equal DOCBOOK_OUTPUT, strip_space(template.render)
35
- end
36
-
37
- test "can be rendered more than once" do
38
- template = Tilt::AsciidoctorTemplate.new(:attributes => {"backend" => 'html5'}) { |t| "== Hello World!" }
39
- 3.times { assert_equal HTML5_OUTPUT, strip_space(template.render) }
40
- end
41
- end
42
- rescue LoadError => boom
43
- warn "Tilt::AsciidoctorTemplate (disabled)"
44
- end
@@ -1,45 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
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
19
-
20
- test "preparing and evaluating templates on #render" do
21
- template = Tilt::BlueClothTemplate.new { |t| "# Hello World!" }
22
- assert_equal "<h1>Hello World!</h1>", template.render
23
- end
24
-
25
- test "can be rendered more than once" do
26
- template = Tilt::BlueClothTemplate.new { |t| "# Hello World!" }
27
- 3.times { assert_equal "<h1>Hello World!</h1>", template.render }
28
- end
29
-
30
- test "smartypants when :smart is set" do
31
- template = Tilt::BlueClothTemplate.new(:smartypants => true) { |t|
32
- "OKAY -- 'Smarty Pants'" }
33
- assert_equal "<p>OKAY &mdash; &lsquo;Smarty Pants&rsquo;</p>",
34
- template.render
35
- end
36
-
37
- test "stripping HTML when :filter_html is set" do
38
- template = Tilt::BlueClothTemplate.new(:escape_html => true) { |t|
39
- "HELLO <blink>WORLD</blink>" }
40
- assert_equal "<p>HELLO &lt;blink>WORLD&lt;/blink></p>", template.render
41
- end
42
- end
43
- rescue LoadError => boom
44
- warn "Tilt::BlueClothTemplate (disabled)"
45
- end
@@ -1,59 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'builder'
6
- class BuilderTemplateTest < Test::Unit::TestCase
7
- test "registered for '.builder' files" do
8
- assert_equal Tilt::BuilderTemplate, Tilt['test.builder']
9
- assert_equal Tilt::BuilderTemplate, Tilt['test.xml.builder']
10
- end
11
-
12
- test "preparing and evaluating the template on #render" do
13
- template = Tilt::BuilderTemplate.new { |t| "xml.em 'Hello World!'" }
14
- assert_equal "<em>Hello World!</em>\n", template.render
15
- end
16
-
17
- test "can be rendered more than once" do
18
- template = Tilt::BuilderTemplate.new { |t| "xml.em 'Hello World!'" }
19
- 3.times { assert_equal "<em>Hello World!</em>\n", template.render }
20
- end
21
-
22
- test "passing locals" do
23
- template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + name + '!')" }
24
- assert_equal "<em>Hey Joe!</em>\n", template.render(Object.new, :name => 'Joe')
25
- end
26
-
27
- test "evaluating in an object scope" do
28
- template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + @name + '!')" }
29
- scope = Object.new
30
- scope.instance_variable_set :@name, 'Joe'
31
- assert_equal "<em>Hey Joe!</em>\n", template.render(scope)
32
- end
33
-
34
- test "passing a block for yield" do
35
- template = Tilt::BuilderTemplate.new { "xml.em('Hey ' + yield + '!')" }
36
- 3.times { assert_equal "<em>Hey Joe!</em>\n", template.render { 'Joe' }}
37
- end
38
-
39
- test "block style templates" do
40
- template =
41
- Tilt::BuilderTemplate.new do |t|
42
- lambda { |xml| xml.em('Hey Joe!') }
43
- end
44
- assert_equal "<em>Hey Joe!</em>\n", template.render
45
- end
46
-
47
- test "allows nesting raw XML" do
48
- subtemplate = Tilt::BuilderTemplate.new { "xml.em 'Hello World!'" }
49
- template = Tilt::BuilderTemplate.new { "xml.strong { xml << yield }" }
50
- 3.times do
51
- options = { :xml => Builder::XmlMarkup.new }
52
- assert_equal "<strong>\n<em>Hello World!</em>\n</strong>\n",
53
- template.render(options) { subtemplate.render(options) }
54
- end
55
- end
56
- end
57
- rescue LoadError
58
- warn "Tilt::BuilderTemplate (disabled)"
59
- end
@@ -1,32 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- class TiltCacheTest < Test::Unit::TestCase
5
- setup { @cache = Tilt::Cache.new }
6
-
7
- test "caching with single simple argument to #fetch" do
8
- template = nil
9
- result = @cache.fetch('hello') { template = Tilt::StringTemplate.new {''} }
10
- assert_same template, result
11
- result = @cache.fetch('hello') { fail 'should be cached' }
12
- assert_same template, result
13
- end
14
-
15
- test "caching with multiple complex arguments to #fetch" do
16
- template = nil
17
- result = @cache.fetch('hello', {:foo => 'bar', :baz => 'bizzle'}) { template = Tilt::StringTemplate.new {''} }
18
- assert_same template, result
19
- result = @cache.fetch('hello', {:foo => 'bar', :baz => 'bizzle'}) { fail 'should be cached' }
20
- assert_same template, result
21
- end
22
-
23
- test "clearing the cache with #clear" do
24
- template, other = nil
25
- result = @cache.fetch('hello') { template = Tilt::StringTemplate.new {''} }
26
- assert_same template, result
27
-
28
- @cache.clear
29
- result = @cache.fetch('hello') { other = Tilt::StringTemplate.new {''} }
30
- assert_same other, result
31
- end
32
- end
@@ -1,114 +0,0 @@
1
- require 'contest'
2
- require 'tilt'
3
-
4
- begin
5
- require 'coffee_script'
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
18
-
19
- test "is registered for '.coffee' files" do
20
- assert_equal Tilt::CoffeeScriptTemplate, Tilt['test.coffee']
21
- end
22
-
23
- test "bare is disabled by default" do
24
- assert_equal false, Tilt::CoffeeScriptTemplate.default_bare
25
- end
26
-
27
- test "compiles and evaluates the template on #render" do
28
- template = Tilt::CoffeeScriptTemplate.new { |t| "puts 'Hello, World!'\n" }
29
- assert_match "puts('Hello, World!');", template.render
30
- end
31
-
32
- test "can be rendered more than once" do
33
- template = Tilt::CoffeeScriptTemplate.new { |t| "puts 'Hello, World!'\n" }
34
- 3.times { assert_match "puts('Hello, World!');", template.render }
35
- end
36
-
37
- test "disabling coffee-script wrapper" do
38
- str = 'name = "Josh"; puts "Hello #{name}"'
39
-
40
- template = Tilt::CoffeeScriptTemplate.new { str }
41
- assert_match "(function() {", template.render
42
- assert_match "puts(\"Hello \" + name);\n", template.render
43
-
44
- template = Tilt::CoffeeScriptTemplate.new(:bare => true) { str }
45
- assert_not_match "(function() {", template.render
46
- assert_equal "var name;\n\nname = \"Josh\";\n\nputs(\"Hello \" + name);\n", template.render
47
-
48
- template2 = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { str}
49
- assert_not_match "(function() {", template.render
50
- assert_equal "var name;\n\nname = \"Josh\";\n\nputs(\"Hello \" + name);\n", template.render
51
- end
52
-
53
- context "wrapper globally enabled" do
54
- setup do
55
- @bare = Tilt::CoffeeScriptTemplate.default_bare
56
- Tilt::CoffeeScriptTemplate.default_bare = false
57
- end
58
-
59
- teardown do
60
- Tilt::CoffeeScriptTemplate.default_bare = @bare
61
- end
62
-
63
- test "no options" do
64
- template = Tilt::CoffeeScriptTemplate.new { |t| 'name = "Josh"; puts "Hello, #{name}"' }
65
- assert_match "puts(\"Hello, \" + name);", template.render
66
- assert_match "(function() {", template.render
67
- end
68
-
69
- test "overridden by :bare" do
70
- template = Tilt::CoffeeScriptTemplate.new(:bare => true) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
71
- assert_match "puts(\"Hello, \" + name);", template.render
72
- assert_not_match "(function() {", template.render
73
- end
74
-
75
- test "overridden by :no_wrap" do
76
- template = Tilt::CoffeeScriptTemplate.new(:no_wrap => true) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
77
- assert_match "puts(\"Hello, \" + name);", template.render
78
- assert_not_match "(function() {", template.render
79
- end
80
- end
81
-
82
- context "wrapper globally disabled" do
83
- setup do
84
- @bare = Tilt::CoffeeScriptTemplate.default_bare
85
- Tilt::CoffeeScriptTemplate.default_bare = true
86
- end
87
-
88
- teardown do
89
- Tilt::CoffeeScriptTemplate.default_bare = @bare
90
- end
91
-
92
- test "no options" do
93
- template = Tilt::CoffeeScriptTemplate.new { |t| 'name = "Josh"; puts "Hello, #{name}"' }
94
- assert_match "puts(\"Hello, \" + name);", template.render
95
- assert_not_match "(function() {", template.render
96
- end
97
-
98
- test "overridden by :bare" do
99
- template = Tilt::CoffeeScriptTemplate.new(:bare => false) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
100
- assert_match "puts(\"Hello, \" + name);", template.render
101
- assert_match "(function() {", template.render
102
- end
103
-
104
- test "overridden by :no_wrap" do
105
- template = Tilt::CoffeeScriptTemplate.new(:no_wrap => false) { |t| 'name = "Josh"; puts "Hello, #{name}"' }
106
- assert_match "puts(\"Hello, \" + name);", template.render
107
- assert_match "(function() {", template.render
108
- end
109
- end
110
- end
111
-
112
- rescue LoadError => boom
113
- warn "Tilt::CoffeeScriptTemplate (disabled)"
114
- end