tilt 0.8 → 0.9
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/Rakefile +5 -23
- data/TEMPLATES.md +17 -6
- data/lib/tilt.rb +25 -16
- data/test/tilt_erubistemplate_test.rb +26 -0
- data/test/tilt_test.rb +9 -1
- data/tilt.gemspec +2 -2
- metadata +3 -3
data/Rakefile
CHANGED
@@ -16,6 +16,11 @@ end
|
|
16
16
|
|
17
17
|
# PACKAGING =================================================================
|
18
18
|
|
19
|
+
begin
|
20
|
+
require 'rubygems'
|
21
|
+
rescue LoadError
|
22
|
+
end
|
23
|
+
|
19
24
|
if defined?(Gem)
|
20
25
|
SPEC = eval(File.read('tilt.gemspec'))
|
21
26
|
|
@@ -72,26 +77,3 @@ file 'tilt.gemspec' => FileList['{lib,test}/**','Rakefile'] do |f|
|
|
72
77
|
File.open(f.name, 'w') { |io| io.write(spec) }
|
73
78
|
puts "updated #{f.name}"
|
74
79
|
end
|
75
|
-
|
76
|
-
# DOC =======================================================================
|
77
|
-
|
78
|
-
# requires the hanna gem:
|
79
|
-
# gem install mislav-hanna --source=http://gems.github.com
|
80
|
-
desc 'Build API documentation (doc/api)'
|
81
|
-
task 'rdoc' => 'rdoc/index.html'
|
82
|
-
file 'rdoc/index.html' => FileList['lib/**/*.rb'] do |f|
|
83
|
-
rm_rf 'rdoc'
|
84
|
-
sh((<<-SH).gsub(/[\s\n]+/, ' ').strip)
|
85
|
-
hanna
|
86
|
-
--op doc/api
|
87
|
-
--promiscuous
|
88
|
-
--charset utf8
|
89
|
-
--fmt html
|
90
|
-
--inline-source
|
91
|
-
--line-numbers
|
92
|
-
--accessor option_accessor=RW
|
93
|
-
--main Tilt
|
94
|
-
--title 'Tilt API Documentation'
|
95
|
-
#{f.prerequisites.join(' ')}
|
96
|
-
SH
|
97
|
-
end
|
data/TEMPLATES.md
CHANGED
@@ -94,15 +94,16 @@ the extensions as follows:
|
|
94
94
|
|
95
95
|
### Options
|
96
96
|
|
97
|
-
#### `:
|
97
|
+
#### `:engine_class => Erubis::Eruby`
|
98
98
|
|
99
|
-
|
99
|
+
Allows you to specify a custom engine class to use instead of the
|
100
|
+
default which is `Erubis::Eruby`.
|
100
101
|
|
101
|
-
#### `:
|
102
|
-
|
103
|
-
Set pattern for embedded Ruby code.
|
102
|
+
#### `:escape_html => false`
|
104
103
|
|
105
|
-
|
104
|
+
When `true`, `Erubis::EscapedEruby` will be used as the engine class
|
105
|
+
instead of the default. All content within `<%= %>` blocks will be
|
106
|
+
automatically html escaped.
|
106
107
|
|
107
108
|
#### `:outvar => '_erbout'`
|
108
109
|
|
@@ -110,6 +111,16 @@ The name of the variable used to accumulate template output. This can be
|
|
110
111
|
any valid Ruby expression but must be assignable. By default a local
|
111
112
|
variable named `_erbout` is used.
|
112
113
|
|
114
|
+
#### `:pattern => '<% %>'`
|
115
|
+
|
116
|
+
Set pattern for embedded Ruby code.
|
117
|
+
|
118
|
+
See the [ERB](#erb) template documentation for examples, usage, and options.
|
119
|
+
|
120
|
+
#### `:trim => true`
|
121
|
+
|
122
|
+
Delete spaces around '<% %>'. (But, spaces around '<%= %>' are preserved.)
|
123
|
+
|
113
124
|
### See also
|
114
125
|
|
115
126
|
* [Erubis Home](http://www.kuwata-lab.com/erubis/)
|
data/lib/tilt.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'digest/md5'
|
2
2
|
|
3
3
|
module Tilt
|
4
|
-
VERSION = '0.
|
4
|
+
VERSION = '0.9'
|
5
5
|
|
6
6
|
@template_mappings = {}
|
7
7
|
|
@@ -16,6 +16,11 @@ module Tilt
|
|
16
16
|
mappings[ext.downcase] = template_class
|
17
17
|
end
|
18
18
|
|
19
|
+
# Returns true when a template exists on an exact match of the provided file extension
|
20
|
+
def self.registered?(ext)
|
21
|
+
mappings.key?(ext.downcase)
|
22
|
+
end
|
23
|
+
|
19
24
|
# Create a new template for the given file using the file's extension
|
20
25
|
# to determine the the template mapping.
|
21
26
|
def self.new(file, line=nil, options={}, &block)
|
@@ -29,20 +34,12 @@ module Tilt
|
|
29
34
|
# Lookup a template class for the given filename or file
|
30
35
|
# extension. Return nil when no implementation is found.
|
31
36
|
def self.[](file)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
else
|
37
|
-
while !pattern.empty?
|
38
|
-
if @template_mappings.key?(pattern)
|
39
|
-
return @template_mappings[pattern]
|
40
|
-
else
|
41
|
-
pattern = pattern.sub(/^[^.]*\.?/, '')
|
42
|
-
end
|
43
|
-
end
|
44
|
-
nil
|
37
|
+
pattern = file.to_s.downcase
|
38
|
+
unless registered?(pattern)
|
39
|
+
pattern = File.basename(pattern)
|
40
|
+
pattern.sub!(/^[^.]*\.?/, '') until (pattern.empty? || registered?(pattern))
|
45
41
|
end
|
42
|
+
@template_mappings[pattern]
|
46
43
|
end
|
47
44
|
|
48
45
|
# Mixin allowing template compilation on scope objects.
|
@@ -100,7 +97,7 @@ module Tilt
|
|
100
97
|
case
|
101
98
|
when arg.respond_to?(:to_str) ; @file = arg.to_str
|
102
99
|
when arg.respond_to?(:to_int) ; @line = arg.to_int
|
103
|
-
when arg.respond_to?(:to_hash) ; @options = arg.to_hash
|
100
|
+
when arg.respond_to?(:to_hash) ; @options = arg.to_hash.dup
|
104
101
|
else raise TypeError
|
105
102
|
end
|
106
103
|
end
|
@@ -399,6 +396,16 @@ module Tilt
|
|
399
396
|
|
400
397
|
# Erubis template implementation. See:
|
401
398
|
# http://www.kuwata-lab.com/erubis/
|
399
|
+
#
|
400
|
+
# ErubisTemplate supports the following additional options, which are not
|
401
|
+
# passed down to the Erubis engine:
|
402
|
+
#
|
403
|
+
# :engine_class allows you to specify a custom engine class to use
|
404
|
+
# instead of the default (which is ::Erubis::Eruby).
|
405
|
+
#
|
406
|
+
# :escape_html when true, ::Erubis::EscapedEruby will be used as
|
407
|
+
# the engine class instead of the default. All content
|
408
|
+
# within <%= %> blocks will be automatically html escaped.
|
402
409
|
class ErubisTemplate < ERBTemplate
|
403
410
|
def initialize_engine
|
404
411
|
return if defined? ::Erubis
|
@@ -408,7 +415,9 @@ module Tilt
|
|
408
415
|
def prepare
|
409
416
|
@options.merge!(:preamble => false, :postamble => false)
|
410
417
|
@outvar = (options.delete(:outvar) || '_erbout').to_s
|
411
|
-
|
418
|
+
engine_class = options.delete(:engine_class)
|
419
|
+
engine_class = ::Erubis::EscapedEruby if options.delete(:escape_html)
|
420
|
+
@engine = (engine_class || ::Erubis::Eruby).new(data, options)
|
412
421
|
end
|
413
422
|
|
414
423
|
def precompiled_preamble(locals)
|
@@ -77,6 +77,32 @@ begin
|
|
77
77
|
assert_equal '2', template.render(scope)
|
78
78
|
assert_equal 'original value', scope.instance_variable_get(:@buf)
|
79
79
|
end
|
80
|
+
|
81
|
+
test "using Erubis::EscapedEruby subclass via :engine_class option" do
|
82
|
+
template = Tilt::ErubisTemplate.new(nil, :engine_class => ::Erubis::EscapedEruby) { |t| %(<%= "<p>Hello World!</p>" %>) }
|
83
|
+
assert_equal "<p>Hello World!</p>", template.render
|
84
|
+
end
|
85
|
+
|
86
|
+
test "using :escape_html => true option" do
|
87
|
+
template = Tilt::ErubisTemplate.new(nil, :escape_html => true) { |t| %(<%= "<p>Hello World!</p>" %>) }
|
88
|
+
assert_equal "<p>Hello World!</p>", template.render
|
89
|
+
end
|
90
|
+
|
91
|
+
test "using :escape_html => false option" do
|
92
|
+
template = Tilt::ErubisTemplate.new(nil, :escape_html => false) { |t| %(<%= "<p>Hello World!</p>" %>) }
|
93
|
+
assert_equal "<p>Hello World!</p>", template.render
|
94
|
+
end
|
95
|
+
|
96
|
+
test "erubis default does not escape html" do
|
97
|
+
template = Tilt::ErubisTemplate.new { |t| %(<%= "<p>Hello World!</p>" %>) }
|
98
|
+
assert_equal "<p>Hello World!</p>", template.render
|
99
|
+
end
|
100
|
+
|
101
|
+
test "does not modify options argument" do
|
102
|
+
options_hash = {:escape_html => true}
|
103
|
+
template = Tilt::ErubisTemplate.new(nil, options_hash) { |t| "Hello World!" }
|
104
|
+
assert_equal({:escape_html => true}, options_hash)
|
105
|
+
end
|
80
106
|
end
|
81
107
|
rescue LoadError => boom
|
82
108
|
warn "Tilt::ErubisTemplate (disabled)\n"
|
data/test/tilt_test.rb
CHANGED
@@ -14,15 +14,23 @@ class TiltTest < Test::Unit::TestCase
|
|
14
14
|
Tilt.register('mock', MockTemplate)
|
15
15
|
end
|
16
16
|
|
17
|
+
test "an extension is registered if explicit handle is found" do
|
18
|
+
Tilt.register('mock', MockTemplate)
|
19
|
+
assert Tilt.registered?('mock')
|
20
|
+
end
|
21
|
+
|
17
22
|
test "registering template classes by symbol file extension" do
|
18
23
|
Tilt.register(:mock, MockTemplate)
|
19
24
|
end
|
20
25
|
|
21
|
-
test "looking up template classes by file extension" do
|
26
|
+
test "looking up template classes by exact file extension" do
|
22
27
|
Tilt.register('mock', MockTemplate)
|
23
28
|
impl = Tilt['mock']
|
24
29
|
assert_equal MockTemplate, impl
|
30
|
+
end
|
25
31
|
|
32
|
+
test "looking up template classes by implicit file extension" do
|
33
|
+
Tilt.register('mock', MockTemplate)
|
26
34
|
impl = Tilt['.mock']
|
27
35
|
assert_equal MockTemplate, impl
|
28
36
|
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 = '0.
|
7
|
-
s.date = '2010-
|
6
|
+
s.version = '0.9'
|
7
|
+
s.date = '2010-04-11'
|
8
8
|
|
9
9
|
s.description = "Generic interface to multiple Ruby template engines"
|
10
10
|
s.summary = s.description
|
metadata
CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
7
|
+
- 9
|
8
|
+
version: "0.9"
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- Ryan Tomayko
|
@@ -13,7 +13,7 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2010-
|
16
|
+
date: 2010-04-11 00:00:00 -07:00
|
17
17
|
default_executable:
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|