tadpole 0.1.3 → 0.1.4
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/lib/tadpole/local_template.rb +13 -2
- data/lib/tadpole/main.rb +9 -5
- data/lib/tadpole/providers/erb.rb +2 -2
- data/lib/tadpole/providers/section_provider.rb +1 -1
- data/lib/tadpole/template.rb +3 -3
- data/lib/tadpole.rb +1 -1
- data/spec/erb_spec.rb +18 -0
- data/spec/examples/T/derived/setup.rb +3 -0
- data/spec/examples/T/derived2/setup.rb +3 -0
- data/spec/examples/T/derived2/test/setup.rb +5 -0
- data/spec/examples/T/setup.rb +3 -0
- data/spec/examples/T/test/setup.rb +5 -0
- data/spec/examples/erb/a.erb +1 -0
- data/spec/examples/erb/setup.rb +3 -0
- data/spec/examples/erb2/_a.erb +1 -0
- data/spec/examples/erb2/setup.rb +7 -0
- data/spec/examples/inherits/inherits_a/setup.rb +7 -0
- data/spec/examples/inherits/inherits_b/inherits_c/setup.rb +6 -0
- data/spec/examples/inherits/inherits_b/setup.rb +8 -0
- data/spec/examples/inherits/inherits_d/setup.rb +1 -0
- data/spec/examples/inherits/inherits_e/setup.rb +2 -0
- data/spec/local_template_spec.rb +48 -0
- metadata +18 -2
@@ -12,7 +12,7 @@ module Tadpole
|
|
12
12
|
include mod
|
13
13
|
before_run_filters.push(*mod.before_run_filters)
|
14
14
|
before_section_filters.push(*mod.before_section_filters)
|
15
|
-
inherited_paths.
|
15
|
+
inherited_paths.unshift(*mod.template_paths)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -24,7 +24,18 @@ module Tadpole
|
|
24
24
|
|
25
25
|
def T(extra_path, extra_opts = {})
|
26
26
|
opts = options.to_hash.update(extra_opts)
|
27
|
-
|
27
|
+
dirname = File.dirname(caller.first[/^(.+?):/, 1])
|
28
|
+
begin
|
29
|
+
Template(path, extra_path).new(opts)
|
30
|
+
rescue MissingTemplateError => e
|
31
|
+
Tadpole.template_paths.each do |template_path|
|
32
|
+
if dirname.index(template_path) == 0
|
33
|
+
path = dirname[template_path.length..-1]
|
34
|
+
return Template(path, extra_path).new(opts)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
raise e
|
38
|
+
end
|
28
39
|
end
|
29
40
|
|
30
41
|
included(self)
|
data/lib/tadpole/main.rb
CHANGED
@@ -19,6 +19,8 @@ class Insertion
|
|
19
19
|
end
|
20
20
|
|
21
21
|
module Tadpole
|
22
|
+
class MissingTemplateError < ArgumentError; end
|
23
|
+
|
22
24
|
class << self
|
23
25
|
attr_accessor :caching
|
24
26
|
|
@@ -35,7 +37,7 @@ module Tadpole
|
|
35
37
|
def template(*path)
|
36
38
|
path = absolutize_path(*path)
|
37
39
|
exists = find_matching_template_paths(path)
|
38
|
-
raise
|
40
|
+
raise MissingTemplateError, "no such template `#{path}'" if exists.empty?
|
39
41
|
|
40
42
|
create_template(*path)
|
41
43
|
end
|
@@ -73,15 +75,17 @@ module Tadpole
|
|
73
75
|
find_matching_template_paths(total_list).each do |subpath|
|
74
76
|
submod = create_local_template_mod(subpath, total_list)
|
75
77
|
mod.send :include, submod
|
78
|
+
|
79
|
+
inherited = submod.inherited_paths
|
80
|
+
inherited.reject! {|path| mod.template_paths.include?(path) }
|
81
|
+
mod.template_paths.unshift(*inherited)
|
76
82
|
mod.template_paths.unshift(*submod.template_paths)
|
77
83
|
mod.before_run_filters.push(*submod.before_run_filters)
|
78
84
|
mod.before_section_filters.push(*submod.before_section_filters)
|
79
|
-
inherited.push(*submod.inherited_paths)
|
80
85
|
end
|
81
86
|
list
|
82
87
|
end
|
83
|
-
|
84
|
-
mod.template_paths.push(*inherited)
|
88
|
+
|
85
89
|
mod.template_paths.uniq!
|
86
90
|
end
|
87
91
|
|
@@ -122,7 +126,7 @@ module Tadpole
|
|
122
126
|
def load_setup_rb(full_path, mod)
|
123
127
|
setup_file = File.join(full_path, 'setup.rb')
|
124
128
|
if File.file? setup_file
|
125
|
-
mod.module_eval(File.read(setup_file).taint, setup_file)
|
129
|
+
mod.module_eval(File.read(setup_file).taint, setup_file, 1)
|
126
130
|
end
|
127
131
|
mod
|
128
132
|
end
|
@@ -9,13 +9,13 @@ module Tadpole
|
|
9
9
|
super
|
10
10
|
|
11
11
|
erb = ERB.new(content, nil, '<>')
|
12
|
-
instance_eval(<<-eof, full_path,
|
12
|
+
instance_eval(<<-eof, full_path, 1)
|
13
13
|
def render(locals = nil, &block)
|
14
14
|
if locals
|
15
15
|
opts = owner.options
|
16
16
|
owner.options = owner.options.to_hash.update(locals)
|
17
17
|
end
|
18
|
-
out = owner.instance_eval
|
18
|
+
out = owner.instance_eval(#{erb.src.inspect}, __FILE__, __LINE__)
|
19
19
|
owner.options = opts if locals
|
20
20
|
out
|
21
21
|
end
|
@@ -21,7 +21,7 @@ module Tadpole
|
|
21
21
|
# extensions.
|
22
22
|
#
|
23
23
|
# @return [String, nil] The full pathname
|
24
|
-
def self.provides?(basename)
|
24
|
+
def self.provides?(object, basename)
|
25
25
|
self.const_get("EXTENSIONS").any? do |ext|
|
26
26
|
path = basename + ext
|
27
27
|
return path if path_suitable?(path)
|
data/lib/tadpole/template.rb
CHANGED
@@ -242,13 +242,13 @@ module Tadpole
|
|
242
242
|
filename, provider = nil, nil
|
243
243
|
template_paths.each do |template_path|
|
244
244
|
SectionProviders.providers.each do |prov|
|
245
|
-
filename = prov.provides?(File.join(template_path, section))
|
245
|
+
filename = prov.provides?(self, File.join(template_path, section))
|
246
246
|
break provider = prov if filename
|
247
247
|
end
|
248
248
|
break if provider && filename
|
249
249
|
end
|
250
250
|
|
251
|
-
raise ArgumentError, "missing section `#{section}'" if !provider
|
251
|
+
raise ArgumentError, "Template(#{path}) is missing section `#{section}'" if !provider
|
252
252
|
@providers[section] = provider.new(filename, self)
|
253
253
|
end
|
254
254
|
|
@@ -264,7 +264,7 @@ module Tadpole
|
|
264
264
|
if file = find_template(filename)
|
265
265
|
File.read(file)
|
266
266
|
else
|
267
|
-
raise ArgumentError, "missing template file `#{filename}'
|
267
|
+
raise ArgumentError, "Template(#{path}) is missing template file `#{filename}'"
|
268
268
|
end
|
269
269
|
end
|
270
270
|
end
|
data/lib/tadpole.rb
CHANGED
data/spec/erb_spec.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'tadpole')
|
2
|
+
|
3
|
+
describe Tadpole::SectionProviders::ERBProvider do
|
4
|
+
before do
|
5
|
+
Tadpole.template_paths.clear
|
6
|
+
Tadpole.register_template_path(File.dirname(__FILE__) + '/examples')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#render' do
|
10
|
+
it "should setup locals through run" do
|
11
|
+
Tadpole('erb').run(:a_variable => 1).should == '1'
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should setup locals through #render" do
|
15
|
+
Tadpole('erb2').run.should == '2'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= a_variable %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= a_variable %>
|
@@ -0,0 +1 @@
|
|
1
|
+
inherits '/inherits/inherits_a'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'tadpole')
|
2
|
+
|
3
|
+
describe Tadpole::LocalTemplate do
|
4
|
+
before do
|
5
|
+
Tadpole.template_paths.clear
|
6
|
+
Tadpole.register_template_path(File.dirname(__FILE__) + '/examples')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.inherits' do
|
10
|
+
it "should inherit from a relative path" do
|
11
|
+
Tadpole('inherits/inherits_b').run.should == "abc"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should automatically inherit parent directories" do
|
15
|
+
Tadpole('inherits/inherits_b/inherits_c').run.should == "abcd"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should inherit absolute paths from top of registered template paths" do
|
19
|
+
Tadpole('inherits/inherits_d').run.should == "ab"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should order template_paths properly" do
|
23
|
+
paths = Tadpole('inherits/inherits_b/inherits_c').template_paths
|
24
|
+
paths.map! {|p| p.gsub(Tadpole.template_paths.first + '/', '') }
|
25
|
+
paths.should == ["inherits/inherits_b/inherits_c", "inherits/inherits_b", "inherits/inherits_a", "inherits"]
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should accept multiple inheritances" do
|
29
|
+
paths = Tadpole('inherits/inherits_e').template_paths
|
30
|
+
paths.map! {|p| p.gsub(Tadpole.template_paths.first + '/', '') }
|
31
|
+
paths.should == ["inherits/inherits_e", "inherits/inherits_b", "inherits/inherits_a", "inherits"]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '.T' do
|
36
|
+
it "should refer to a template" do
|
37
|
+
Tadpole('T').run.should == 'info'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should refer to the same template path even in a subclass" do
|
41
|
+
Tadpole('T/derived').run.should == 'info'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should refer to the subclassed path if the section exists in the subclass" do
|
45
|
+
Tadpole('T/derived2').run.should == 'notinfo'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
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.4
|
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-07-
|
12
|
+
date: 2009-07-12 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -35,9 +35,19 @@ files:
|
|
35
35
|
- lib/tadpole.rb
|
36
36
|
- spec/array_spec.rb
|
37
37
|
- spec/basic_spec.rb
|
38
|
+
- spec/erb_spec.rb
|
39
|
+
- spec/examples/erb/a.erb
|
40
|
+
- spec/examples/erb/setup.rb
|
41
|
+
- spec/examples/erb2/_a.erb
|
42
|
+
- spec/examples/erb2/setup.rb
|
38
43
|
- spec/examples/filters/a.txt
|
39
44
|
- spec/examples/filters/b.txt
|
40
45
|
- spec/examples/filters/setup.rb
|
46
|
+
- spec/examples/inherits/inherits_a/setup.rb
|
47
|
+
- spec/examples/inherits/inherits_b/inherits_c/setup.rb
|
48
|
+
- spec/examples/inherits/inherits_b/setup.rb
|
49
|
+
- spec/examples/inherits/inherits_d/setup.rb
|
50
|
+
- spec/examples/inherits/inherits_e/setup.rb
|
41
51
|
- spec/examples/render/1/a.txt
|
42
52
|
- spec/examples/render/1/b.txt
|
43
53
|
- spec/examples/render/1/d.erb
|
@@ -48,7 +58,13 @@ files:
|
|
48
58
|
- spec/examples/render/4/setup.rb
|
49
59
|
- spec/examples/render/5/setup.rb
|
50
60
|
- spec/examples/render/6/setup.rb
|
61
|
+
- spec/examples/T/derived/setup.rb
|
62
|
+
- spec/examples/T/derived2/setup.rb
|
63
|
+
- spec/examples/T/derived2/test/setup.rb
|
64
|
+
- spec/examples/T/setup.rb
|
65
|
+
- spec/examples/T/test/setup.rb
|
51
66
|
- spec/filters_spec.rb
|
67
|
+
- spec/local_template_spec.rb
|
52
68
|
- spec/render_spec.rb
|
53
69
|
- benchmarks/eval-vs-non-eval.rb
|
54
70
|
- benchmarks/require-vs-none.rb
|