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/Rakefile
CHANGED
@@ -15,6 +15,7 @@ begin
|
|
15
15
|
gem.homepage = "http://github.com/MBO/attrtastic"
|
16
16
|
gem.authors = ["Boruta Miroslaw"]
|
17
17
|
gem.add_development_dependency "yard", ">= 0"
|
18
|
+
gem.add_development_dependency "shoulda", ">= 0"
|
18
19
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
19
20
|
end
|
20
21
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/attrtastic.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{attrtastic}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Boruta Miroslaw"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-15}
|
13
13
|
s.description = %q{ Attrtastic, in its assumtion, should be similar in usage to formtastic and
|
14
14
|
ease of displaying AR record informations (attributes). It should help
|
15
15
|
scafforld show/index pages.
|
@@ -71,11 +71,14 @@ Gem::Specification.new do |s|
|
|
71
71
|
|
72
72
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
73
73
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
74
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
74
75
|
else
|
75
76
|
s.add_dependency(%q<yard>, [">= 0"])
|
77
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
76
78
|
end
|
77
79
|
else
|
78
80
|
s.add_dependency(%q<yard>, [">= 0"])
|
81
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
data/lib/attrtastic.rb
CHANGED
@@ -22,8 +22,9 @@ module Attrtastic
|
|
22
22
|
# Creates attributes list without header, yields block to include each attribute
|
23
23
|
#
|
24
24
|
# @param [Hash] options Options for formating attributes block
|
25
|
-
# @option options [String] :
|
26
|
-
# @option options [String] :
|
25
|
+
# @option options [String] :name (nil) Optional header of attributes section
|
26
|
+
# @option options [String] :class ('') Name of html class to add to attributes block
|
27
|
+
# @option options [String] :header_class ('') Name of html class to add to header
|
27
28
|
# @yield Block which can call #attribute to include attribute value
|
28
29
|
#
|
29
30
|
# @example
|
@@ -32,14 +33,54 @@ module Attrtastic
|
|
32
33
|
# <%= attr.attribute :email %>
|
33
34
|
# <% end %>
|
34
35
|
#
|
36
|
+
# @example
|
37
|
+
# <% attr.attributes :name => "User" do %>
|
38
|
+
# <%= attr.attribute :name %>
|
39
|
+
# <%= attr.attribute :email %>
|
40
|
+
# <% end %>
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# <% attr.attributes :for => :user do |user| %>
|
44
|
+
# <%= user.attribute :name %>
|
45
|
+
# <%= user.attribute :email %>
|
46
|
+
# <% user.attribute :profile do %>
|
47
|
+
# <%= link_to h(user.record.name), user_path(user.record) %>
|
48
|
+
# <% end %>
|
49
|
+
# <% end %>
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# <% attr.attributes :for => @user do |user| %>
|
53
|
+
# <%= user.attribute :name %>
|
54
|
+
# <%= user.attribute :email %>
|
55
|
+
# <% user.attribute :profile do %>
|
56
|
+
# <%= link_to h(@user.name), user_path(@user) %>
|
57
|
+
# <% end %>
|
58
|
+
# <% end %>
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# <% attr.attributes :for => :posts do |post| %>
|
62
|
+
# <%= post.attribute :author %>
|
63
|
+
# <%= post.attribute :title %>
|
64
|
+
# <% end %>
|
65
|
+
#
|
66
|
+
# @example
|
67
|
+
# <% attr.attributes :for => @posts do |post| %>
|
68
|
+
# <%= post.attribute :author %>
|
69
|
+
# <%= post.attribute :title %>
|
70
|
+
# <% end %>
|
71
|
+
#
|
35
72
|
# @overload attributes(header, options = {}, &block)
|
36
73
|
# Creates attributes list with header and yields block to include each attribute
|
37
74
|
#
|
38
75
|
# @param [String] header Header of attributes section
|
39
76
|
# @param [Hash] options Options for formating attributes block
|
40
|
-
# @option options [String] :class ('') Name of html class
|
41
|
-
# @option options [String] :header_class ('') Name of html class
|
77
|
+
# @option options [String] :class ('') Name of html class to add to attributes block
|
78
|
+
# @option options [String] :header_class ('') Name of html class to add to header
|
79
|
+
# @option optinos [Symbol,Object] :for Optional new record for new builder
|
80
|
+
# passed as argument block. This new record can be symbol of method name for actual
|
81
|
+
# record, or any other object which is passed as new record for builder.
|
42
82
|
# @yield Block which can call #attribute to include attribute value
|
83
|
+
# @yieldparam builder Builder instance holding actual record (retivable via #record)
|
43
84
|
#
|
44
85
|
# @example
|
45
86
|
# <% attr.attributes "User info" do %>
|
@@ -47,29 +88,84 @@ module Attrtastic
|
|
47
88
|
# <%= attr.attribute :email %>
|
48
89
|
# <% end %>
|
49
90
|
#
|
91
|
+
# @example
|
92
|
+
# <% attr.attributes "User", :for => :user do |user| %>
|
93
|
+
# <%= user.attribute :name %>
|
94
|
+
# <%= user.attribute :email %>
|
95
|
+
# <% user.attribute :profile do %>
|
96
|
+
# <%= link_to h(user.record.name), user_path(user.record) %>
|
97
|
+
# <% end %>
|
98
|
+
# <% end %>
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# <% attr.attributes "User", :for => @user do |user| %>
|
102
|
+
# <%= user.attribute :name %>
|
103
|
+
# <%= user.attribute :email %>
|
104
|
+
# <% user.attribute :profile do %>
|
105
|
+
# <%= link_to h(@user.name), user_path(@user) %>
|
106
|
+
# <% end %>
|
107
|
+
# <% end %>
|
108
|
+
#
|
109
|
+
# @example
|
110
|
+
# <% attr.attributes "Post", :for => :posts do |post| %>
|
111
|
+
# <%= post.attribute :author %>
|
112
|
+
# <%= post.attribute :title %>
|
113
|
+
# <% end %>
|
114
|
+
#
|
115
|
+
# @example
|
116
|
+
# <% attr.attributes "Post", :for => @posts do |post| %>
|
117
|
+
# <%= post.attribute :author %>
|
118
|
+
# <%= post.attribute :title %>
|
119
|
+
# <% end %>
|
120
|
+
#
|
50
121
|
# @overload attributes(*symbols, options = {})
|
51
122
|
# Creates attributes list without header, attributes are given as list of symbols (record properties)
|
52
123
|
#
|
53
124
|
# @param [Symbol, ...] symbols List of attributes
|
54
125
|
# @param [Hash] options Options for formating attributes block
|
55
|
-
# @option options [String] :
|
56
|
-
# @option options [String] :
|
126
|
+
# @option options [String] :name (nil) Optional header of attributes section
|
127
|
+
# @option options [String] :class ('') Name of html class to add to attributes block
|
128
|
+
# @option options [String] :header_class ('') Name of html class to add to header
|
57
129
|
#
|
58
130
|
# @example
|
59
131
|
# <% attr.attributes :name, :email %>
|
60
132
|
#
|
133
|
+
# @example
|
134
|
+
# <% attr.attributes :name, :email, :for => :author %>
|
135
|
+
#
|
136
|
+
# @example
|
137
|
+
# <% attr.attributes :name, :email, :for => @user %>
|
138
|
+
#
|
139
|
+
# @example
|
140
|
+
# <% attr.attributes :title, :for => :posts %>
|
141
|
+
#
|
142
|
+
# @example
|
143
|
+
# <% attr.attributes :title, :for => @posts %>
|
144
|
+
#
|
61
145
|
# @overload attributes(header, *symbols, options = {})
|
62
146
|
# Creates attributes list with header, attributes are given as list of symbols (record properties)
|
63
147
|
#
|
64
148
|
# @param [String] header Header of attributes section
|
65
149
|
# @param [Symbol, ...] symbols Optional list of attributes
|
66
150
|
# @param [Hash] options Options for formating attributes block
|
67
|
-
# @option options [String] :class ('') Name of html class
|
68
|
-
# @option options [String] :header_class ('') Name of html class
|
151
|
+
# @option options [String] :class ('') Name of html class to add to attributes block
|
152
|
+
# @option options [String] :header_class ('') Name of html class to add to header
|
69
153
|
#
|
70
154
|
# @example
|
71
155
|
# <% attr.attributes "User info" :name, :email %>
|
72
156
|
#
|
157
|
+
# @example
|
158
|
+
# <% attr.attributes "Author", :name, :email, :for => :author %>
|
159
|
+
#
|
160
|
+
# @example
|
161
|
+
# <% attr.attributes "Author", :name, :email, :for => @user %>
|
162
|
+
#
|
163
|
+
# @example
|
164
|
+
# <% attr.attributes "Post", :title, :for => :posts %>
|
165
|
+
#
|
166
|
+
# @example
|
167
|
+
# <% attr.attributes "Post", :title, :for => @posts %>
|
168
|
+
#
|
73
169
|
# @example All together
|
74
170
|
# <% attr.attributes "User info", :name, :email, :class => "user_info", :header_class => "header important" %>
|
75
171
|
#
|
@@ -88,28 +184,24 @@ module Attrtastic
|
|
88
184
|
end
|
89
185
|
options[:html] ||= {}
|
90
186
|
|
91
|
-
html_class = [ "attributes", options[:html].delete(:class) ].compact.join(" ")
|
92
|
-
html_header_class = [ "legend", options[:html].delete(:header_class) ].compact.join(" ")
|
93
|
-
|
94
|
-
template.concat(template.tag(:div, {:class => html_class}, true))
|
95
|
-
|
96
187
|
if args.first and args.first.is_a? String
|
97
|
-
|
98
|
-
template.concat(template.content_tag(:div, header, :class => html_header_class))
|
188
|
+
options[:name] = args.shift
|
99
189
|
end
|
100
190
|
|
101
|
-
if
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
191
|
+
if options[:for].blank?
|
192
|
+
attributes_for(record, args, options, &block)
|
193
|
+
else
|
194
|
+
if options[:for].is_a? Symbol
|
195
|
+
for_value = record.send(options[:for])
|
196
|
+
else
|
197
|
+
for_value = options[:for]
|
198
|
+
end
|
199
|
+
|
200
|
+
[*for_value].each do |value|
|
201
|
+
attributes_for(value, args, options, &block)
|
202
|
+
end
|
110
203
|
end
|
111
204
|
|
112
|
-
template.concat("</div>")
|
113
205
|
end
|
114
206
|
|
115
207
|
##
|
@@ -120,7 +212,7 @@ module Attrtastic
|
|
120
212
|
#
|
121
213
|
# @param [Symbol] method Attribute name of given record
|
122
214
|
# @param [Hash] options Options
|
123
|
-
# @option options [
|
215
|
+
# @option options [Hash] :html ({}) Hash with optional :class, :label_class and :value_class names of class for html
|
124
216
|
# @option options [String] :label Label for attribute entry, overrides default label name from symbol
|
125
217
|
# @option options [String] :value Value of attribute entry, overrides default value from record
|
126
218
|
# @option options [Boolean] :display_empty (false) Indicates if print value of given attribute even if it is blank?
|
@@ -139,24 +231,31 @@ module Attrtastic
|
|
139
231
|
#
|
140
232
|
# @param [Symbol] method Attribute name of given record
|
141
233
|
# @param [Hash] options Options
|
142
|
-
# @option options [
|
234
|
+
# @option options [Hash] :html ({}) Hash with optional :class, :label_class and :value_class names of classes for html
|
143
235
|
# @option options [String] :label Label for attribute entry, overrides default label name from symbol
|
144
|
-
# @option options [Boolean] :display_empty (false) Indicates if print value of given attribute even if it is blank?
|
145
236
|
# @yield Block which is executed in place of value for attribute
|
146
237
|
#
|
147
238
|
# @example
|
148
239
|
# <% attr.attribute :name do %>
|
149
240
|
# <%= link_to @user.full_name, user_path(@user) %>
|
150
241
|
#
|
242
|
+
# @overload attribute(options = {}, &block)
|
243
|
+
# Creates entry for attribute with given block, options[:label] is mandatory in this case.
|
244
|
+
#
|
245
|
+
# @param [:Hash] options Options
|
246
|
+
# @option options [Hash] :html ({}) Hash with optional :class, :label_class and :value_class names of classes for html
|
247
|
+
# @option options [String] :label Mandatory label for attribute entry
|
248
|
+
# @yield Block which is executed in place of value for attribute
|
249
|
+
#
|
151
250
|
# @example
|
152
|
-
# <% attr.attribute :
|
251
|
+
# <% attr.attribute :label => "User link" do %>
|
153
252
|
# <%= link_to @user.full_name, user_path(@user) %>
|
154
253
|
#
|
155
254
|
# @example
|
156
255
|
# <%= attr.attribute :name, :display_empty => true %>
|
157
256
|
#
|
158
257
|
# @example
|
159
|
-
# <% attr.attribute :
|
258
|
+
# <% attr.attribute :label => "User link" do %>
|
160
259
|
# <%= link_to @user.full_name, user_path(@user) %>
|
161
260
|
#
|
162
261
|
def attribute(*args, &block)
|
@@ -196,6 +295,34 @@ module Attrtastic
|
|
196
295
|
|
197
296
|
private
|
198
297
|
|
298
|
+
def attributes_for(object, methods, options, &block)
|
299
|
+
new_builder = self.class.new(object, template)
|
300
|
+
|
301
|
+
html_class = [ "attributes", options[:html].delete(:class) ].compact.join(" ")
|
302
|
+
html_header_class = [ "legend", options[:html].delete(:header_class) ].compact.join(" ")
|
303
|
+
|
304
|
+
template.concat(template.tag(:div, {:class => html_class}, true))
|
305
|
+
|
306
|
+
header = options[:name]
|
307
|
+
|
308
|
+
if header.present?
|
309
|
+
template.concat(template.content_tag(:div, header, :class => html_header_class))
|
310
|
+
end
|
311
|
+
|
312
|
+
if block_given?
|
313
|
+
template.concat(template.tag(:ol, {}, true))
|
314
|
+
yield(new_builder)
|
315
|
+
template.concat("</ol>")
|
316
|
+
elsif methods.present?
|
317
|
+
template.concat(template.tag(:ol, {}, true))
|
318
|
+
attrs = methods.map {|method| new_builder.attribute(method, options)}.compact.join
|
319
|
+
template.concat(attrs)
|
320
|
+
template.concat("</ol>")
|
321
|
+
end
|
322
|
+
|
323
|
+
template.concat("</div>")
|
324
|
+
end
|
325
|
+
|
199
326
|
def label_for_attribute(method)
|
200
327
|
if record.class.respond_to?(:human_attribute_name)
|
201
328
|
record.class.human_attribute_name(method.to_s)
|
@@ -204,9 +331,11 @@ module Attrtastic
|
|
204
331
|
end
|
205
332
|
end
|
206
333
|
|
207
|
-
#@@value_methods = %w/ to_label display_name full_name name title username login value to_s /
|
208
334
|
def value_of_attribute(method)
|
209
|
-
record.send(method)
|
335
|
+
value = record.send(method)
|
336
|
+
value_methods = [ :to_label, :display_name, :full_name, :name, :title, :username, :login, :value ]
|
337
|
+
value_method = value_methods.find { |m| value.respond_to?(m) } || :to_s
|
338
|
+
value.send(value_method)
|
210
339
|
end
|
211
340
|
|
212
341
|
end
|
data/test/helper.rb
CHANGED
data/test/test_attribute.rb
CHANGED
@@ -2,121 +2,146 @@ require 'helper'
|
|
2
2
|
|
3
3
|
class TestAttribute < Test::Unit::TestCase
|
4
4
|
|
5
|
-
|
6
|
-
setup_fixtures
|
7
|
-
end
|
5
|
+
context "attribute" do
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<span class="label">Full name</span>
|
13
|
-
<span class="value">Doe, John</span>
|
14
|
-
</li>
|
15
|
-
EOHTML
|
7
|
+
setup do
|
8
|
+
setup_fixtures
|
9
|
+
end
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
should "generate output" do
|
12
|
+
expected = html <<-EOHTML
|
13
|
+
<li class="attribute">
|
14
|
+
<span class="label">Full name</span>
|
15
|
+
<span class="value">Doe, John</span>
|
16
|
+
</li>
|
17
|
+
EOHTML
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
actual = @user_builder.attribute(:full_name)
|
20
|
+
assert_equal expected, actual
|
21
|
+
end
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
</li>
|
30
|
-
EOHTML
|
23
|
+
should "not show attribute when value is blank" do
|
24
|
+
actual = @user_builder.attribute(:title)
|
25
|
+
assert_nil actual
|
26
|
+
end
|
31
27
|
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
should "show attribute with :display_empty => true" do
|
29
|
+
expected = html <<-EOHTML
|
30
|
+
<li class="attribute">
|
31
|
+
<span class="label">Title</span>
|
32
|
+
<span class="value"></span>
|
33
|
+
</li>
|
34
|
+
EOHTML
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
<span class="label">Name</span>
|
40
|
-
<span class="value">Doe, John</span>
|
41
|
-
</li>
|
42
|
-
EOHTML
|
36
|
+
actual = @user_builder.attribute(:title, :display_empty => true)
|
37
|
+
assert_equal expected, actual
|
38
|
+
end
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
should "convert nested object to value" do
|
41
|
+
expected = html <<-EOHTML
|
42
|
+
<li class="attribute">
|
43
|
+
<span class="label">Author</span>
|
44
|
+
<span class="value">Doe, John</span>
|
45
|
+
</li>
|
46
|
+
EOHTML
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
<li class="attribute">
|
51
|
-
<span class="label">Full name</span>
|
52
|
-
<span class="value">Sir Doe, John</span>
|
53
|
-
</li>
|
54
|
-
EOHTML
|
48
|
+
actual = @blog_builder.attribute(:author_full_name, :label => "Author")
|
49
|
+
assert_equal expected, actual
|
55
50
|
|
56
|
-
|
57
|
-
|
58
|
-
|
51
|
+
actual = @blog_builder.attribute(:author)
|
52
|
+
assert_equal expected, actual
|
53
|
+
end
|
59
54
|
|
60
|
-
|
61
|
-
|
62
|
-
|
55
|
+
should "show custom label" do
|
56
|
+
expected = html <<-EOHTML
|
57
|
+
<li class="attribute">
|
58
|
+
<span class="label">Name</span>
|
59
|
+
<span class="value">Doe, John</span>
|
60
|
+
</li>
|
61
|
+
EOHTML
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
<span class="value"></span>
|
68
|
-
</li>
|
69
|
-
EOHTML
|
63
|
+
actual = @user_builder.attribute(:full_name, :label => "Name")
|
64
|
+
assert_equal expected, actual
|
65
|
+
end
|
70
66
|
|
71
|
-
|
72
|
-
|
67
|
+
should "show custom value" do
|
68
|
+
expected = html <<-EOHTML
|
69
|
+
<li class="attribute">
|
70
|
+
<span class="label">Full name</span>
|
71
|
+
<span class="value">Sir Doe, John</span>
|
72
|
+
</li>
|
73
|
+
EOHTML
|
73
74
|
|
74
|
-
|
75
|
-
|
76
|
-
|
75
|
+
actual = @user_builder.attribute(:full_name, :value => "Sir #{@user.full_name}")
|
76
|
+
assert_equal expected, actual
|
77
|
+
end
|
78
|
+
|
79
|
+
should "work with custom value blank" do
|
80
|
+
assert_nil @user_builder.attribute(:full_name, :value => nil)
|
81
|
+
assert_nil @user_builder.attribute(:full_name, :value => "")
|
82
|
+
|
83
|
+
expected = html <<-EOHTML
|
84
|
+
<li class="attribute">
|
85
|
+
<span class="label">Full name</span>
|
86
|
+
<span class="value"></span>
|
87
|
+
</li>
|
88
|
+
EOHTML
|
77
89
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
90
|
+
actual = @user_builder.attribute(:full_name, :value => nil, :display_empty => true)
|
91
|
+
assert_equal expected, actual
|
92
|
+
|
93
|
+
actual = @user_builder.attribute(:full_name, :value => "", :display_empty => true)
|
94
|
+
assert_equal expected, actual
|
82
95
|
end
|
83
|
-
assert block_run
|
84
|
-
end
|
85
96
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
@user_builder.template.output_buffer << "John Doe"
|
96
|
-
3.times do
|
97
|
-
@user_builder.template.output_buffer << "!"
|
97
|
+
|
98
|
+
context "with block" do
|
99
|
+
|
100
|
+
should "yield block" do
|
101
|
+
block_run = false
|
102
|
+
@user_builder.attribute :full_name do
|
103
|
+
block_run = true
|
104
|
+
end
|
105
|
+
assert block_run
|
98
106
|
end
|
99
|
-
end
|
100
|
-
actual = @template.output_buffer.to_s
|
101
|
-
assert_equal expected, actual
|
102
|
-
end
|
103
107
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
108
|
+
should "generate output" do
|
109
|
+
expected = html <<-EOHTML
|
110
|
+
<li class="attribute">
|
111
|
+
<span class="label">Full name</span>
|
112
|
+
<span class="value">John Doe!!!</span>
|
113
|
+
</li>
|
114
|
+
EOHTML
|
115
|
+
|
116
|
+
@user_builder.attribute :full_name do
|
117
|
+
@user_builder.template.output_buffer << "John Doe"
|
118
|
+
3.times do
|
119
|
+
@user_builder.template.output_buffer << "!"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
actual = @template.output_buffer.to_s
|
123
|
+
assert_equal expected, actual
|
116
124
|
end
|
125
|
+
|
126
|
+
should "show custom label" do
|
127
|
+
expected = html <<-EOHTML
|
128
|
+
<li class="attribute">
|
129
|
+
<span class="label">Full name</span>
|
130
|
+
<span class="value">John Doe!!!</span>
|
131
|
+
</li>
|
132
|
+
EOHTML
|
133
|
+
|
134
|
+
@user_builder.attribute :label => "Full name" do
|
135
|
+
@user_builder.template.output_buffer << "John Doe"
|
136
|
+
3.times do
|
137
|
+
@user_builder.template.output_buffer << "!"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
actual = @template.output_buffer.to_s
|
141
|
+
assert_equal expected, actual
|
142
|
+
end
|
143
|
+
|
117
144
|
end
|
118
|
-
actual = @template.output_buffer.to_s
|
119
|
-
assert_equal expected, actual
|
120
145
|
end
|
121
146
|
|
122
147
|
end
|