attrtastic 0.1.3 → 0.2.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/Rakefile +1 -0
- data/VERSION +1 -1
- data/attrtastic.gemspec +5 -2
- data/lib/attrtastic.rb +161 -32
- data/test/helper.rb +1 -0
- data/test/test_attribute.rb +120 -95
- data/test/test_attributes.rb +415 -87
- data/test/test_attrtastic.rb +74 -70
- data/test/test_semantic_attributes_helper.rb +38 -34
- metadata +12 -2
data/test/test_attributes.rb
CHANGED
@@ -2,104 +2,432 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestAttributes < Test::Unit::TestCase
|
4
4
|
|
5
|
-
|
6
|
-
setup_fixtures
|
7
|
-
end
|
5
|
+
context "attributes" do
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
@user_builder.attributes do
|
12
|
-
block_run = true
|
7
|
+
setup do
|
8
|
+
setup_fixtures
|
13
9
|
end
|
14
10
|
|
15
|
-
|
16
|
-
|
11
|
+
should "run block" do
|
12
|
+
block_run = false
|
13
|
+
@user_builder.attributes do
|
14
|
+
block_run = true
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
<div class="attributes">
|
21
|
-
</div>
|
22
|
-
EOHTML
|
17
|
+
assert block_run
|
18
|
+
end
|
23
19
|
|
24
|
-
|
25
|
-
|
20
|
+
should "generate output even when no block given" do
|
21
|
+
expected = html <<-EOHTML
|
22
|
+
<div class="attributes">
|
23
|
+
</div>
|
24
|
+
EOHTML
|
26
25
|
|
27
|
-
|
28
|
-
|
26
|
+
@user_builder.attributes
|
27
|
+
actual = @template.output_buffer.to_s
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
<div class="attributes">
|
33
|
-
<ol>
|
34
|
-
</ol>
|
35
|
-
</div>
|
36
|
-
EOHTML
|
29
|
+
assert_equal expected, actual
|
30
|
+
end
|
37
31
|
|
38
|
-
|
39
|
-
|
32
|
+
should "generate output with block given" do
|
33
|
+
expected = html <<-EOHTML
|
34
|
+
<div class="attributes">
|
35
|
+
<ol>
|
36
|
+
</ol>
|
37
|
+
</div>
|
38
|
+
EOHTML
|
40
39
|
|
41
|
-
|
42
|
-
|
40
|
+
@user_builder.attributes do end
|
41
|
+
actual = @template.output_buffer.to_s
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
<div class="attributes">
|
47
|
-
<div class="legend">Legend</div>
|
48
|
-
<ol>
|
49
|
-
</ol>
|
50
|
-
</div>
|
51
|
-
EOHTML
|
52
|
-
|
53
|
-
@user_builder.attributes "Legend" do end
|
54
|
-
actual = @template.output_buffer.to_s
|
55
|
-
assert_equal expected, actual
|
56
|
-
end
|
43
|
+
assert_equal expected, actual
|
44
|
+
end
|
57
45
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
<
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
<li class="attribute">
|
67
|
-
<span class="label">Email</span>
|
68
|
-
<span class="value">john@doe.com</span>
|
69
|
-
</li>
|
70
|
-
</ol>
|
71
|
-
</div>
|
72
|
-
EOHTML
|
73
|
-
|
74
|
-
@user_builder.attributes :full_name, :email
|
75
|
-
actual = @template.output_buffer.to_s
|
76
|
-
assert_equal expected, actual
|
77
|
-
end
|
46
|
+
should "show header" do
|
47
|
+
expected = html <<-EOHTML
|
48
|
+
<div class="attributes">
|
49
|
+
<div class="legend">Legend</div>
|
50
|
+
<ol>
|
51
|
+
</ol>
|
52
|
+
</div>
|
53
|
+
EOHTML
|
78
54
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
<
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
55
|
+
@user_builder.attributes "Legend" do end
|
56
|
+
actual = @template.output_buffer.to_s
|
57
|
+
assert_equal expected, actual
|
58
|
+
|
59
|
+
@template.output_buffer.clear
|
60
|
+
@user_builder.attributes :name => "Legend" do end
|
61
|
+
actual = @template.output_buffer.to_s
|
62
|
+
assert_equal expected, actual
|
63
|
+
end
|
64
|
+
|
65
|
+
context "with fields list" do
|
66
|
+
|
67
|
+
should "generate output" do
|
68
|
+
expected = html <<-EOHTML
|
69
|
+
<div class="attributes">
|
70
|
+
<ol>
|
71
|
+
<li class="attribute">
|
72
|
+
<span class="label">Full name</span>
|
73
|
+
<span class="value">Doe, John</span>
|
74
|
+
</li>
|
75
|
+
<li class="attribute">
|
76
|
+
<span class="label">Email</span>
|
77
|
+
<span class="value">john@doe.com</span>
|
78
|
+
</li>
|
79
|
+
</ol>
|
80
|
+
</div>
|
81
|
+
EOHTML
|
82
|
+
|
83
|
+
@user_builder.attributes :full_name, :email
|
84
|
+
actual = @template.output_buffer.to_s
|
85
|
+
assert_equal expected, actual
|
86
|
+
end
|
87
|
+
|
88
|
+
should "show header" do
|
89
|
+
expected = html <<-EOHTML
|
90
|
+
<div class="attributes contact">
|
91
|
+
<div class="legend">Contact</div>
|
92
|
+
<ol>
|
93
|
+
<li class="attribute">
|
94
|
+
<span class="label">Full name</span>
|
95
|
+
<span class="value">Doe, John</span>
|
96
|
+
</li>
|
97
|
+
<li class="attribute">
|
98
|
+
<span class="label">Title</span>
|
99
|
+
<span class="value"></span>
|
100
|
+
</li>
|
101
|
+
<li class="attribute">
|
102
|
+
<span class="label">Email</span>
|
103
|
+
<span class="value">john@doe.com</span>
|
104
|
+
</li>
|
105
|
+
</ol>
|
106
|
+
</div>
|
107
|
+
EOHTML
|
108
|
+
|
109
|
+
@user_builder.attributes "Contact", :full_name, :title, :email, :html => {:class => "contact"}, :display_empty => true
|
110
|
+
actual = @template.output_buffer.to_s
|
111
|
+
assert_equal expected, actual
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
context "with :for option" do
|
117
|
+
should "yield block" do
|
118
|
+
block_run = false
|
119
|
+
@blog_builder.attributes :for => nil do |author|
|
120
|
+
block_run = true
|
121
|
+
end
|
122
|
+
|
123
|
+
assert block_run
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
context "with :for => :method_name pointing to single object" do
|
129
|
+
|
130
|
+
should "allow to access inner object" do
|
131
|
+
@blog_builder.attributes :for => :author do |author|
|
132
|
+
|
133
|
+
assert_equal @blog.author, author.record
|
134
|
+
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
should "generate output for given inner object" do
|
139
|
+
@blog_builder.attributes :for => :author do |author|
|
140
|
+
|
141
|
+
expected = html <<-EOHTML
|
142
|
+
<li class="attribute">
|
143
|
+
<span class="label">Full name</span>
|
144
|
+
<span class="value">Doe, John</span>
|
145
|
+
</li>
|
146
|
+
EOHTML
|
147
|
+
|
148
|
+
actual = author.attribute :full_name
|
149
|
+
assert_equal expected, actual
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
expected = html <<-EOHTML
|
154
|
+
<div class="attributes">
|
155
|
+
<ol>
|
156
|
+
</ol>
|
157
|
+
</div>
|
158
|
+
EOHTML
|
159
|
+
|
160
|
+
actual = @template.output_buffer
|
161
|
+
assert_equal expected, actual
|
162
|
+
end
|
163
|
+
|
164
|
+
should "show header" do
|
165
|
+
@blog_builder.attributes "Author", :for => :author do |author|
|
166
|
+
end
|
167
|
+
|
168
|
+
expected = html <<-EOHTML
|
169
|
+
<div class="attributes">
|
170
|
+
<div class="legend">Author</div>
|
171
|
+
<ol>
|
172
|
+
</ol>
|
173
|
+
</div>
|
174
|
+
EOHTML
|
175
|
+
|
176
|
+
actual = @template.output_buffer
|
177
|
+
assert_equal expected, actual
|
178
|
+
end
|
179
|
+
|
180
|
+
should "work with field list" do
|
181
|
+
expected = html <<-EOHTML
|
182
|
+
<div class="attributes">
|
183
|
+
<ol>
|
184
|
+
<li class="attribute">
|
185
|
+
<span class="label">Full name</span>
|
186
|
+
<span class="value">Doe, John</span>
|
187
|
+
</li>
|
188
|
+
</ol>
|
189
|
+
</div>
|
190
|
+
EOHTML
|
191
|
+
|
192
|
+
@blog_builder.attributes :full_name, :for => :author
|
193
|
+
|
194
|
+
actual = @template.output_buffer
|
195
|
+
assert_equal expected, actual
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
context "with :for => object" do
|
200
|
+
|
201
|
+
should "allow to acces given object" do
|
202
|
+
@blog_builder.attributes :for => @user do |author|
|
203
|
+
|
204
|
+
assert_equal @user, author.record
|
205
|
+
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
should "generate output for given inner object" do
|
210
|
+
@blog_builder.attributes :for => @user do |author|
|
104
211
|
|
212
|
+
expected = html <<-EOHTML
|
213
|
+
<li class="attribute">
|
214
|
+
<span class="label">Full name</span>
|
215
|
+
<span class="value">Doe, John</span>
|
216
|
+
</li>
|
217
|
+
EOHTML
|
218
|
+
|
219
|
+
actual = author.attribute :full_name
|
220
|
+
assert_equal expected, actual
|
221
|
+
|
222
|
+
end
|
223
|
+
|
224
|
+
expected = html <<-EOHTML
|
225
|
+
<div class="attributes">
|
226
|
+
<ol>
|
227
|
+
</ol>
|
228
|
+
</div>
|
229
|
+
EOHTML
|
230
|
+
|
231
|
+
actual = @template.output_buffer
|
232
|
+
assert_equal expected, actual
|
233
|
+
end
|
234
|
+
|
235
|
+
should "show header" do
|
236
|
+
@blog_builder.attributes "Author", :for => @user do |author|
|
237
|
+
end
|
238
|
+
|
239
|
+
expected = html <<-EOHTML
|
240
|
+
<div class="attributes">
|
241
|
+
<div class="legend">Author</div>
|
242
|
+
<ol>
|
243
|
+
</ol>
|
244
|
+
</div>
|
245
|
+
EOHTML
|
246
|
+
|
247
|
+
actual = @template.output_buffer
|
248
|
+
assert_equal expected, actual
|
249
|
+
end
|
250
|
+
|
251
|
+
should "work with field list" do
|
252
|
+
expected = html <<-EOHTML
|
253
|
+
<div class="attributes">
|
254
|
+
<ol>
|
255
|
+
<li class="attribute">
|
256
|
+
<span class="label">Full name</span>
|
257
|
+
<span class="value">Doe, John</span>
|
258
|
+
</li>
|
259
|
+
</ol>
|
260
|
+
</div>
|
261
|
+
EOHTML
|
262
|
+
|
263
|
+
@blog_builder.attributes :full_name, :for => @user
|
264
|
+
|
265
|
+
actual = @template.output_buffer
|
266
|
+
assert_equal expected, actual
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
context "with :for => :method_name pointing to collection" do
|
271
|
+
|
272
|
+
should "allow to access inner objects one by one" do
|
273
|
+
posts = []
|
274
|
+
|
275
|
+
@blog_builder.attributes :for => :posts do |post|
|
276
|
+
|
277
|
+
posts << post.record
|
278
|
+
|
279
|
+
end
|
280
|
+
|
281
|
+
assert_equal @blog.posts, posts
|
282
|
+
end
|
283
|
+
|
284
|
+
should "generate output for given objects" do
|
285
|
+
@blog_builder.attributes :for => :posts do |post|
|
286
|
+
end
|
287
|
+
|
288
|
+
expected = html <<-EOHTML
|
289
|
+
<div class="attributes">
|
290
|
+
<ol>
|
291
|
+
</ol>
|
292
|
+
</div>
|
293
|
+
<div class="attributes">
|
294
|
+
<ol>
|
295
|
+
</ol>
|
296
|
+
</div>
|
297
|
+
EOHTML
|
298
|
+
|
299
|
+
actual = @template.output_buffer
|
300
|
+
assert_equal expected, actual
|
301
|
+
end
|
302
|
+
|
303
|
+
should "show header" do
|
304
|
+
@blog_builder.attributes "Post", :for => :posts do |post|
|
305
|
+
end
|
306
|
+
|
307
|
+
expected = html <<-EOHTML
|
308
|
+
<div class="attributes">
|
309
|
+
<div class="legend">Post</div>
|
310
|
+
<ol>
|
311
|
+
</ol>
|
312
|
+
</div>
|
313
|
+
<div class="attributes">
|
314
|
+
<div class="legend">Post</div>
|
315
|
+
<ol>
|
316
|
+
</ol>
|
317
|
+
</div>
|
318
|
+
EOHTML
|
319
|
+
|
320
|
+
actual = @template.output_buffer
|
321
|
+
assert_equal expected, actual
|
322
|
+
end
|
323
|
+
|
324
|
+
should "work with field list" do
|
325
|
+
expected = html <<-EOHTML
|
326
|
+
<div class="attributes">
|
327
|
+
<ol>
|
328
|
+
<li class="attribute">
|
329
|
+
<span class="label">Title</span>
|
330
|
+
<span class="value">Hello World!</span>
|
331
|
+
</li>
|
332
|
+
</ol>
|
333
|
+
</div>
|
334
|
+
<div class="attributes">
|
335
|
+
<ol>
|
336
|
+
<li class="attribute">
|
337
|
+
<span class="label">Title</span>
|
338
|
+
<span class="value">Sorry</span>
|
339
|
+
</li>
|
340
|
+
</ol>
|
341
|
+
</div>
|
342
|
+
EOHTML
|
343
|
+
|
344
|
+
@blog_builder.attributes :title, :for => :posts
|
345
|
+
|
346
|
+
actual = @template.output_buffer
|
347
|
+
assert_equal expected, actual
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
context "with :for => collection" do
|
352
|
+
|
353
|
+
should "allow to access inner objects one by one" do
|
354
|
+
posts = []
|
355
|
+
|
356
|
+
@blog_builder.attributes :for => @blog.posts do |post|
|
357
|
+
|
358
|
+
posts << post.record
|
359
|
+
|
360
|
+
end
|
361
|
+
|
362
|
+
assert_equal @blog.posts, posts
|
363
|
+
end
|
364
|
+
|
365
|
+
should "generate output for given objects" do
|
366
|
+
@blog_builder.attributes :for => @blog.posts do |post|
|
367
|
+
end
|
368
|
+
|
369
|
+
expected = html <<-EOHTML
|
370
|
+
<div class="attributes">
|
371
|
+
<ol>
|
372
|
+
</ol>
|
373
|
+
</div>
|
374
|
+
<div class="attributes">
|
375
|
+
<ol>
|
376
|
+
</ol>
|
377
|
+
</div>
|
378
|
+
EOHTML
|
379
|
+
|
380
|
+
actual = @template.output_buffer
|
381
|
+
assert_equal expected, actual
|
382
|
+
end
|
383
|
+
|
384
|
+
should "show header" do
|
385
|
+
@blog_builder.attributes "Post", :for => @blog.posts do |post|
|
386
|
+
end
|
387
|
+
|
388
|
+
expected = html <<-EOHTML
|
389
|
+
<div class="attributes">
|
390
|
+
<div class="legend">Post</div>
|
391
|
+
<ol>
|
392
|
+
</ol>
|
393
|
+
</div>
|
394
|
+
<div class="attributes">
|
395
|
+
<div class="legend">Post</div>
|
396
|
+
<ol>
|
397
|
+
</ol>
|
398
|
+
</div>
|
399
|
+
EOHTML
|
400
|
+
|
401
|
+
actual = @template.output_buffer
|
402
|
+
assert_equal expected, actual
|
403
|
+
end
|
404
|
+
|
405
|
+
should "work with field list" do
|
406
|
+
expected = html <<-EOHTML
|
407
|
+
<div class="attributes">
|
408
|
+
<ol>
|
409
|
+
<li class="attribute">
|
410
|
+
<span class="label">Title</span>
|
411
|
+
<span class="value">Hello World!</span>
|
412
|
+
</li>
|
413
|
+
</ol>
|
414
|
+
</div>
|
415
|
+
<div class="attributes">
|
416
|
+
<ol>
|
417
|
+
<li class="attribute">
|
418
|
+
<span class="label">Title</span>
|
419
|
+
<span class="value">Sorry</span>
|
420
|
+
</li>
|
421
|
+
</ol>
|
422
|
+
</div>
|
423
|
+
EOHTML
|
424
|
+
|
425
|
+
@blog_builder.attributes :title, :for => @blog.posts
|
426
|
+
|
427
|
+
actual = @template.output_buffer
|
428
|
+
assert_equal expected, actual
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
end
|
105
433
|
end
|
data/test/test_attrtastic.rb
CHANGED
@@ -2,87 +2,91 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestAttrtastic < Test::Unit::TestCase
|
4
4
|
|
5
|
-
|
6
|
-
setup_fixtures
|
7
|
-
end
|
5
|
+
context "Attrtastic" do
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<div class="attributes">
|
13
|
-
<div class="legend">User</div>
|
14
|
-
<ol>
|
15
|
-
<li class="attribute strong">
|
16
|
-
<span class="label">First name</span>
|
17
|
-
<span class="value">John</span>
|
18
|
-
</li>
|
19
|
-
<li class="attribute">
|
20
|
-
<span class="label">Last name</span>
|
21
|
-
<span class="value">Doe</span>
|
22
|
-
</li>
|
23
|
-
</ol>
|
24
|
-
</div>
|
7
|
+
setup do
|
8
|
+
setup_fixtures
|
9
|
+
end
|
25
10
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
11
|
+
should "work with verbose syntax version" do
|
12
|
+
expected = html <<-EOHTML
|
13
|
+
<div class="attrtastic user">
|
14
|
+
<div class="attributes">
|
15
|
+
<div class="legend">User</div>
|
16
|
+
<ol>
|
17
|
+
<li class="attribute strong">
|
18
|
+
<span class="label">First name</span>
|
19
|
+
<span class="value">John</span>
|
20
|
+
</li>
|
21
|
+
<li class="attribute">
|
22
|
+
<span class="label">Last name</span>
|
23
|
+
<span class="value">Doe</span>
|
24
|
+
</li>
|
25
|
+
</ol>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="attributes">
|
29
|
+
<div class="legend">Contact</div>
|
30
|
+
<ol>
|
31
|
+
<li class="attribute">
|
32
|
+
<span class="label">Email</span>
|
33
|
+
<span class="value">john@doe.com</span>
|
34
|
+
</li>
|
35
|
+
</ol>
|
36
|
+
</div>
|
34
37
|
</div>
|
35
|
-
|
36
|
-
EOHTML
|
38
|
+
EOHTML
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
@template.semantic_attributes_for(@user) do |attr|
|
41
|
+
attr.attributes "User" do
|
42
|
+
@template.output_buffer << (attr.attribute :first_name, :html => {:class => :strong}).to_s
|
43
|
+
@template.output_buffer << (attr.attribute :last_name).to_s
|
44
|
+
@template.output_buffer << (attr.attribute :title).to_s
|
45
|
+
end
|
46
|
+
attr.attributes :name => "Contact" do
|
47
|
+
@template.output_buffer << (attr.attribute :email).to_s
|
48
|
+
end
|
46
49
|
end
|
47
|
-
end
|
48
50
|
|
49
|
-
|
50
|
-
|
51
|
-
|
51
|
+
actual = @template.output_buffer.to_s
|
52
|
+
assert_equal expected, actual
|
53
|
+
end
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
55
|
+
should "work with compact syntax version" do
|
56
|
+
expected = html <<-EOHTML
|
57
|
+
<div class="attrtastic user">
|
58
|
+
<div class="attributes">
|
59
|
+
<div class="legend">User</div>
|
60
|
+
<ol>
|
61
|
+
<li class="attribute">
|
62
|
+
<span class="label">First name</span>
|
63
|
+
<span class="value">John</span>
|
64
|
+
</li>
|
65
|
+
<li class="attribute">
|
66
|
+
<span class="label">Last name</span>
|
67
|
+
<span class="value">Doe</span>
|
68
|
+
</li>
|
69
|
+
</ol>
|
70
|
+
</div>
|
69
71
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
72
|
+
<div class="attributes">
|
73
|
+
<div class="legend">Contact</div>
|
74
|
+
<ol>
|
75
|
+
<li class="attribute">
|
76
|
+
<span class="label">Email</span>
|
77
|
+
<span class="value">john@doe.com</span>
|
78
|
+
</li>
|
79
|
+
</ol>
|
80
|
+
</div>
|
78
81
|
</div>
|
79
|
-
|
80
|
-
EOHTML
|
82
|
+
EOHTML
|
81
83
|
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
@template.semantic_attributes_for(@user) do |attr|
|
85
|
+
attr.attributes "User", :first_name, :last_name, :title
|
86
|
+
attr.attributes "Contact", :email
|
87
|
+
end
|
85
88
|
end
|
89
|
+
|
86
90
|
end
|
87
91
|
|
88
92
|
end
|