tilt 0.4 → 0.6
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.
- data/README.md +1 -0
- data/TEMPLATES.md +7 -5
- data/lib/tilt.rb +54 -17
- data/test/tilt_coffeetemplate_test.rb +20 -0
- data/test/tilt_lesstemplate_test.rb +20 -0
- data/test/tilt_mustache_views/external.rb +9 -0
- data/test/tilt_mustachetemplate_test.rb +9 -0
- data/tilt.gemspec +6 -2
- metadata +67 -32
data/README.md
CHANGED
|
@@ -26,6 +26,7 @@ Support for these template engines is included with the package:
|
|
|
26
26
|
Interpolated String .str none (included ruby core)
|
|
27
27
|
Haml .haml haml
|
|
28
28
|
Sass .sass haml
|
|
29
|
+
Less CSS .less less
|
|
29
30
|
Builder .builder builder
|
|
30
31
|
Liquid .liquid liquid
|
|
31
32
|
Mustache .mustache mustache
|
data/TEMPLATES.md
CHANGED
|
@@ -11,10 +11,12 @@ documentation on each supported template engine is provided below.
|
|
|
11
11
|
* [Liquid](#liquid) - `Tilt::LiquidTemplate`
|
|
12
12
|
* [Mustache](#mustache) - `Tilt::MustachTemplate`
|
|
13
13
|
|
|
14
|
-
Tilt includes support for
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
Tilt includes support for CSS processors like [lesscss](http://lesscss.org)
|
|
15
|
+
and [sass](http://sass-lang.com/), in addition, it also supports simple
|
|
16
|
+
text formats.
|
|
17
17
|
|
|
18
|
+
* Less - `Tilt::LessTemplate`
|
|
19
|
+
* Sass - `Tilt::SassTemplate`
|
|
18
20
|
* [Markdown](#markdown) - `Tilt::RDiscountTemplate`
|
|
19
21
|
* [RDoc](#rdoc) - `Tilt::RDocTemplate`
|
|
20
22
|
|
|
@@ -306,9 +308,9 @@ The class or module where View classes are located. If you have
|
|
|
306
308
|
`Hurl::App::Views`, namespace should be `Hurl:App`. This defaults to `Object`,
|
|
307
309
|
causing `::Views` to be searched for classes.
|
|
308
310
|
|
|
309
|
-
#### `:mustaches => nil`
|
|
311
|
+
#### `:mustaches => nil` or `:view_path => nil`
|
|
310
312
|
|
|
311
|
-
Where mustache views (
|
|
313
|
+
Where mustache views (`.rb` files) are located, or `nil` to disable auto-requiring
|
|
312
314
|
of views based on template names. By default, the view file is assumed to be in
|
|
313
315
|
the same directory as the template file.
|
|
314
316
|
|
data/lib/tilt.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Tilt
|
|
2
|
-
VERSION = '0.
|
|
2
|
+
VERSION = '0.6'
|
|
3
3
|
|
|
4
4
|
@template_mappings = {}
|
|
5
5
|
|
|
@@ -77,6 +77,7 @@ module Tilt
|
|
|
77
77
|
@line = line || 1
|
|
78
78
|
@options = options || {}
|
|
79
79
|
@reader = block || lambda { |t| File.read(file) }
|
|
80
|
+
@data = nil
|
|
80
81
|
|
|
81
82
|
if !self.class.engine_initialized
|
|
82
83
|
initialize_engine
|
|
@@ -325,6 +326,25 @@ module Tilt
|
|
|
325
326
|
register 'sass', SassTemplate
|
|
326
327
|
|
|
327
328
|
|
|
329
|
+
# Lessscss template implementation. See:
|
|
330
|
+
# http://lesscss.org/
|
|
331
|
+
#
|
|
332
|
+
# Less templates do not support object scopes, locals, or yield.
|
|
333
|
+
class LessTemplate < Template
|
|
334
|
+
def initialize_engine
|
|
335
|
+
require_template_library 'less' unless defined? ::Less::Engine
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def compile!
|
|
339
|
+
@engine = ::Less::Engine.new(data)
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def evaluate(scope, locals, &block)
|
|
343
|
+
@engine.to_css
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
register 'less', LessTemplate
|
|
347
|
+
|
|
328
348
|
# Builder template implementation. See:
|
|
329
349
|
# http://builder.rubyforge.org/
|
|
330
350
|
class BuilderTemplate < Template
|
|
@@ -381,9 +401,8 @@ module Tilt
|
|
|
381
401
|
scope = scope.to_h.inject({}){ |h,(k,v)| h[k.to_s] = v ; h }
|
|
382
402
|
locals = scope.merge(locals)
|
|
383
403
|
end
|
|
384
|
-
# TODO: Is it possible to lazy yield ?
|
|
385
404
|
locals['yield'] = block.nil? ? '' : yield
|
|
386
|
-
locals['content'] =
|
|
405
|
+
locals['content'] = locals['yield']
|
|
387
406
|
@engine.render(locals)
|
|
388
407
|
end
|
|
389
408
|
end
|
|
@@ -418,22 +437,22 @@ module Tilt
|
|
|
418
437
|
register 'md', RDiscountTemplate
|
|
419
438
|
|
|
420
439
|
|
|
421
|
-
# RedCloth implementation. See:
|
|
422
|
-
# http://redcloth.org/
|
|
423
|
-
class RedClothTemplate < Template
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
440
|
+
# RedCloth implementation. See:
|
|
441
|
+
# http://redcloth.org/
|
|
442
|
+
class RedClothTemplate < Template
|
|
443
|
+
def initialize_engine
|
|
444
|
+
require_template_library 'redcloth' unless defined? ::RedCloth
|
|
445
|
+
end
|
|
427
446
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
447
|
+
def compile!
|
|
448
|
+
@engine = RedCloth.new(data)
|
|
449
|
+
end
|
|
431
450
|
|
|
432
|
-
|
|
433
|
-
|
|
451
|
+
def evaluate(scope, locals, &block)
|
|
452
|
+
@engine.to_html
|
|
453
|
+
end
|
|
434
454
|
end
|
|
435
|
-
|
|
436
|
-
register 'textile', RedClothTemplate
|
|
455
|
+
register 'textile', RedClothTemplate
|
|
437
456
|
|
|
438
457
|
|
|
439
458
|
# Mustache is written and maintained by Chris Wanstrath. See:
|
|
@@ -451,9 +470,10 @@ register 'textile', RedClothTemplate
|
|
|
451
470
|
|
|
452
471
|
def compile!
|
|
453
472
|
Mustache.view_namespace = options[:namespace]
|
|
473
|
+
Mustache.view_path = options[:view_path] || options[:mustaches]
|
|
454
474
|
@engine = options[:view] || Mustache.view_class(name)
|
|
455
475
|
options.each do |key, value|
|
|
456
|
-
next if %w[view namespace mustaches].include?(key.to_s)
|
|
476
|
+
next if %w[view view_path namespace mustaches].include?(key.to_s)
|
|
457
477
|
@engine.send("#{key}=", value) if @engine.respond_to? "#{key}="
|
|
458
478
|
end
|
|
459
479
|
end
|
|
@@ -506,4 +526,21 @@ register 'textile', RedClothTemplate
|
|
|
506
526
|
end
|
|
507
527
|
end
|
|
508
528
|
register 'rdoc', RDocTemplate
|
|
529
|
+
|
|
530
|
+
# CoffeeScript info:
|
|
531
|
+
# http://jashkenas.github.com/coffee-script/
|
|
532
|
+
class CoffeeTemplate < Template
|
|
533
|
+
def initialize_engine
|
|
534
|
+
require_template_library 'coffee-script' unless defined? ::CoffeeScript
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
def compile!
|
|
538
|
+
@engine = ::CoffeeScript::compile(data, options)
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
def evaluate(scope, locals, &block)
|
|
542
|
+
@engine
|
|
543
|
+
end
|
|
544
|
+
end
|
|
545
|
+
register 'coffee', CoffeeTemplate
|
|
509
546
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'contest'
|
|
2
|
+
require 'tilt'
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'coffee-script'
|
|
6
|
+
|
|
7
|
+
class CoffeeTemplateTest < Test::Unit::TestCase
|
|
8
|
+
test "is registered for '.coffee' files" do
|
|
9
|
+
assert_equal Tilt::CoffeeTemplate, Tilt['test.coffee']
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "compiles and evaluates the template on #render" do
|
|
13
|
+
template = Tilt::CoffeeTemplate.new { |t| "greeting: \"Hello CoffeeScript\"" }
|
|
14
|
+
assert_equal "(function(){\n var greeting;\n greeting = \"Hello CoffeeScript\";\n})();", template.render
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
rescue LoadError => boom
|
|
19
|
+
warn "Tilt::CoffeeTemplate (disabled)\n"
|
|
20
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'contest'
|
|
2
|
+
require 'tilt'
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'less'
|
|
6
|
+
|
|
7
|
+
class LessTemplateTest < Test::Unit::TestCase
|
|
8
|
+
test "is registered for '.less' files" do
|
|
9
|
+
assert_equal Tilt::LessTemplate, Tilt['test.less']
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "compiles and evaluates the template on #render" do
|
|
13
|
+
template = Tilt::LessTemplate.new { |t| ".bg { background-color: #0000ff; } \n#main\n { .bg; }\n" }
|
|
14
|
+
assert_equal ".bg, #main { background-color: #0000ff; }\n", template.render
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
rescue LoadError => boom
|
|
19
|
+
warn "Tilt::LessTemplate (disabled)\n"
|
|
20
|
+
end
|
|
@@ -51,6 +51,15 @@ begin
|
|
|
51
51
|
assert_equal "<p>Hello World!</p>", template.render
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
+
test "locating views in files" do
|
|
55
|
+
view_path = File.expand_path('../tilt_mustache_views', __FILE__)
|
|
56
|
+
template = Tilt::MustacheTemplate.new('external.mustache', :view_path => view_path) { "<p>{{hello}}!</p>" }
|
|
57
|
+
template.compile
|
|
58
|
+
assert defined?(Views::External), "external.rb should have been required"
|
|
59
|
+
assert_equal Views::External, template.engine
|
|
60
|
+
assert_equal "<p>Stached!</p>", template.render
|
|
61
|
+
end
|
|
62
|
+
|
|
54
63
|
test "copying instance variables from scope object" do
|
|
55
64
|
template = Tilt::MustacheTemplate.new('foo.mustache') { "<p>Hey {{foo}}!</p>" }
|
|
56
65
|
scope = Object.new
|
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 = '0.
|
|
7
|
-
s.date = '
|
|
6
|
+
s.version = '0.6'
|
|
7
|
+
s.date = '2010-02-22'
|
|
8
8
|
|
|
9
9
|
s.description = "Generic interface to multiple Ruby template engines"
|
|
10
10
|
s.summary = s.description
|
|
@@ -22,10 +22,13 @@ Gem::Specification.new do |s|
|
|
|
22
22
|
lib/tilt.rb
|
|
23
23
|
test/tilt_buildertemplate_test.rb
|
|
24
24
|
test/tilt_cache_test.rb
|
|
25
|
+
test/tilt_coffeetemplate_test.rb
|
|
25
26
|
test/tilt_erbtemplate_test.rb
|
|
26
27
|
test/tilt_erubistemplate_test.rb
|
|
27
28
|
test/tilt_hamltemplate_test.rb
|
|
29
|
+
test/tilt_lesstemplate_test.rb
|
|
28
30
|
test/tilt_liquidtemplate_test.rb
|
|
31
|
+
test/tilt_mustache_views/external.rb
|
|
29
32
|
test/tilt_mustachetemplate_test.rb
|
|
30
33
|
test/tilt_rdiscounttemplate_test.rb
|
|
31
34
|
test/tilt_rdoctemplate_test.rb
|
|
@@ -46,6 +49,7 @@ Gem::Specification.new do |s|
|
|
|
46
49
|
s.add_development_dependency 'mustache'
|
|
47
50
|
s.add_development_dependency 'rdiscount'
|
|
48
51
|
s.add_development_dependency 'liquid'
|
|
52
|
+
s.add_development_dependency 'less'
|
|
49
53
|
|
|
50
54
|
s.extra_rdoc_files = %w[COPYING]
|
|
51
55
|
|
metadata
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tilt
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
4
|
+
prerelease: false
|
|
5
|
+
segments:
|
|
6
|
+
- 0
|
|
7
|
+
- 6
|
|
8
|
+
version: "0.6"
|
|
5
9
|
platform: ruby
|
|
6
10
|
authors:
|
|
7
11
|
- Ryan Tomayko
|
|
@@ -9,79 +13,105 @@ autorequire:
|
|
|
9
13
|
bindir: bin
|
|
10
14
|
cert_chain: []
|
|
11
15
|
|
|
12
|
-
date:
|
|
16
|
+
date: 2010-02-22 00:00:00 -08:00
|
|
13
17
|
default_executable:
|
|
14
18
|
dependencies:
|
|
15
19
|
- !ruby/object:Gem::Dependency
|
|
16
20
|
name: contest
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
21
|
+
prerelease: false
|
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
20
23
|
requirements:
|
|
21
24
|
- - ">="
|
|
22
25
|
- !ruby/object:Gem::Version
|
|
26
|
+
segments:
|
|
27
|
+
- 0
|
|
23
28
|
version: "0"
|
|
24
|
-
|
|
29
|
+
type: :development
|
|
30
|
+
version_requirements: *id001
|
|
25
31
|
- !ruby/object:Gem::Dependency
|
|
26
32
|
name: builder
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
33
|
+
prerelease: false
|
|
34
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
30
35
|
requirements:
|
|
31
36
|
- - ">="
|
|
32
37
|
- !ruby/object:Gem::Version
|
|
38
|
+
segments:
|
|
39
|
+
- 0
|
|
33
40
|
version: "0"
|
|
34
|
-
|
|
41
|
+
type: :development
|
|
42
|
+
version_requirements: *id002
|
|
35
43
|
- !ruby/object:Gem::Dependency
|
|
36
44
|
name: erubis
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
45
|
+
prerelease: false
|
|
46
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
40
47
|
requirements:
|
|
41
48
|
- - ">="
|
|
42
49
|
- !ruby/object:Gem::Version
|
|
50
|
+
segments:
|
|
51
|
+
- 0
|
|
43
52
|
version: "0"
|
|
44
|
-
|
|
53
|
+
type: :development
|
|
54
|
+
version_requirements: *id003
|
|
45
55
|
- !ruby/object:Gem::Dependency
|
|
46
56
|
name: haml
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
prerelease: false
|
|
58
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
50
59
|
requirements:
|
|
51
60
|
- - ">="
|
|
52
61
|
- !ruby/object:Gem::Version
|
|
62
|
+
segments:
|
|
63
|
+
- 0
|
|
53
64
|
version: "0"
|
|
54
|
-
|
|
65
|
+
type: :development
|
|
66
|
+
version_requirements: *id004
|
|
55
67
|
- !ruby/object:Gem::Dependency
|
|
56
68
|
name: mustache
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
69
|
+
prerelease: false
|
|
70
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
60
71
|
requirements:
|
|
61
72
|
- - ">="
|
|
62
73
|
- !ruby/object:Gem::Version
|
|
74
|
+
segments:
|
|
75
|
+
- 0
|
|
63
76
|
version: "0"
|
|
64
|
-
|
|
77
|
+
type: :development
|
|
78
|
+
version_requirements: *id005
|
|
65
79
|
- !ruby/object:Gem::Dependency
|
|
66
80
|
name: rdiscount
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
+
prerelease: false
|
|
82
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
70
83
|
requirements:
|
|
71
84
|
- - ">="
|
|
72
85
|
- !ruby/object:Gem::Version
|
|
86
|
+
segments:
|
|
87
|
+
- 0
|
|
73
88
|
version: "0"
|
|
74
|
-
|
|
89
|
+
type: :development
|
|
90
|
+
version_requirements: *id006
|
|
75
91
|
- !ruby/object:Gem::Dependency
|
|
76
92
|
name: liquid
|
|
93
|
+
prerelease: false
|
|
94
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ">="
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
segments:
|
|
99
|
+
- 0
|
|
100
|
+
version: "0"
|
|
77
101
|
type: :development
|
|
78
|
-
|
|
79
|
-
|
|
102
|
+
version_requirements: *id007
|
|
103
|
+
- !ruby/object:Gem::Dependency
|
|
104
|
+
name: less
|
|
105
|
+
prerelease: false
|
|
106
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
80
107
|
requirements:
|
|
81
108
|
- - ">="
|
|
82
109
|
- !ruby/object:Gem::Version
|
|
110
|
+
segments:
|
|
111
|
+
- 0
|
|
83
112
|
version: "0"
|
|
84
|
-
|
|
113
|
+
type: :development
|
|
114
|
+
version_requirements: *id008
|
|
85
115
|
description: Generic interface to multiple Ruby template engines
|
|
86
116
|
email: r@tomayko.com
|
|
87
117
|
executables: []
|
|
@@ -99,10 +129,13 @@ files:
|
|
|
99
129
|
- lib/tilt.rb
|
|
100
130
|
- test/tilt_buildertemplate_test.rb
|
|
101
131
|
- test/tilt_cache_test.rb
|
|
132
|
+
- test/tilt_coffeetemplate_test.rb
|
|
102
133
|
- test/tilt_erbtemplate_test.rb
|
|
103
134
|
- test/tilt_erubistemplate_test.rb
|
|
104
135
|
- test/tilt_hamltemplate_test.rb
|
|
136
|
+
- test/tilt_lesstemplate_test.rb
|
|
105
137
|
- test/tilt_liquidtemplate_test.rb
|
|
138
|
+
- test/tilt_mustache_views/external.rb
|
|
106
139
|
- test/tilt_mustachetemplate_test.rb
|
|
107
140
|
- test/tilt_rdiscounttemplate_test.rb
|
|
108
141
|
- test/tilt_rdoctemplate_test.rb
|
|
@@ -130,18 +163,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
130
163
|
requirements:
|
|
131
164
|
- - ">="
|
|
132
165
|
- !ruby/object:Gem::Version
|
|
166
|
+
segments:
|
|
167
|
+
- 0
|
|
133
168
|
version: "0"
|
|
134
|
-
version:
|
|
135
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
170
|
requirements:
|
|
137
171
|
- - ">="
|
|
138
172
|
- !ruby/object:Gem::Version
|
|
173
|
+
segments:
|
|
174
|
+
- 0
|
|
139
175
|
version: "0"
|
|
140
|
-
version:
|
|
141
176
|
requirements: []
|
|
142
177
|
|
|
143
178
|
rubyforge_project: wink
|
|
144
|
-
rubygems_version: 1.3.
|
|
179
|
+
rubygems_version: 1.3.6
|
|
145
180
|
signing_key:
|
|
146
181
|
specification_version: 2
|
|
147
182
|
summary: Generic interface to multiple Ruby template engines
|