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 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 simple text formats in addition to
15
- programmable template languages. These typically do not support
16
- scope or locals but often support rendering options.
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 (.rb files) are located, or nil to disable auto-requiring
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.4'
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'] = block.nil? ? '' : yield
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
- def initialize_engine
425
- require_template_library 'redcloth' unless defined? ::RedCloth
426
- end
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
- def compile!
429
- @engine = RedCloth.new(data)
430
- end
447
+ def compile!
448
+ @engine = RedCloth.new(data)
449
+ end
431
450
 
432
- def evaluate(scope, locals, &block)
433
- @engine.to_html
451
+ def evaluate(scope, locals, &block)
452
+ @engine.to_html
453
+ end
434
454
  end
435
- end
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
@@ -0,0 +1,9 @@
1
+ require 'mustache'
2
+
3
+ module Views
4
+ class External < Mustache
5
+ def hello
6
+ "Stached"
7
+ end
8
+ end
9
+ 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.4'
7
- s.date = '2009-12-13'
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
- version: "0.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: 2009-12-13 00:00:00 -08:00
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
- type: :development
18
- version_requirement:
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
- version:
29
+ type: :development
30
+ version_requirements: *id001
25
31
  - !ruby/object:Gem::Dependency
26
32
  name: builder
27
- type: :development
28
- version_requirement:
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
- version:
41
+ type: :development
42
+ version_requirements: *id002
35
43
  - !ruby/object:Gem::Dependency
36
44
  name: erubis
37
- type: :development
38
- version_requirement:
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
- version:
53
+ type: :development
54
+ version_requirements: *id003
45
55
  - !ruby/object:Gem::Dependency
46
56
  name: haml
47
- type: :development
48
- version_requirement:
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
- version:
65
+ type: :development
66
+ version_requirements: *id004
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: mustache
57
- type: :development
58
- version_requirement:
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
- version:
77
+ type: :development
78
+ version_requirements: *id005
65
79
  - !ruby/object:Gem::Dependency
66
80
  name: rdiscount
67
- type: :development
68
- version_requirement:
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
- version:
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
- version_requirement:
79
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
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.5
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