formtastic-bootstrap 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/Gemfile +5 -3
- data/Gemfile.lock +72 -60
- data/README.md +4 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/formtastic-bootstrap.gemspec +49 -16
- data/lib/formtastic-bootstrap/actions/base.rb +22 -0
- data/lib/formtastic-bootstrap/actions/button_action.rb +13 -0
- data/lib/formtastic-bootstrap/actions/input_action.rb +13 -0
- data/lib/formtastic-bootstrap/actions/link_action.rb +12 -0
- data/lib/formtastic-bootstrap/actions.rb +10 -0
- data/lib/formtastic-bootstrap/form_builder.rb +4 -2
- data/lib/formtastic-bootstrap/helpers/action_helper.rb +12 -0
- data/lib/formtastic-bootstrap/helpers/actions_helper.rb +24 -0
- data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +2 -4
- data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +0 -2
- data/lib/formtastic-bootstrap/helpers.rb +6 -8
- data/lib/formtastic-bootstrap/inputs/base/choices.rb +6 -35
- data/lib/formtastic-bootstrap/inputs/base/collections.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/grouped_collections.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/hints.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/base/labelling.rb +14 -3
- data/lib/formtastic-bootstrap/inputs/base/numeric.rb +9 -0
- data/lib/formtastic-bootstrap/inputs/base/stringish.rb +4 -5
- data/lib/formtastic-bootstrap/inputs/base/timeish.rb +38 -18
- data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +22 -34
- data/lib/formtastic-bootstrap/inputs/base.rb +29 -6
- data/lib/formtastic-bootstrap/inputs/boolean_input.rb +14 -18
- data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +16 -11
- data/lib/formtastic-bootstrap/inputs/date_input.rb +3 -9
- data/lib/formtastic-bootstrap/inputs/date_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/datetime_input.rb +3 -12
- data/lib/formtastic-bootstrap/inputs/datetime_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/email_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/file_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/hidden_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/number_input.rb +3 -3
- data/lib/formtastic-bootstrap/inputs/password_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/phone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/radio_input.rb +28 -14
- data/lib/formtastic-bootstrap/inputs/range_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/search_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/select_input.rb +3 -1
- data/lib/formtastic-bootstrap/inputs/string_input.rb +0 -7
- data/lib/formtastic-bootstrap/inputs/text_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/time_input.rb +3 -9
- data/lib/formtastic-bootstrap/inputs/time_select_input.rb +8 -0
- data/lib/formtastic-bootstrap/inputs/time_zone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/url_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs.rb +30 -23
- data/lib/formtastic-bootstrap.rb +16 -1
- data/spec/actions/button_action_spec.rb +63 -0
- data/spec/actions/input_action_spec.rb +59 -0
- data/spec/actions/link_action_spec.rb +92 -0
- data/spec/helpers/action_helper_spec.rb +368 -0
- data/spec/helpers/actions_helper_spec.rb +147 -0
- data/spec/helpers/input_helper_spec.rb +238 -259
- data/spec/helpers/inputs_helper_spec.rb +84 -25
- data/spec/inputs/boolean_input_spec.rb +108 -75
- data/spec/inputs/check_boxes_input_spec.rb +106 -91
- data/spec/inputs/date_select_input_spec.rb +164 -0
- data/spec/inputs/datetime_select_input_spec.rb +112 -0
- data/spec/inputs/deprecated_time_date_datetime_inputs_spec.rb +48 -0
- data/spec/inputs/email_input_spec.rb +30 -3
- data/spec/inputs/file_input_spec.rb +31 -4
- data/spec/inputs/hidden_input_spec.rb +63 -32
- data/spec/inputs/number_input_spec.rb +37 -8
- data/spec/inputs/password_input_spec.rb +30 -3
- data/spec/inputs/phone_input_spec.rb +30 -3
- data/spec/inputs/radio_input_spec.rb +87 -60
- data/spec/inputs/range_input_spec.rb +32 -5
- data/spec/inputs/search_input_spec.rb +29 -3
- data/spec/inputs/select_input_spec.rb +164 -107
- data/spec/inputs/string_input_spec.rb +33 -22
- data/spec/inputs/text_input_spec.rb +39 -14
- data/spec/inputs/time_select_input_spec.rb +191 -0
- data/spec/inputs/time_zone_input_spec.rb +17 -19
- data/spec/inputs/url_input_spec.rb +30 -3
- data/spec/spec_helper.rb +21 -15
- data/spec/support/custom_macros.rb +61 -228
- data/spec/support/fb_custom_macros.rb +23 -0
- metadata +109 -28
- data/lib/formtastic-bootstrap/helpers/buttons_helper.rb +0 -52
- data/spec/builder/errors_spec.rb +0 -214
- data/spec/helpers/buttons_helper_spec.rb +0 -149
- data/spec/inputs/date_input_spec.rb +0 -147
- data/spec/inputs/datetime_input_spec.rb +0 -101
- data/spec/inputs/time_input_spec.rb +0 -206
- data/spec/support/depracation.rb +0 -6
- data/spec/support/formtastic_spec_helper.rb +0 -382
@@ -8,7 +8,6 @@ describe 'radio input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
12
11
|
end
|
13
12
|
|
14
13
|
describe 'for belongs_to association' do
|
@@ -18,64 +17,55 @@ describe 'radio input' do
|
|
18
17
|
end)
|
19
18
|
end
|
20
19
|
|
21
|
-
|
22
|
-
it_should_have_input_wrapper_with_class(
|
23
|
-
|
20
|
+
it_should_have_bootstrap_horizontal_wrapping
|
21
|
+
it_should_have_input_wrapper_with_class("radio_buttons")
|
22
|
+
it_should_have_input_wrapper_with_class(:input)
|
24
23
|
it_should_have_input_wrapper_with_id("post_author_input")
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
it_should_apply_error_logic_for_input_type(:radio
|
24
|
+
# it_should_have_a_nested_fieldset
|
25
|
+
# it_should_have_a_nested_fieldset_with_class('choices')
|
26
|
+
# it_should_have_a_nested_ordered_list_with_class('choices-group')
|
27
|
+
it_should_apply_error_logic_for_input_type(:radio)
|
29
28
|
it_should_use_the_collection_when_provided(:radio, 'input')
|
30
29
|
|
31
|
-
it 'should generate a
|
32
|
-
output_buffer.should have_tag('form div.
|
33
|
-
output_buffer.should have_tag('form div.
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should not link the \'legend\' label to any input' do
|
37
|
-
output_buffer.should_not have_tag('form div.clearfix > label[@for]')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should generate an unordered list with a list item for each choice' do
|
41
|
-
output_buffer.should have_tag('form div.clearfix div.input ul')
|
42
|
-
output_buffer.should have_tag('form div.clearfix div.input ul li.choice', :count => ::Author.all.size)
|
30
|
+
it 'should generate a control label with text for the input' do
|
31
|
+
output_buffer.should have_tag('form div.control-group > label.control-label')
|
32
|
+
output_buffer.should have_tag('form div.control-group > label.control-label', /Author/)
|
43
33
|
end
|
44
34
|
|
45
35
|
it 'should have one option with a "checked" attribute' do
|
46
|
-
output_buffer.should have_tag('form
|
36
|
+
output_buffer.should have_tag('form div.control-group div.controls input[@checked]', :count => 1)
|
47
37
|
end
|
48
38
|
|
49
39
|
describe "each choice" do
|
50
|
-
|
40
|
+
|
51
41
|
it 'should not give the choice label the .label class' do
|
52
|
-
output_buffer.should_not have_tag('
|
42
|
+
output_buffer.should_not have_tag('div.controls label.label')
|
53
43
|
end
|
54
|
-
|
44
|
+
|
55
45
|
it 'should not add the required attribute to each input' do
|
56
|
-
output_buffer.should_not have_tag('
|
46
|
+
output_buffer.should_not have_tag('div.controls input[@required]')
|
57
47
|
end
|
58
|
-
|
59
|
-
|
48
|
+
|
49
|
+
|
60
50
|
it 'should contain a label for the radio input with a nested input and label text' do
|
61
51
|
::Author.all.each do |author|
|
62
|
-
output_buffer.should have_tag('form div.
|
63
|
-
output_buffer.should have_tag("form div.
|
52
|
+
output_buffer.should have_tag('form div.control-group div.controls label', /#{author.to_label}/)
|
53
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='post_author_id_#{author.id}']")
|
64
54
|
end
|
65
55
|
end
|
66
56
|
|
67
57
|
it 'should use values as li.class when value_as_class is true' do
|
68
58
|
::Author.all.each do |author|
|
69
|
-
output_buffer.should have_tag("form div.
|
59
|
+
output_buffer.should have_tag("form div.control-group div.controls label.author_#{author.id}")
|
70
60
|
end
|
71
61
|
end
|
72
62
|
|
73
63
|
it "should have a radio input" do
|
74
64
|
::Author.all.each do |author|
|
75
|
-
output_buffer.should have_tag("form div.
|
76
|
-
output_buffer.should have_tag("form div.
|
77
|
-
output_buffer.should have_tag("form div.
|
78
|
-
output_buffer.should have_tag("form div.
|
65
|
+
output_buffer.should have_tag("form div.control-group div.controls label input#post_author_id_#{author.id}")
|
66
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@type='radio']")
|
67
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@value='#{author.id}']")
|
68
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@name='post[author_id]']")
|
79
69
|
end
|
80
70
|
end
|
81
71
|
|
@@ -88,7 +78,7 @@ describe 'radio input' do
|
|
88
78
|
concat(builder.input(:author, :as => :radio))
|
89
79
|
end)
|
90
80
|
|
91
|
-
output_buffer.should have_tag("form div.
|
81
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@checked='checked']")
|
92
82
|
end
|
93
83
|
|
94
84
|
it "should mark the input as disabled if options attached for disabling" do
|
@@ -96,8 +86,8 @@ describe 'radio input' do
|
|
96
86
|
concat(builder.input(:author, :as => :radio, :collection => [["Test", 'test'], ["Try", "try", {:disabled => true}]]))
|
97
87
|
end)
|
98
88
|
|
99
|
-
output_buffer.should_not have_tag("form div.
|
100
|
-
output_buffer.should have_tag("form div.
|
89
|
+
output_buffer.should_not have_tag("form div.control-group div.controls label input[@value='test'][@disabled='disabled']")
|
90
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@value='try'][@disabled='disabled']")
|
101
91
|
end
|
102
92
|
|
103
93
|
it "should not contain invalid HTML attributes" do
|
@@ -106,7 +96,7 @@ describe 'radio input' do
|
|
106
96
|
concat(builder.input(:author, :as => :radio))
|
107
97
|
end)
|
108
98
|
|
109
|
-
output_buffer.should_not have_tag("form
|
99
|
+
output_buffer.should_not have_tag("form li fieldset ol li input[@find_options]")
|
110
100
|
end
|
111
101
|
|
112
102
|
end
|
@@ -119,18 +109,10 @@ describe 'radio input' do
|
|
119
109
|
end)
|
120
110
|
end
|
121
111
|
|
122
|
-
it 'should generate a div with a label' do
|
123
|
-
output_buffer.should have_tag('form div.clearfix label', /Author/)
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'should generate an li tag for each item in the collection' do
|
127
|
-
output_buffer.should have_tag('form div.clearfix div ul li', :count => ::Author.all.size)
|
128
|
-
end
|
129
|
-
|
130
112
|
it 'should generate labels for each item' do
|
131
113
|
::Author.all.each do |author|
|
132
|
-
output_buffer.should have_tag('form div div
|
133
|
-
output_buffer.should have_tag("form div div
|
114
|
+
output_buffer.should have_tag('form div.control-group div.controls label', /#{author.to_label}/)
|
115
|
+
output_buffer.should have_tag("form div.control-group div.controls label[@for='project_author_id_#{author.id}']")
|
134
116
|
end
|
135
117
|
end
|
136
118
|
|
@@ -138,18 +120,17 @@ describe 'radio input' do
|
|
138
120
|
concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
139
121
|
concat(builder.input(:author_id, :as => :radio, :collection => [["<b>Item 1</b>", 1], ["<b>Item 2</b>", 2]]))
|
140
122
|
end)
|
141
|
-
output_buffer.should have_tag('form div div
|
142
|
-
|
143
|
-
label.body.should match /<b>Item [12]<\/b>/
|
123
|
+
output_buffer.should have_tag('form div.control-group div.controls label') do |label|
|
124
|
+
label.body.should match /<b>Item [12]<\/b>$/
|
144
125
|
end
|
145
126
|
end
|
146
127
|
|
147
128
|
it 'should generate inputs for each item' do
|
148
129
|
::Author.all.each do |author|
|
149
|
-
output_buffer.should have_tag("form div div
|
150
|
-
output_buffer.should have_tag("form div div
|
151
|
-
output_buffer.should have_tag("form div div
|
152
|
-
output_buffer.should have_tag("form div div
|
130
|
+
output_buffer.should have_tag("form div.control-group div.controls label input#project_author_id_#{author.id}")
|
131
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@type='radio']")
|
132
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@value='#{author.id}']")
|
133
|
+
output_buffer.should have_tag("form div.control-group div.controls label input[@name='project[author_id]']")
|
153
134
|
end
|
154
135
|
end
|
155
136
|
end
|
@@ -173,7 +154,7 @@ describe 'radio input' do
|
|
173
154
|
end
|
174
155
|
|
175
156
|
it "should do foo" do
|
176
|
-
output_buffer.should have_tag("
|
157
|
+
output_buffer.should have_tag("label.control-label", /Translated/)
|
177
158
|
end
|
178
159
|
|
179
160
|
end
|
@@ -187,7 +168,7 @@ describe 'radio input' do
|
|
187
168
|
end
|
188
169
|
|
189
170
|
it "should output the correct label title" do
|
190
|
-
output_buffer.should have_tag("
|
171
|
+
output_buffer.should have_tag("label.control-label", /The authors/)
|
191
172
|
end
|
192
173
|
end
|
193
174
|
|
@@ -201,10 +182,11 @@ describe 'radio input' do
|
|
201
182
|
end
|
202
183
|
|
203
184
|
it "should not output the legend" do
|
204
|
-
|
185
|
+
# TODO I think this is not supported in FB.
|
186
|
+
output_buffer.should_not have_tag("label.control-label")
|
205
187
|
output_buffer.should_not include(">")
|
206
188
|
end
|
207
|
-
|
189
|
+
|
208
190
|
it "should not cause escaped HTML" do
|
209
191
|
output_buffer.should_not include(">")
|
210
192
|
end
|
@@ -219,7 +201,7 @@ describe 'radio input' do
|
|
219
201
|
end
|
220
202
|
|
221
203
|
it "should output the correct label title" do
|
222
|
-
output_buffer.should have_tag("
|
204
|
+
output_buffer.should have_tag("label.control-label abbr")
|
223
205
|
end
|
224
206
|
end
|
225
207
|
|
@@ -237,4 +219,49 @@ describe 'radio input' do
|
|
237
219
|
it_should_have_input_wrapper_with_id("custom_prefix_post_authors_input")
|
238
220
|
end
|
239
221
|
|
222
|
+
describe "when index is provided" do
|
223
|
+
|
224
|
+
before do
|
225
|
+
@output_buffer = ''
|
226
|
+
mock_everything
|
227
|
+
|
228
|
+
concat(semantic_form_for(@new_post) do |builder|
|
229
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
230
|
+
concat(author.input(:name, :as => :radio))
|
231
|
+
end)
|
232
|
+
end)
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'should index the id of the control-group' do
|
236
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'should index the id of the select tag' do
|
240
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name_true")
|
241
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name_false")
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'should index the name of the select tag' do
|
245
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
246
|
+
end
|
247
|
+
|
248
|
+
end
|
249
|
+
|
250
|
+
describe "when collection contains integers" do
|
251
|
+
before do
|
252
|
+
@output_buffer = ''
|
253
|
+
mock_everything
|
254
|
+
|
255
|
+
concat(semantic_form_for(:project) do |builder|
|
256
|
+
concat(builder.input(:author_id, :as => :radio, :collection => [1, 2, 3]))
|
257
|
+
end)
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'should output the correct labels' do
|
261
|
+
output_buffer.should have_tag("div.controls label", /1/)
|
262
|
+
output_buffer.should have_tag("div.controls label", /2/)
|
263
|
+
output_buffer.should have_tag("div.controls label", /3/)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
240
267
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
|
-
require 'active_record'
|
4
3
|
|
5
4
|
describe 'range input' do
|
6
5
|
|
@@ -9,7 +8,6 @@ describe 'range input' do
|
|
9
8
|
before do
|
10
9
|
@output_buffer = ''
|
11
10
|
mock_everything
|
12
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
13
11
|
end
|
14
12
|
|
15
13
|
describe "when object is provided" do
|
@@ -19,10 +17,11 @@ describe 'range input' do
|
|
19
17
|
end)
|
20
18
|
end
|
21
19
|
|
20
|
+
it_should_have_bootstrap_horizontal_wrapping
|
22
21
|
it_should_have_input_wrapper_with_class(:range)
|
23
|
-
it_should_have_input_wrapper_with_class(:
|
24
|
-
it_should_have_input_wrapper_with_class(:
|
25
|
-
|
22
|
+
it_should_have_input_wrapper_with_class(:input)
|
23
|
+
it_should_have_input_wrapper_with_class(:numeric)
|
24
|
+
it_should_have_input_wrapper_with_class(:stringish)
|
26
25
|
it_should_have_input_wrapper_with_id("author_age_input")
|
27
26
|
it_should_have_label_with_text(/Age/)
|
28
27
|
it_should_have_label_for("author_age")
|
@@ -44,6 +43,34 @@ describe 'range input' do
|
|
44
43
|
it_should_have_label_and_input_with_id("context2_author_age")
|
45
44
|
|
46
45
|
end
|
46
|
+
|
47
|
+
describe "when index is provided" do
|
48
|
+
|
49
|
+
before do
|
50
|
+
@output_buffer = ''
|
51
|
+
mock_everything
|
52
|
+
|
53
|
+
concat(semantic_form_for(@new_post) do |builder|
|
54
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
55
|
+
concat(author.input(:name, :as => :range))
|
56
|
+
end)
|
57
|
+
end)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should index the id of the control-group' do
|
61
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should index the id of the select tag' do
|
65
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should index the name of the select tag' do
|
69
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
47
74
|
|
48
75
|
describe "when validations require a minimum value (:greater_than)" do
|
49
76
|
before do
|
@@ -8,7 +8,6 @@ describe 'search input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
12
11
|
end
|
13
12
|
|
14
13
|
describe "when object is provided" do
|
@@ -18,10 +17,10 @@ describe 'search input' do
|
|
18
17
|
end)
|
19
18
|
end
|
20
19
|
|
20
|
+
it_should_have_bootstrap_horizontal_wrapping
|
21
21
|
it_should_have_input_wrapper_with_class(:search)
|
22
|
-
it_should_have_input_wrapper_with_class(:
|
22
|
+
it_should_have_input_wrapper_with_class(:input)
|
23
23
|
it_should_have_input_wrapper_with_class(:stringish)
|
24
|
-
it_should_have_input_class_in_the_right_place
|
25
24
|
it_should_have_input_wrapper_with_id("post_search_input")
|
26
25
|
it_should_have_label_with_text(/Search/)
|
27
26
|
it_should_have_label_for("post_search")
|
@@ -44,6 +43,33 @@ describe 'search input' do
|
|
44
43
|
|
45
44
|
end
|
46
45
|
|
46
|
+
describe "when index is provided" do
|
47
|
+
|
48
|
+
before do
|
49
|
+
@output_buffer = ''
|
50
|
+
mock_everything
|
51
|
+
|
52
|
+
concat(semantic_form_for(@new_post) do |builder|
|
53
|
+
concat(builder.fields_for(:author, :index => 3) do |author|
|
54
|
+
concat(author.input(:name, :as => :search))
|
55
|
+
end)
|
56
|
+
end)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should index the id of the control-group' do
|
60
|
+
output_buffer.should have_tag("div.control-group#post_author_attributes_3_name_input")
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should index the id of the select tag' do
|
64
|
+
output_buffer.should have_tag("input#post_author_attributes_3_name")
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should index the name of the select tag' do
|
68
|
+
output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
47
73
|
describe "when required" do
|
48
74
|
it "should add the required attribute to the input's html options" do
|
49
75
|
with_config :use_required_attribute, true do
|