undies 1.2.0 → 2.0.0
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/.gitignore +2 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +10 -5
- data/Rakefile +2 -4
- data/bench/large.html.rb +32 -0
- data/bench/procs.rb +106 -0
- data/bench/profiler.rb +25 -0
- data/bench/small.html.rb +32 -0
- data/bench/verylarge.html.rb +32 -0
- data/lib/undies/element.rb +61 -61
- data/lib/undies/named_source.rb +54 -0
- data/lib/undies/node.rb +16 -24
- data/lib/undies/node_buffer.rb +35 -0
- data/lib/undies/output.rb +64 -0
- data/lib/undies/source.rb +58 -12
- data/lib/undies/source_stack.rb +22 -0
- data/lib/undies/template.rb +47 -134
- data/lib/undies/version.rb +1 -1
- data/lib/undies.rb +1 -11
- data/test/element_test.rb +106 -99
- data/test/helper.rb +4 -2
- data/test/irb.rb +3 -4
- data/test/named_source_test.rb +91 -0
- data/test/node_buffer_test.rb +54 -0
- data/test/node_test.rb +19 -10
- data/test/output_test.rb +116 -0
- data/test/source_stack_test.rb +48 -0
- data/test/source_test.rb +131 -27
- data/test/template_test.rb +120 -145
- data/test/templates/layout.html.rb +1 -1
- data/undies.gemspec +1 -1
- metadata +27 -23
- data/lib/undies/element_stack.rb +0 -35
- data/lib/undies/node_list.rb +0 -35
- data/lib/undies/partial.rb +0 -23
- data/lib/undies/partial_data.rb +0 -32
- data/test/element_stack_test.rb +0 -77
- data/test/fixtures/partial_template.rb +0 -6
- data/test/node_list_test.rb +0 -69
- data/test/partial_data_test.rb +0 -100
- data/test/partial_test.rb +0 -63
data/test/template_test.rb
CHANGED
@@ -1,117 +1,116 @@
|
|
1
|
-
require "
|
1
|
+
require "assert"
|
2
2
|
|
3
3
|
require "stringio"
|
4
4
|
require "undies/template"
|
5
5
|
|
6
6
|
class Undies::Template
|
7
7
|
|
8
|
-
class
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
should have_instance_methods :_, :__, :element, :tag
|
15
|
-
should have_accessor :___nodes
|
8
|
+
class BasicTests < Assert::Context
|
9
|
+
desc 'a template'
|
10
|
+
before do
|
11
|
+
src = Undies::Source.new(Proc.new {})
|
12
|
+
@outstream = StringIO.new(@out = "")
|
13
|
+
@output = Undies::Output.new(@outstream)
|
16
14
|
|
17
|
-
|
18
|
-
assert_kind_of Undies::NodeList, subject.___nodes
|
15
|
+
@t = Undies::Template.new(src, {}, @output)
|
19
16
|
end
|
17
|
+
subject { @t }
|
20
18
|
|
21
|
-
should
|
22
|
-
|
19
|
+
should have_class_method :output
|
20
|
+
should have_instance_method :to_s
|
21
|
+
should have_instance_methods :element, :tag, :escape_html
|
22
|
+
should have_instance_methods :_, :__
|
23
|
+
should have_instance_methods :__yield, :__partial
|
24
|
+
|
25
|
+
should "provide access to its output object via a class method" do
|
26
|
+
assert_same @output, Undies::Template.output(@t)
|
23
27
|
end
|
24
28
|
|
25
29
|
should "maintain the template's scope throughout content blocks" do
|
26
|
-
templ = Undies::Template.new do
|
30
|
+
templ = Undies::Template.new(Undies::Source.new do
|
27
31
|
_div {
|
28
32
|
_div {
|
29
33
|
__ self.object_id
|
30
34
|
}
|
31
35
|
}
|
32
|
-
end
|
33
|
-
assert_equal "<div><div>#{templ.object_id}</div></div>",
|
36
|
+
end, {}, @output)
|
37
|
+
assert_equal "<div><div>#{templ.object_id}</div></div>", @out
|
34
38
|
end
|
35
39
|
|
36
40
|
should "generate pretty printed markup" do
|
37
41
|
file = 'test/templates/test.html.rb'
|
42
|
+
output = Undies::Output.new(@outstream, :pp => 2)
|
43
|
+
Undies::Template.new(Undies::Source.new(File.expand_path(file)), {}, output)
|
38
44
|
assert_equal(
|
39
|
-
%{
|
40
|
-
|
41
|
-
|
45
|
+
%{
|
46
|
+
<html>
|
47
|
+
<head></head>
|
42
48
|
<body>
|
43
|
-
<div>
|
44
|
-
Hi
|
45
|
-
</div>
|
49
|
+
<div>Hi</div>
|
46
50
|
</body>
|
47
|
-
</html>
|
48
|
-
|
49
|
-
Undies::Template.new(File.expand_path(file)).to_s(2)
|
51
|
+
</html>},
|
52
|
+
@out
|
50
53
|
)
|
51
54
|
end
|
52
55
|
|
53
56
|
end
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
class NodeTest < BasicTest
|
58
|
-
context "with text data"
|
58
|
+
class NodeTests < BasicTests
|
59
|
+
desc "with text data"
|
59
60
|
before do
|
60
61
|
@data = "stuff & <em>more stuff</em>"
|
61
62
|
end
|
62
63
|
|
63
|
-
should "return a text node using the '__' and '_' methods" do
|
64
|
-
assert_kind_of Undies::Node, subject.__(@data)
|
65
|
-
assert_kind_of Undies::Node, subject._(@data)
|
66
|
-
end
|
67
|
-
|
68
|
-
should "also add the node using the '__' and '_' methods" do
|
69
|
-
subject.__(@data)
|
70
|
-
assert_equal 1, subject.___nodes.size
|
71
|
-
subject._(@data)
|
72
|
-
assert_equal 2, subject.___nodes.size
|
73
|
-
end
|
74
|
-
|
75
64
|
should "add the text un-escaped using the '__' method" do
|
76
|
-
|
65
|
+
Undies::Template.new(Undies::Source.new do
|
66
|
+
__ data
|
67
|
+
end, {:data => @data}, @output)
|
68
|
+
assert_equal @data, @out
|
77
69
|
end
|
78
70
|
|
79
71
|
should "add the text escaped using the '_' method" do
|
80
|
-
|
72
|
+
Undies::Template.new(Undies::Source.new do
|
73
|
+
_ data
|
74
|
+
end, {:data => @data}, @output)
|
75
|
+
assert_equal subject.send(:escape_html, @data), @out
|
81
76
|
end
|
82
77
|
|
83
78
|
should "add empty string nodes using '__' and '_' methods with no args" do
|
84
|
-
|
85
|
-
|
79
|
+
Undies::Template.new(Undies::Source.new do
|
80
|
+
_
|
81
|
+
__
|
82
|
+
end, {:data => @data}, @output)
|
83
|
+
assert_equal "", @out
|
86
84
|
end
|
87
85
|
|
88
86
|
end
|
89
87
|
|
88
|
+
class ElementTests < BasicTests
|
89
|
+
desc "using the 'element' helper"
|
90
90
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
assert_equal Undies::Element.new(Undies::ElementStack.new, :br), subject.element(:br)
|
91
|
+
should "stream element output" do
|
92
|
+
Undies::Template.new(Undies::Source.new do
|
93
|
+
element(:br)
|
94
|
+
end, {}, @output)
|
95
|
+
assert_equal "<br />", @out
|
97
96
|
end
|
98
97
|
|
99
98
|
should "alias it with 'tag'" do
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
subject.element(:br)
|
105
|
-
assert_equal 1, subject.___nodes.size
|
106
|
-
assert_equal Undies::Element.new(Undies::ElementStack.new, :br), subject.___nodes.first
|
99
|
+
Undies::Template.new(Undies::Source.new do
|
100
|
+
tag(:br)
|
101
|
+
end, {}, @output)
|
102
|
+
assert_equal "<br />", @out
|
107
103
|
end
|
108
104
|
|
109
105
|
should "respond to underscore-prefix methods" do
|
110
|
-
assert subject.respond_to?(:
|
106
|
+
assert subject.respond_to?(:_br)
|
111
107
|
end
|
112
108
|
|
113
109
|
should "respond to underscore-prefix methods as element methods" do
|
114
|
-
|
110
|
+
Undies::Template.new(Undies::Source.new do
|
111
|
+
_br
|
112
|
+
end, {}, @output)
|
113
|
+
assert_equal "<br />", @out
|
115
114
|
end
|
116
115
|
|
117
116
|
should "not respond to element methods without an underscore-prefix" do
|
@@ -123,153 +122,129 @@ class Undies::Template
|
|
123
122
|
|
124
123
|
end
|
125
124
|
|
126
|
-
|
127
|
-
|
128
|
-
class LocalsTest < BasicTest
|
125
|
+
class LocalDataTests < BasicTests
|
129
126
|
|
130
127
|
should "only accept the data if it is a Hash" do
|
131
128
|
assert_raises ArgumentError do
|
132
|
-
|
133
|
-
end
|
134
|
-
assert_raises ArgumentError do
|
135
|
-
(Undies::Template.new('test/templates/test.html.rb', "some_data")).some
|
129
|
+
Undies::Template.new(Undies::Source.new(Proc.new {}), "some data")
|
136
130
|
end
|
137
131
|
assert_respond_to(
|
138
|
-
|
139
|
-
:some
|
140
|
-
)
|
141
|
-
assert_respond_to(
|
142
|
-
Undies::Template.new('test/templates/test.html.rb', :some => "data"),
|
143
|
-
:some
|
132
|
+
:some,
|
133
|
+
Undies::Template.new(Undies::Source.new(Proc.new {}), {:some => 'data'}, @output)
|
144
134
|
)
|
145
135
|
end
|
146
136
|
|
147
137
|
should "complain if trying to set locals that conflict with public methods" do
|
148
138
|
assert_raises ArgumentError do
|
149
|
-
Undies::Template.new(:_ => "yay!")
|
139
|
+
Undies::Template.new(Undies::Source.new(Proc.new {}), {:_ => "yay!"})
|
150
140
|
end
|
151
141
|
end
|
152
142
|
|
153
143
|
should "respond to each locals key with its value" do
|
154
|
-
templ = Undies::Template.new(:some =>
|
144
|
+
templ = Undies::Template.new(Undies::Source.new(Proc.new {}), {:some => 'data'}, @output)
|
155
145
|
assert_equal "data", templ.some
|
156
146
|
end
|
157
147
|
|
158
148
|
should "be able to access its locals in the template definition" do
|
159
|
-
|
149
|
+
src = Undies::Source.new do
|
160
150
|
_div {
|
161
151
|
_div { _ name }
|
162
152
|
}
|
163
153
|
end
|
164
|
-
|
154
|
+
Undies::Template.new(src, {:name => "awesome"}, @output)
|
155
|
+
assert_equal "<div><div>awesome</div></div>", @out
|
165
156
|
end
|
166
157
|
|
167
158
|
end
|
168
159
|
|
169
|
-
|
170
|
-
|
171
|
-
class DefinitionTest < BasicTest
|
160
|
+
class LayoutTests < BasicTests
|
172
161
|
setup do
|
173
162
|
@expected_output = "<html><head></head><body><div>Hi</div></body></html>"
|
174
|
-
|
163
|
+
|
164
|
+
@layout_proc = Proc.new do
|
175
165
|
_html {
|
176
166
|
_head {}
|
177
167
|
_body {
|
178
|
-
|
168
|
+
__yield
|
179
169
|
}
|
180
170
|
}
|
181
171
|
end
|
172
|
+
@layout_file = File.expand_path "test/templates/layout.html.rb"
|
173
|
+
|
182
174
|
@content_proc = Proc.new do
|
183
175
|
_div { _ "Hi" }
|
184
176
|
end
|
185
|
-
@layout_proc = Proc.new do
|
186
|
-
_html { _head {}; _body { yield if block_given? } }
|
187
|
-
end
|
188
|
-
@layout_file = File.expand_path "test/templates/layout.html.rb"
|
189
177
|
@content_file = File.expand_path "test/templates/content.html.rb"
|
190
|
-
@test_content_file = File.expand_path "test/templates/test.html.rb"
|
191
|
-
end
|
192
178
|
|
193
|
-
|
194
|
-
|
195
|
-
|
179
|
+
@cp_lp_source = Undies::Source.new(:layout => @layout_proc, &@content_proc)
|
180
|
+
@cp_lf_source = Undies::Source.new(:layout => @layout_file, &@content_proc)
|
181
|
+
@cf_lp_source = Undies::Source.new(@content_file, :layout => @layout_proc)
|
182
|
+
@cf_lf_source = Undies::Source.new(@content_file, :layout => @layout_file)
|
196
183
|
end
|
197
184
|
|
198
|
-
should "
|
199
|
-
|
200
|
-
|
201
|
-
_div { _ "Should not render b/c argument error" }
|
202
|
-
end
|
203
|
-
end
|
185
|
+
should "generate markup given proc content in a proc layout" do
|
186
|
+
Undies::Template.new(@cp_lp_source, {}, @output)
|
187
|
+
assert_equal @expected_output, @out
|
204
188
|
end
|
205
189
|
|
206
|
-
should "generate markup given
|
207
|
-
|
208
|
-
|
209
|
-
_div { _ "Should not render b/c template prefers a file" }
|
210
|
-
end
|
211
|
-
assert_equal @expected_output, template_no_block.to_s
|
212
|
-
assert_equal @expected_output, template_w_block.to_s
|
190
|
+
should "generate markup given proc content in a layout file" do
|
191
|
+
Undies::Template.new(@cp_lf_source, {}, @output)
|
192
|
+
assert_equal @expected_output, @out
|
213
193
|
end
|
214
194
|
|
215
|
-
should "generate markup given
|
216
|
-
|
217
|
-
|
218
|
-
end
|
219
|
-
assert_equal @expected_output, template.to_s
|
195
|
+
should "generate markup given a content file in a proc layout" do
|
196
|
+
Undies::Template.new(@cf_lp_source, {}, @output)
|
197
|
+
assert_equal @expected_output, @out
|
220
198
|
end
|
221
199
|
|
222
|
-
should "generate markup given
|
223
|
-
|
224
|
-
assert_equal @expected_output,
|
200
|
+
should "generate markup given a content file in a layout file" do
|
201
|
+
Undies::Template.new(@cf_lf_source, {}, @output)
|
202
|
+
assert_equal @expected_output, @out
|
225
203
|
end
|
226
204
|
|
227
|
-
|
228
|
-
template = Undies::Template.new(@content_file, @layout_file)
|
229
|
-
assert_equal @expected_output, template.to_s
|
230
|
-
end
|
205
|
+
end
|
231
206
|
|
232
|
-
|
233
|
-
|
234
|
-
Undies::Template.new(@layout_proc) do
|
235
|
-
_div { _ "Hi" }
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
207
|
+
class PartialTests < BasicTests
|
208
|
+
desc "using partials"
|
239
209
|
|
240
|
-
|
241
|
-
|
242
|
-
Undies::
|
243
|
-
|
210
|
+
before do
|
211
|
+
@source = Undies::Source.new(Proc.new do
|
212
|
+
partial_source = Undies::Source.new(Proc.new do
|
213
|
+
_div { _ thing }
|
214
|
+
end)
|
215
|
+
|
216
|
+
_div {
|
217
|
+
_ thing
|
218
|
+
__partial partial_source, {:thing => 1234}
|
219
|
+
}
|
220
|
+
end)
|
221
|
+
@data = {:thing => 'abcd'}
|
244
222
|
end
|
245
223
|
|
246
|
-
should "
|
247
|
-
|
248
|
-
|
249
|
-
end
|
224
|
+
should "render the partial source with its own scope/data" do
|
225
|
+
Undies::Template.new(@source, @data, @output)
|
226
|
+
assert_equal "<div>abcd<div>1234</div></div>", @out
|
250
227
|
end
|
251
228
|
|
252
229
|
end
|
253
230
|
|
254
|
-
|
255
|
-
|
256
|
-
class StreamTest < BasicTest
|
257
|
-
context "that is streaming"
|
231
|
+
class StreamTests < BasicTests
|
232
|
+
desc "that is streaming"
|
258
233
|
|
259
234
|
before do
|
260
|
-
@output = ""
|
261
|
-
|
235
|
+
outstream = StringIO.new(@output = "")
|
236
|
+
src = Undies::Source.new do
|
237
|
+
_div.good.thing!(:type => "something") {
|
238
|
+
__ "action"
|
239
|
+
}
|
240
|
+
end
|
241
|
+
@expected_output = "<div class=\"good\" id=\"thing\" type=\"something\">action</div>"
|
242
|
+
|
243
|
+
Undies::Template.new(src, {}, Undies::Output.new(outstream))
|
262
244
|
end
|
263
245
|
|
264
246
|
should "should write to the stream as its being constructed" do
|
265
|
-
|
266
|
-
_div {
|
267
|
-
_div.good.thing!(:type => "something") {
|
268
|
-
__ "good streaming action"
|
269
|
-
}
|
270
|
-
}
|
271
|
-
end
|
272
|
-
assert_equal "<div><div class=\"good\" id=\"thing\" type=\"something\">good streaming action</div></div>", @output
|
247
|
+
assert_equal @expected_output, @output
|
273
248
|
end
|
274
249
|
|
275
250
|
end
|
data/undies.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: undies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
-
- 1
|
8
7
|
- 2
|
9
8
|
- 0
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 2.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-12-05 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :development
|
@@ -40,13 +40,14 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
hash:
|
43
|
+
hash: 5
|
44
44
|
segments:
|
45
|
-
- 2
|
46
45
|
- 0
|
47
|
-
|
46
|
+
- 7
|
47
|
+
- 3
|
48
|
+
version: 0.7.3
|
48
49
|
version_requirements: *id002
|
49
|
-
name:
|
50
|
+
name: assert
|
50
51
|
description: A pure-Ruby HTML and plain text templating DSL.
|
51
52
|
email:
|
52
53
|
- kelly@kelredd.com
|
@@ -62,25 +63,29 @@ files:
|
|
62
63
|
- Gemfile.lock
|
63
64
|
- README.rdoc
|
64
65
|
- Rakefile
|
66
|
+
- bench/large.html.rb
|
67
|
+
- bench/procs.rb
|
68
|
+
- bench/profiler.rb
|
69
|
+
- bench/small.html.rb
|
70
|
+
- bench/verylarge.html.rb
|
65
71
|
- lib/undies.rb
|
66
72
|
- lib/undies/element.rb
|
67
|
-
- lib/undies/
|
73
|
+
- lib/undies/named_source.rb
|
68
74
|
- lib/undies/node.rb
|
69
|
-
- lib/undies/
|
70
|
-
- lib/undies/
|
71
|
-
- lib/undies/partial_data.rb
|
75
|
+
- lib/undies/node_buffer.rb
|
76
|
+
- lib/undies/output.rb
|
72
77
|
- lib/undies/source.rb
|
78
|
+
- lib/undies/source_stack.rb
|
73
79
|
- lib/undies/template.rb
|
74
80
|
- lib/undies/version.rb
|
75
|
-
- test/element_stack_test.rb
|
76
81
|
- test/element_test.rb
|
77
|
-
- test/fixtures/partial_template.rb
|
78
82
|
- test/helper.rb
|
79
83
|
- test/irb.rb
|
80
|
-
- test/
|
84
|
+
- test/named_source_test.rb
|
85
|
+
- test/node_buffer_test.rb
|
81
86
|
- test/node_test.rb
|
82
|
-
- test/
|
83
|
-
- test/
|
87
|
+
- test/output_test.rb
|
88
|
+
- test/source_stack_test.rb
|
84
89
|
- test/source_test.rb
|
85
90
|
- test/template_test.rb
|
86
91
|
- test/templates/content.html.rb
|
@@ -117,20 +122,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
122
|
requirements: []
|
118
123
|
|
119
124
|
rubyforge_project:
|
120
|
-
rubygems_version: 1.8.
|
125
|
+
rubygems_version: 1.8.11
|
121
126
|
signing_key:
|
122
127
|
specification_version: 3
|
123
128
|
summary: A pure-Ruby HTML and plain text templating DSL.
|
124
129
|
test_files:
|
125
|
-
- test/element_stack_test.rb
|
126
130
|
- test/element_test.rb
|
127
|
-
- test/fixtures/partial_template.rb
|
128
131
|
- test/helper.rb
|
129
132
|
- test/irb.rb
|
130
|
-
- test/
|
133
|
+
- test/named_source_test.rb
|
134
|
+
- test/node_buffer_test.rb
|
131
135
|
- test/node_test.rb
|
132
|
-
- test/
|
133
|
-
- test/
|
136
|
+
- test/output_test.rb
|
137
|
+
- test/source_stack_test.rb
|
134
138
|
- test/source_test.rb
|
135
139
|
- test/template_test.rb
|
136
140
|
- test/templates/content.html.rb
|
data/lib/undies/element_stack.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require "undies/element"
|
2
|
-
|
3
|
-
module Undies
|
4
|
-
class ElementStack < ::Array
|
5
|
-
|
6
|
-
# an element stack is used to manage which element is receiving content
|
7
|
-
# if an undies template is streaming io, then when an element is pushed,
|
8
|
-
# its start tag is added to the stream and its end tag is added when popped.
|
9
|
-
|
10
|
-
attr_reader :io
|
11
|
-
|
12
|
-
def initialize(first_item=nil, io=nil, *args)
|
13
|
-
@io = io
|
14
|
-
# always initialize empty
|
15
|
-
super()
|
16
|
-
self.send(:<<, first_item) if first_item
|
17
|
-
end
|
18
|
-
|
19
|
-
def push(item)
|
20
|
-
unless item.kind_of?(Element)
|
21
|
-
raise ArgumentError, 'you can only push element nodes to an ElementStack'
|
22
|
-
end
|
23
|
-
super
|
24
|
-
@io << item.start_tag if @io
|
25
|
-
item
|
26
|
-
end
|
27
|
-
|
28
|
-
def pop
|
29
|
-
item = super
|
30
|
-
@io << item.end_tag if @io
|
31
|
-
item
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
data/lib/undies/node_list.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require "undies/node"
|
2
|
-
|
3
|
-
module Undies
|
4
|
-
|
5
|
-
# a node list is an ordered collection of node data
|
6
|
-
# * the Template class builds one as the template source is evaluated
|
7
|
-
# * a list may contains nodes and/or other node lists
|
8
|
-
# * serialize a list using 'to_s' using optional pretty printing args
|
9
|
-
# * any pretty printing args are used to render the individual nodes/lists
|
10
|
-
class NodeList < ::Array
|
11
|
-
|
12
|
-
def initialize(*args)
|
13
|
-
# always initialize empty
|
14
|
-
super()
|
15
|
-
end
|
16
|
-
|
17
|
-
def append(node)
|
18
|
-
self << node
|
19
|
-
node
|
20
|
-
end
|
21
|
-
|
22
|
-
def <<(item)
|
23
|
-
unless item.kind_of?(Node) || item.kind_of?(NodeList)
|
24
|
-
raise ArgumentError, 'you can only append nodes or other node lists to a NodeList'
|
25
|
-
end
|
26
|
-
super
|
27
|
-
end
|
28
|
-
|
29
|
-
def to_s(pp_level=0, pp_indent=nil)
|
30
|
-
self.collect{|n| n.to_s(pp_level, pp_indent)}.join
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
data/lib/undies/partial.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'undies/partial_data'
|
2
|
-
require 'undies/template'
|
3
|
-
|
4
|
-
module Undies
|
5
|
-
module PartialTemplate
|
6
|
-
|
7
|
-
def initialize(path, *args)
|
8
|
-
locals = PartialLocals.new(path)
|
9
|
-
locals.values, io, locals.object = self.___partial_args(*args)
|
10
|
-
super(path, io, locals)
|
11
|
-
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
def ___partial_args(*args)
|
16
|
-
[ args.last.kind_of?(::Hash) ? args.pop : {},
|
17
|
-
self.___is_a_stream?(args.last) ? args.pop : nil,
|
18
|
-
args.first
|
19
|
-
]
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
data/lib/undies/partial_data.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module Undies
|
2
|
-
class PartialLocals < ::Hash
|
3
|
-
|
4
|
-
attr_reader :path, :name
|
5
|
-
|
6
|
-
def initialize(path)
|
7
|
-
self.path = path
|
8
|
-
super()
|
9
|
-
end
|
10
|
-
|
11
|
-
def path=(value)
|
12
|
-
raise ArgumentError, "partial path required" if value.nil?
|
13
|
-
@path = value
|
14
|
-
@name = File.basename(@path.to_s).split(".").first.gsub(/^[^A-Za-z]+/, '')
|
15
|
-
end
|
16
|
-
|
17
|
-
def values=(value)
|
18
|
-
raise ArgumentError if !value.kind_of?(::Hash)
|
19
|
-
if value.has_key?(@name.to_sym)
|
20
|
-
value[@name] = value.delete(@name.to_sym)
|
21
|
-
end
|
22
|
-
self.merge!(value)
|
23
|
-
end
|
24
|
-
|
25
|
-
def object=(value)
|
26
|
-
if value
|
27
|
-
self[@name] = value
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|