tadpole 0.1.6 → 0.1.7
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/LICENSE +1 -1
- data/README.markdown +1 -1
- data/lib/tadpole.rb +1 -1
- data/lib/tadpole/template.rb +54 -41
- data/spec/examples/yield/1/setup.rb +21 -0
- data/spec/examples/yield/2/2_1/b.erb +1 -0
- data/spec/examples/yield/2/2_1/setup.rb +3 -0
- data/spec/examples/yield/2/2_2/c.erb +1 -0
- data/spec/examples/yield/2/2_2/setup.rb +3 -0
- data/spec/examples/yield/2/a.erb +1 -0
- data/spec/examples/yield/2/setup.rb +3 -0
- data/spec/yield_spec.rb +16 -0
- metadata +10 -2
data/LICENSE
CHANGED
data/README.markdown
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Tadpole: A Small but Extensible Templating Engine for Ruby
|
|
2
2
|
==========================================================
|
|
3
3
|
|
|
4
|
-
_Created by [Loren Segal](http://www.gnuu.org) in
|
|
4
|
+
_Created by [Loren Segal](http://www.gnuu.org) in 2008-2009_
|
|
5
5
|
|
|
6
6
|
Quick How-To's
|
|
7
7
|
--------------
|
data/lib/tadpole.rb
CHANGED
data/lib/tadpole/template.rb
CHANGED
|
@@ -103,10 +103,7 @@ module Tadpole
|
|
|
103
103
|
def initialize(opts = {}, &block)
|
|
104
104
|
self.options = opts
|
|
105
105
|
@providers = {}
|
|
106
|
-
#self.sections(*sections)
|
|
107
106
|
|
|
108
|
-
init(&block)
|
|
109
|
-
|
|
110
107
|
if Tadpole.caching
|
|
111
108
|
@compiled_sections = compile_sections(sections)
|
|
112
109
|
end
|
|
@@ -116,14 +113,18 @@ module Tadpole
|
|
|
116
113
|
|
|
117
114
|
def run(opts = {}, &block)
|
|
118
115
|
return '' if run_before_run.is_a?(FalseClass)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
out
|
|
116
|
+
|
|
117
|
+
with_options(opts) do
|
|
118
|
+
init
|
|
119
|
+
run_sections(@compiled_sections || sections, &block)
|
|
120
|
+
end
|
|
125
121
|
rescue => e
|
|
126
|
-
|
|
122
|
+
begin
|
|
123
|
+
provider = find_section_provider(current_section)
|
|
124
|
+
rescue ArgumentError
|
|
125
|
+
raise e
|
|
126
|
+
end
|
|
127
|
+
|
|
127
128
|
line = provider.full_path
|
|
128
129
|
line += " (template)" if provider.is_a?(SectionProviders::TemplateProvider)
|
|
129
130
|
line += ":1:in#{@compiled_sections ? ' compiled' : ''} section `#{current_section}'"
|
|
@@ -134,27 +135,29 @@ module Tadpole
|
|
|
134
135
|
alias to_s run
|
|
135
136
|
|
|
136
137
|
def run_sections(sects, break_first = false, locals = {}, &block)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
138
|
+
with_options(locals) do
|
|
139
|
+
out = ''
|
|
140
|
+
raise ArgumentError, "Template(#{path}) is missing sections" unless sects
|
|
141
|
+
sects = sects.first if sects.first.is_a?(Array)
|
|
142
|
+
sects.each_with_index do |section, i|
|
|
143
|
+
(break_first ? break : next) if section.is_a?(Array)
|
|
144
|
+
|
|
145
|
+
self.current_section = section_name(section)
|
|
146
|
+
|
|
147
|
+
next if run_before_sections.is_a?(FalseClass)
|
|
146
148
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
149
|
+
if sects[i+1].is_a?(Array)
|
|
150
|
+
old, self.subsections = subsections, sects[i+1]
|
|
151
|
+
out += run_subsections(section, sects[i+1], &block)
|
|
152
|
+
self.subsections = old
|
|
153
|
+
else
|
|
154
|
+
out += render(section, {}, true, &block)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
break if break_first
|
|
153
158
|
end
|
|
154
|
-
|
|
155
|
-
break if break_first
|
|
159
|
+
out
|
|
156
160
|
end
|
|
157
|
-
out
|
|
158
161
|
end
|
|
159
162
|
|
|
160
163
|
def run_subsections(section, subsections, locals = {}, &block)
|
|
@@ -189,21 +192,23 @@ module Tadpole
|
|
|
189
192
|
end
|
|
190
193
|
|
|
191
194
|
def render(section, locals = {}, call_method = false, &block)
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
195
|
+
with_options(locals) do
|
|
196
|
+
case section
|
|
197
|
+
when String, Symbol
|
|
198
|
+
if call_method && respond_to?(section)
|
|
199
|
+
send(section, &block)
|
|
200
|
+
else
|
|
201
|
+
find_section_provider(section).render(options, &block)
|
|
202
|
+
end
|
|
203
|
+
when Template
|
|
204
|
+
section.run(options, &block)
|
|
205
|
+
when Module
|
|
206
|
+
section.new(options).run(&block)
|
|
207
|
+
when SectionProviders::SectionProvider
|
|
208
|
+
section.render(options, &block)
|
|
196
209
|
else
|
|
197
|
-
|
|
210
|
+
raise MissingSectionError, "missing section #{section.inspect}"
|
|
198
211
|
end
|
|
199
|
-
when Template
|
|
200
|
-
section.run(locals, &block)
|
|
201
|
-
when Module
|
|
202
|
-
section.new(options).run(locals, &block)
|
|
203
|
-
when SectionProviders::SectionProvider
|
|
204
|
-
section.render(locals, &block)
|
|
205
|
-
else
|
|
206
|
-
raise MissingSectionError, "missing section #{section.inspect}"
|
|
207
212
|
end
|
|
208
213
|
end
|
|
209
214
|
|
|
@@ -233,6 +238,14 @@ module Tadpole
|
|
|
233
238
|
[nil, {}]
|
|
234
239
|
end
|
|
235
240
|
end
|
|
241
|
+
|
|
242
|
+
def with_options(locals = {}, &block)
|
|
243
|
+
old_options = options
|
|
244
|
+
self.options = options.to_hash.merge(locals)
|
|
245
|
+
result = yield
|
|
246
|
+
self.options = old_options
|
|
247
|
+
result
|
|
248
|
+
end
|
|
236
249
|
|
|
237
250
|
def find_section_provider(section)
|
|
238
251
|
section = section.to_s
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
def init
|
|
2
|
+
sections :a, [:b, [:c, :d]]
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
def a
|
|
6
|
+
'[' + yield(:foo => 'FOO') + ']'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def b
|
|
10
|
+
foo + yieldall(:foo => 'BAR', :bar => 'BAR')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def c
|
|
14
|
+
foo
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def d
|
|
18
|
+
bar
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# expected [FOOBARBAR]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= foo %><%= yieldall %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= foo || "FOO" %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= yieldall :foo => 'BAR' %>
|
data/spec/yield_spec.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'tadpole')
|
|
2
|
+
|
|
3
|
+
describe Tadpole, '::Template' do
|
|
4
|
+
before do
|
|
5
|
+
Tadpole.template_paths.clear
|
|
6
|
+
Tadpole.register_template_path File.dirname(__FILE__) + '/examples'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should yield to a method with extra values" do
|
|
10
|
+
Template('yield/1').new.run.should == '[FOOBARBAR]'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should yield to external template with extra values" do
|
|
14
|
+
Template('yield/2').new(:foo => 'FOO').run.should == 'BARBAR'
|
|
15
|
+
end
|
|
16
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tadpole
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Loren Segal
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2009-
|
|
12
|
+
date: 2009-08-14 00:00:00 -04:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies: []
|
|
15
15
|
|
|
@@ -63,9 +63,17 @@ files:
|
|
|
63
63
|
- spec/examples/T/derived2/test/setup.rb
|
|
64
64
|
- spec/examples/T/setup.rb
|
|
65
65
|
- spec/examples/T/test/setup.rb
|
|
66
|
+
- spec/examples/yield/1/setup.rb
|
|
67
|
+
- spec/examples/yield/2/2_1/b.erb
|
|
68
|
+
- spec/examples/yield/2/2_1/setup.rb
|
|
69
|
+
- spec/examples/yield/2/2_2/c.erb
|
|
70
|
+
- spec/examples/yield/2/2_2/setup.rb
|
|
71
|
+
- spec/examples/yield/2/a.erb
|
|
72
|
+
- spec/examples/yield/2/setup.rb
|
|
66
73
|
- spec/filters_spec.rb
|
|
67
74
|
- spec/local_template_spec.rb
|
|
68
75
|
- spec/render_spec.rb
|
|
76
|
+
- spec/yield_spec.rb
|
|
69
77
|
- benchmarks/eval-vs-non-eval.rb
|
|
70
78
|
- benchmarks/require-vs-none.rb
|
|
71
79
|
- benchmarks/run-caching.rb
|