tilt 1.4.1 → 2.0.11
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.
- checksums.yaml +7 -0
- data/COPYING +1 -1
- data/bin/tilt +18 -8
- data/lib/tilt/asciidoc.rb +1 -8
- data/lib/tilt/babel.rb +16 -0
- data/lib/tilt/bluecloth.rb +24 -0
- data/lib/tilt/builder.rb +12 -15
- data/lib/tilt/coffee.rb +10 -6
- data/lib/tilt/commonmarker.rb +88 -0
- data/lib/tilt/creole.rb +25 -0
- data/lib/tilt/csv.rb +12 -18
- data/lib/tilt/dummy.rb +3 -0
- data/lib/tilt/erb.rb +9 -56
- data/lib/tilt/erubi.rb +32 -0
- data/lib/tilt/erubis.rb +43 -0
- data/lib/tilt/haml.rb +66 -44
- data/lib/tilt/kramdown.rb +25 -0
- data/lib/tilt/less.rb +30 -0
- data/lib/tilt/liquid.rb +9 -10
- data/lib/tilt/livescript.rb +23 -0
- data/lib/tilt/mapping.rb +293 -0
- data/lib/tilt/markaby.rb +1 -8
- data/lib/tilt/maruku.rb +22 -0
- data/lib/tilt/nokogiri.rb +1 -8
- data/lib/tilt/pandoc.rb +57 -0
- data/lib/tilt/plain.rb +0 -4
- data/lib/tilt/prawn.rb +43 -0
- data/lib/tilt/radius.rb +1 -8
- data/lib/tilt/rdiscount.rb +39 -0
- data/lib/tilt/rdoc.rb +3 -10
- data/lib/tilt/redcarpet.rb +86 -0
- data/lib/tilt/{textile.rb → redcloth.rb} +1 -8
- data/lib/tilt/rst-pandoc.rb +23 -0
- data/lib/tilt/sass.rb +78 -0
- data/lib/tilt/sigil.rb +34 -0
- data/lib/tilt/string.rb +1 -1
- data/lib/tilt/template.rb +121 -105
- data/lib/tilt/typescript.rb +26 -0
- data/lib/tilt/wikicloth.rb +22 -0
- data/lib/tilt/yajl.rb +1 -8
- data/lib/tilt.rb +118 -155
- metadata +38 -469
- data/CHANGELOG.md +0 -44
- data/Gemfile +0 -32
- data/HACKING +0 -16
- data/README.md +0 -232
- data/Rakefile +0 -104
- data/TEMPLATES.md +0 -516
- data/lib/tilt/css.rb +0 -80
- data/lib/tilt/markdown.rb +0 -214
- data/lib/tilt/wiki.rb +0 -58
- data/test/contest.rb +0 -68
- data/test/markaby/locals.mab +0 -1
- data/test/markaby/markaby.mab +0 -1
- data/test/markaby/markaby_other_static.mab +0 -1
- data/test/markaby/render_twice.mab +0 -1
- data/test/markaby/scope.mab +0 -1
- data/test/markaby/yielding.mab +0 -2
- data/test/tilt_asciidoctor_test.rb +0 -44
- data/test/tilt_blueclothtemplate_test.rb +0 -45
- data/test/tilt_buildertemplate_test.rb +0 -59
- data/test/tilt_cache_test.rb +0 -32
- data/test/tilt_coffeescripttemplate_test.rb +0 -114
- data/test/tilt_compilesite_test.rb +0 -51
- data/test/tilt_creoletemplate_test.rb +0 -28
- data/test/tilt_csv_test.rb +0 -69
- data/test/tilt_erbtemplate_test.rb +0 -239
- data/test/tilt_erubistemplate_test.rb +0 -151
- data/test/tilt_etannitemplate_test.rb +0 -173
- data/test/tilt_fallback_test.rb +0 -122
- data/test/tilt_hamltemplate_test.rb +0 -144
- data/test/tilt_kramdown_test.rb +0 -42
- data/test/tilt_lesstemplate_test.less +0 -1
- data/test/tilt_lesstemplate_test.rb +0 -42
- data/test/tilt_liquidtemplate_test.rb +0 -78
- data/test/tilt_markaby_test.rb +0 -88
- data/test/tilt_markdown_test.rb +0 -172
- data/test/tilt_marukutemplate_test.rb +0 -48
- data/test/tilt_nokogiritemplate_test.rb +0 -87
- data/test/tilt_radiustemplate_test.rb +0 -75
- data/test/tilt_rdiscounttemplate_test.rb +0 -55
- data/test/tilt_rdoctemplate_test.rb +0 -31
- data/test/tilt_redcarpettemplate_test.rb +0 -71
- data/test/tilt_redclothtemplate_test.rb +0 -36
- data/test/tilt_sasstemplate_test.rb +0 -41
- data/test/tilt_stringtemplate_test.rb +0 -170
- data/test/tilt_template_test.rb +0 -323
- data/test/tilt_test.rb +0 -65
- data/test/tilt_wikiclothtemplate_test.rb +0 -32
- data/test/tilt_yajltemplate_test.rb +0 -101
- 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
|
data/test/markaby/locals.mab
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
li foo
|
data/test/markaby/markaby.mab
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
text "hello from markaby!"
|
@@ -1 +0,0 @@
|
|
1
|
-
text "_why?"
|
@@ -1 +0,0 @@
|
|
1
|
-
text "foo"
|
data/test/markaby/scope.mab
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
li foo
|
data/test/markaby/yielding.mab
DELETED
@@ -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 — ‘Smarty Pants’</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 <blink>WORLD</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
|
data/test/tilt_cache_test.rb
DELETED
@@ -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
|