simple_form 2.1.3 → 3.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.

Potentially problematic release.


This version of simple_form might be problematic. Click here for more details.

Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -51
  3. data/README.md +195 -161
  4. data/lib/generators/simple_form/install_generator.rb +4 -4
  5. data/lib/generators/simple_form/templates/README +2 -2
  6. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +16 -13
  7. data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +16 -16
  8. data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +3 -3
  9. data/lib/simple_form/action_view_extensions/builder.rb +1 -320
  10. data/lib/simple_form/action_view_extensions/builder.rb.orig +247 -0
  11. data/lib/simple_form/action_view_extensions/form_helper.rb +2 -9
  12. data/lib/simple_form/components/errors.rb +1 -7
  13. data/lib/simple_form/components/hints.rb +2 -7
  14. data/lib/simple_form/components/html5.rb +5 -2
  15. data/lib/simple_form/components/labels.rb +4 -4
  16. data/lib/simple_form/components/maxlength.rb +1 -8
  17. data/lib/simple_form/components/pattern.rb +2 -2
  18. data/lib/simple_form/components.rb +1 -1
  19. data/lib/simple_form/error_notification.rb +2 -2
  20. data/lib/simple_form/form_builder.rb +154 -50
  21. data/lib/simple_form/form_builder.rb.orig +486 -0
  22. data/lib/simple_form/helpers.rb +1 -1
  23. data/lib/simple_form/inputs/base.rb +7 -10
  24. data/lib/simple_form/inputs/block_input.rb +1 -1
  25. data/lib/simple_form/inputs/boolean_input.rb +6 -5
  26. data/lib/simple_form/inputs/collection_input.rb +7 -7
  27. data/lib/simple_form/inputs/date_time_input.rb +1 -1
  28. data/lib/simple_form/inputs/numeric_input.rb +0 -6
  29. data/lib/simple_form/inputs/password_input.rb +0 -1
  30. data/lib/simple_form/inputs/string_input.rb +0 -1
  31. data/lib/simple_form/railtie.rb +7 -0
  32. data/lib/simple_form/tags.rb +62 -0
  33. data/lib/simple_form/version.rb +1 -1
  34. data/lib/simple_form/version.rb.orig +7 -0
  35. data/lib/simple_form/wrappers/builder.rb +5 -29
  36. data/lib/simple_form/wrappers/many.rb +1 -1
  37. data/lib/simple_form/wrappers/root.rb +1 -1
  38. data/lib/simple_form/wrappers.rb +1 -1
  39. data/lib/simple_form.rb +43 -47
  40. data/test/action_view_extensions/builder_test.rb +78 -99
  41. data/test/action_view_extensions/form_helper_test.rb +25 -16
  42. data/test/components/label_test.rb +46 -46
  43. data/test/form_builder/association_test.rb +47 -29
  44. data/test/form_builder/button_test.rb +4 -4
  45. data/test/form_builder/error_notification_test.rb +8 -8
  46. data/test/form_builder/error_test.rb +18 -65
  47. data/test/form_builder/general_test.rb +62 -63
  48. data/test/form_builder/hint_test.rb +23 -29
  49. data/test/form_builder/input_field_test.rb +29 -12
  50. data/test/form_builder/label_test.rb +7 -17
  51. data/test/form_builder/wrapper_test.rb +21 -21
  52. data/test/inputs/boolean_input_test.rb +24 -24
  53. data/test/inputs/collection_check_boxes_input_test.rb +66 -55
  54. data/test/inputs/collection_radio_buttons_input_test.rb +81 -79
  55. data/test/inputs/collection_select_input_test.rb +76 -51
  56. data/test/inputs/datetime_input_test.rb +17 -11
  57. data/test/inputs/disabled_test.rb +10 -10
  58. data/test/inputs/discovery_test.rb +4 -4
  59. data/test/inputs/file_input_test.rb +1 -1
  60. data/test/inputs/general_test.rb +28 -12
  61. data/test/inputs/grouped_collection_select_input_test.rb +33 -20
  62. data/test/inputs/hidden_input_test.rb +3 -2
  63. data/test/inputs/numeric_input_test.rb +3 -3
  64. data/test/inputs/priority_input_test.rb +9 -3
  65. data/test/inputs/readonly_test.rb +12 -12
  66. data/test/inputs/required_test.rb +5 -5
  67. data/test/inputs/string_input_test.rb +15 -25
  68. data/test/inputs/text_input_test.rb +1 -1
  69. data/test/support/misc_helpers.rb +46 -24
  70. data/test/support/mock_controller.rb +6 -6
  71. data/test/support/models.rb +77 -62
  72. data/test/test_helper.rb +17 -34
  73. metadata +39 -22
  74. data/lib/simple_form/core_ext/hash.rb +0 -16
@@ -7,27 +7,33 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
7
7
  end
8
8
 
9
9
  test 'input check boxes should not include for attribute by default' do
10
- with_input_for @user, :gender, :check_boxes, :collection => [:male, :female]
10
+ with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
11
11
  assert_select 'label'
12
12
  assert_no_select 'label[for=user_gender]'
13
13
  end
14
14
 
15
15
  test 'input check boxes should include for attribute when giving as html option' do
16
- with_input_for @user, :gender, :check_boxes, :collection => [:male, :female], :label_html => { :for => 'gender' }
16
+ with_input_for @user, :gender, :check_boxes, collection: [:male, :female], label_html: { for: 'gender' }
17
17
  assert_select 'label[for=gender]'
18
18
  end
19
19
 
20
20
  test 'collection input with check_boxes type should not generate required html attribute' do
21
- with_input_for @user, :name, :check_boxes, :collection => ['Jose' , 'Carlos']
21
+ with_input_for @user, :name, :check_boxes, collection: ['Jose', 'Carlos']
22
22
  assert_select 'input.required'
23
23
  assert_no_select 'input[required]'
24
24
  end
25
25
 
26
+ test 'collection input with check_boxes type should not generate aria-required html attribute' do
27
+ with_input_for @user, :name, :check_boxes, collection: ['Jose', 'Carlos']
28
+ assert_select 'input.required'
29
+ assert_no_select 'input[aria-required]'
30
+ end
31
+
26
32
  test 'input should do automatic collection translation for check_box types using defaults key' do
27
- store_translations(:en, :simple_form => { :options => { :defaults => {
28
- :gender => { :male => 'Male', :female => 'Female'}
33
+ store_translations(:en, simple_form: { options: { defaults: {
34
+ gender: { male: 'Male', female: 'Female'}
29
35
  } } } ) do
30
- with_input_for @user, :gender, :check_boxes, :collection => [:male, :female]
36
+ with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
31
37
  assert_select 'input[type=checkbox][value=male]'
32
38
  assert_select 'input[type=checkbox][value=female]'
33
39
  assert_select 'label.collection_check_boxes', 'Male'
@@ -36,10 +42,10 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
36
42
  end
37
43
 
38
44
  test 'input should do automatic collection translation for check_box types using specific object key' do
39
- store_translations(:en, :simple_form => { :options => { :user => {
40
- :gender => { :male => 'Male', :female => 'Female'}
45
+ store_translations(:en, simple_form: { options: { user: {
46
+ gender: { male: 'Male', female: 'Female'}
41
47
  } } } ) do
42
- with_input_for @user, :gender, :check_boxes, :collection => [:male, :female]
48
+ with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
43
49
  assert_select 'input[type=checkbox][value=male]'
44
50
  assert_select 'input[type=checkbox][value=female]'
45
51
  assert_select 'label.collection_check_boxes', 'Male'
@@ -50,100 +56,105 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
50
56
  test 'input check boxes does not wrap the collection by default' do
51
57
  with_input_for @user, :active, :check_boxes
52
58
 
53
- assert_select 'form input[type=checkbox]', :count => 2
59
+ assert_select 'form input[type=checkbox]', count: 2
54
60
  assert_no_select 'form ul'
55
61
  end
56
62
 
63
+ test 'input check boxes accepts html options as the last element of collection' do
64
+ with_input_for @user, :name, :check_boxes, collection: [['Jose', 'jose', class: 'foo']]
65
+ assert_select 'input.foo[type=checkbox][value=jose]'
66
+ end
67
+
57
68
  test 'input check boxes wraps the collection in the configured collection wrapper tag' do
58
- swap SimpleForm, :collection_wrapper_tag => :ul do
69
+ swap SimpleForm, collection_wrapper_tag: :ul do
59
70
  with_input_for @user, :active, :check_boxes
60
71
 
61
- assert_select 'form ul input[type=checkbox]', :count => 2
72
+ assert_select 'form ul input[type=checkbox]', count: 2
62
73
  end
63
74
  end
64
75
 
65
76
  test 'input check boxes does not wrap the collection when configured with falsy values' do
66
- swap SimpleForm, :collection_wrapper_tag => false do
77
+ swap SimpleForm, collection_wrapper_tag: false do
67
78
  with_input_for @user, :active, :check_boxes
68
79
 
69
- assert_select 'form input[type=checkbox]', :count => 2
80
+ assert_select 'form input[type=checkbox]', count: 2
70
81
  assert_no_select 'form ul'
71
82
  end
72
83
  end
73
84
 
74
85
  test 'input check boxes allows overriding the collection wrapper tag at input level' do
75
- swap SimpleForm, :collection_wrapper_tag => :ul do
76
- with_input_for @user, :active, :check_boxes, :collection_wrapper_tag => :section
86
+ swap SimpleForm, collection_wrapper_tag: :ul do
87
+ with_input_for @user, :active, :check_boxes, collection_wrapper_tag: :section
77
88
 
78
- assert_select 'form section input[type=checkbox]', :count => 2
89
+ assert_select 'form section input[type=checkbox]', count: 2
79
90
  assert_no_select 'form ul'
80
91
  end
81
92
  end
82
93
 
83
94
  test 'input check boxes allows disabling the collection wrapper tag at input level' do
84
- swap SimpleForm, :collection_wrapper_tag => :ul do
85
- with_input_for @user, :active, :check_boxes, :collection_wrapper_tag => false
95
+ swap SimpleForm, collection_wrapper_tag: :ul do
96
+ with_input_for @user, :active, :check_boxes, collection_wrapper_tag: false
86
97
 
87
- assert_select 'form input[type=checkbox]', :count => 2
98
+ assert_select 'form input[type=checkbox]', count: 2
88
99
  assert_no_select 'form ul'
89
100
  end
90
101
  end
91
102
 
92
103
  test 'input check boxes renders the wrapper tag with the configured wrapper class' do
93
- swap SimpleForm, :collection_wrapper_tag => :ul, :collection_wrapper_class => 'inputs-list' do
104
+ swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
94
105
  with_input_for @user, :active, :check_boxes
95
106
 
96
- assert_select 'form ul.inputs-list input[type=checkbox]', :count => 2
107
+ assert_select 'form ul.inputs-list input[type=checkbox]', count: 2
97
108
  end
98
109
  end
99
110
 
100
111
  test 'input check boxes allows giving wrapper class at input level only' do
101
- swap SimpleForm, :collection_wrapper_tag => :ul do
102
- with_input_for @user, :active, :check_boxes, :collection_wrapper_class => 'items-list'
112
+ swap SimpleForm, collection_wrapper_tag: :ul do
113
+ with_input_for @user, :active, :check_boxes, collection_wrapper_class: 'items-list'
103
114
 
104
- assert_select 'form ul.items-list input[type=checkbox]', :count => 2
115
+ assert_select 'form ul.items-list input[type=checkbox]', count: 2
105
116
  end
106
117
  end
107
118
 
108
119
  test 'input check boxes uses both configured and given wrapper classes for wrapper tag' do
109
- swap SimpleForm, :collection_wrapper_tag => :ul, :collection_wrapper_class => 'inputs-list' do
110
- with_input_for @user, :active, :check_boxes, :collection_wrapper_class => 'items-list'
120
+ swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
121
+ with_input_for @user, :active, :check_boxes, collection_wrapper_class: 'items-list'
111
122
 
112
- assert_select 'form ul.inputs-list.items-list input[type=checkbox]', :count => 2
123
+ assert_select 'form ul.inputs-list.items-list input[type=checkbox]', count: 2
113
124
  end
114
125
  end
115
126
 
116
127
  test 'input check boxes wraps each item in the configured item wrapper tag' do
117
- swap SimpleForm, :item_wrapper_tag => :li do
128
+ swap SimpleForm, item_wrapper_tag: :li do
118
129
  with_input_for @user, :active, :check_boxes
119
130
 
120
- assert_select 'form li input[type=checkbox]', :count => 2
131
+ assert_select 'form li input[type=checkbox]', count: 2
121
132
  end
122
133
  end
123
134
 
124
135
  test 'input check boxes does not wrap items when configured with falsy values' do
125
- swap SimpleForm, :item_wrapper_tag => false do
136
+ swap SimpleForm, item_wrapper_tag: false do
126
137
  with_input_for @user, :active, :check_boxes
127
138
 
128
- assert_select 'form input[type=checkbox]', :count => 2
139
+ assert_select 'form input[type=checkbox]', count: 2
129
140
  assert_no_select 'form li'
130
141
  end
131
142
  end
132
143
 
133
144
  test 'input check boxes allows overriding the item wrapper tag at input level' do
134
- swap SimpleForm, :item_wrapper_tag => :li do
135
- with_input_for @user, :active, :check_boxes, :item_wrapper_tag => :dl
145
+ swap SimpleForm, item_wrapper_tag: :li do
146
+ with_input_for @user, :active, :check_boxes, item_wrapper_tag: :dl
136
147
 
137
- assert_select 'form dl input[type=checkbox]', :count => 2
148
+ assert_select 'form dl input[type=checkbox]', count: 2
138
149
  assert_no_select 'form li'
139
150
  end
140
151
  end
141
152
 
142
153
  test 'input check boxes allows disabling the item wrapper tag at input level' do
143
- swap SimpleForm, :item_wrapper_tag => :ul do
144
- with_input_for @user, :active, :check_boxes, :item_wrapper_tag => false
154
+ swap SimpleForm, item_wrapper_tag: :ul do
155
+ with_input_for @user, :active, :check_boxes, item_wrapper_tag: false
145
156
 
146
- assert_select 'form input[type=checkbox]', :count => 2
157
+ assert_select 'form input[type=checkbox]', count: 2
147
158
  assert_no_select 'form li'
148
159
  end
149
160
  end
@@ -151,41 +162,41 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
151
162
  test 'input check boxes wraps items in a span tag by default' do
152
163
  with_input_for @user, :active, :check_boxes
153
164
 
154
- assert_select 'form span input[type=checkbox]', :count => 2
165
+ assert_select 'form span input[type=checkbox]', count: 2
155
166
  end
156
167
 
157
168
  test 'input check boxes renders the item wrapper tag with a default class "checkbox"' do
158
- with_input_for @user, :active, :check_boxes, :item_wrapper_tag => :li
169
+ with_input_for @user, :active, :check_boxes, item_wrapper_tag: :li
159
170
 
160
- assert_select 'form li.checkbox input[type=checkbox]', :count => 2
171
+ assert_select 'form li.checkbox input[type=checkbox]', count: 2
161
172
  end
162
173
 
163
174
  test 'input check boxes renders the item wrapper tag with the configured item wrapper class' do
164
- swap SimpleForm, :item_wrapper_tag => :li, :item_wrapper_class => 'item' do
175
+ swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
165
176
  with_input_for @user, :active, :check_boxes
166
177
 
167
- assert_select 'form li.checkbox.item input[type=checkbox]', :count => 2
178
+ assert_select 'form li.checkbox.item input[type=checkbox]', count: 2
168
179
  end
169
180
  end
170
181
 
171
182
  test 'input check boxes allows giving item wrapper class at input level only' do
172
- swap SimpleForm, :item_wrapper_tag => :li do
173
- with_input_for @user, :active, :check_boxes, :item_wrapper_class => 'item'
183
+ swap SimpleForm, item_wrapper_tag: :li do
184
+ with_input_for @user, :active, :check_boxes, item_wrapper_class: 'item'
174
185
 
175
- assert_select 'form li.checkbox.item input[type=checkbox]', :count => 2
186
+ assert_select 'form li.checkbox.item input[type=checkbox]', count: 2
176
187
  end
177
188
  end
178
189
 
179
190
  test 'input check boxes uses both configured and given item wrapper classes for item wrapper tag' do
180
- swap SimpleForm, :item_wrapper_tag => :li, :item_wrapper_class => 'item' do
181
- with_input_for @user, :active, :check_boxes, :item_wrapper_class => 'inline'
191
+ swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
192
+ with_input_for @user, :active, :check_boxes, item_wrapper_class: 'inline'
182
193
 
183
- assert_select 'form li.checkbox.item.inline input[type=checkbox]', :count => 2
194
+ assert_select 'form li.checkbox.item.inline input[type=checkbox]', count: 2
184
195
  end
185
196
  end
186
197
 
187
198
  test 'input check boxes respects the nested boolean style config, generating nested label > input' do
188
- swap SimpleForm, :boolean_style => :nested do
199
+ swap SimpleForm, boolean_style: :nested do
189
200
  with_input_for @user, :active, :check_boxes
190
201
 
191
202
  assert_select 'label.checkbox > input#user_active_true[type=checkbox]'
@@ -197,7 +208,7 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
197
208
  end
198
209
 
199
210
  test 'input check boxes with nested style overrides configured item wrapper tag, forcing the :label' do
200
- swap SimpleForm, :boolean_style => :nested, :item_wrapper_tag => :li do
211
+ swap SimpleForm, boolean_style: :nested, item_wrapper_tag: :li do
201
212
  with_input_for @user, :active, :check_boxes
202
213
 
203
214
  assert_select 'label.checkbox > input'
@@ -206,8 +217,8 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
206
217
  end
207
218
 
208
219
  test 'input check boxes with nested style overrides given item wrapper tag, forcing the :label' do
209
- swap SimpleForm, :boolean_style => :nested do
210
- with_input_for @user, :active, :check_boxes, :item_wrapper_tag => :li
220
+ swap SimpleForm, boolean_style: :nested do
221
+ with_input_for @user, :active, :check_boxes, item_wrapper_tag: :li
211
222
 
212
223
  assert_select 'label.checkbox > input'
213
224
  assert_no_select 'li'
@@ -215,8 +226,8 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
215
226
  end
216
227
 
217
228
  test 'input check boxes with nested style accepts giving extra wrapper classes' do
218
- swap SimpleForm, :boolean_style => :nested do
219
- with_input_for @user, :active, :check_boxes, :item_wrapper_class => "inline"
229
+ swap SimpleForm, boolean_style: :nested do
230
+ with_input_for @user, :active, :check_boxes, item_wrapper_class: "inline"
220
231
 
221
232
  assert_select 'label.checkbox.inline > input'
222
233
  end
@@ -6,15 +6,6 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
6
6
  SimpleForm::Inputs::CollectionRadioButtonsInput.reset_i18n_cache :boolean_collection
7
7
  end
8
8
 
9
- test 'input :as => :radio is deprecated in favor of :as => :radio_buttons' do
10
- assert_deprecated "[SIMPLE_FORM] Using `:as => :radio` as " \
11
- "input type is deprecated, please change it to `:as => :radio_buttons`." do
12
- with_input_for @user, :active, :radio
13
- end
14
-
15
- assert_select 'input[type=radio].radio_buttons', :count => 2
16
- end
17
-
18
9
  test 'input should generate boolean radio buttons by default for radio types' do
19
10
  with_input_for @user, :active, :radio_buttons
20
11
  assert_select 'input[type=radio][value=true].radio_buttons#user_active_true'
@@ -28,7 +19,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
28
19
  end
29
20
 
30
21
  test 'input as radio should use i18n to translate internal labels' do
31
- store_translations(:en, :simple_form => { :yes => 'Sim', :no => 'Não' }) do
22
+ store_translations(:en, simple_form: { yes: 'Sim', no: 'Não' }) do
32
23
  with_input_for @user, :active, :radio_buttons
33
24
  assert_select 'label[for=user_active_true]', 'Sim'
34
25
  assert_select 'label[for=user_active_false]', 'Não'
@@ -36,13 +27,13 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
36
27
  end
37
28
 
38
29
  test 'input radio should not include for attribute by default' do
39
- with_input_for @user, :gender, :radio_buttons, :collection => [:male, :female]
30
+ with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
40
31
  assert_select 'label'
41
32
  assert_no_select 'label[for=user_gender]'
42
33
  end
43
34
 
44
35
  test 'input radio should include for attribute when giving as html option' do
45
- with_input_for @user, :gender, :radio_buttons, :collection => [:male, :female], :label_html => { :for => 'gender' }
36
+ with_input_for @user, :gender, :radio_buttons, collection: [:male, :female], label_html: { for: 'gender' }
46
37
  assert_select 'label[for=gender]'
47
38
  end
48
39
 
@@ -54,7 +45,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
54
45
  end
55
46
 
56
47
  test 'input should allow overriding collection for radio types' do
57
- with_input_for @user, :name, :radio_buttons, :collection => ['Jose', 'Carlos']
48
+ with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
58
49
  assert_select 'input[type=radio][value=Jose]'
59
50
  assert_select 'input[type=radio][value=Carlos]'
60
51
  assert_select 'label.collection_radio_buttons', 'Jose'
@@ -62,10 +53,10 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
62
53
  end
63
54
 
64
55
  test 'input should do automatic collection translation for radio types using defaults key' do
65
- store_translations(:en, :simple_form => { :options => { :defaults => {
66
- :gender => { :male => 'Male', :female => 'Female'}
56
+ store_translations(:en, simple_form: { options: { defaults: {
57
+ gender: { male: 'Male', female: 'Female'}
67
58
  } } } ) do
68
- with_input_for @user, :gender, :radio_buttons, :collection => [:male, :female]
59
+ with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
69
60
  assert_select 'input[type=radio][value=male]'
70
61
  assert_select 'input[type=radio][value=female]'
71
62
  assert_select 'label.collection_radio_buttons', 'Male'
@@ -74,10 +65,10 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
74
65
  end
75
66
 
76
67
  test 'input should do automatic collection translation for radio types using specific object key' do
77
- store_translations(:en, :simple_form => { :options => { :user => {
78
- :gender => { :male => 'Male', :female => 'Female'}
68
+ store_translations(:en, simple_form: { options: { user: {
69
+ gender: { male: 'Male', female: 'Female'}
79
70
  } } } ) do
80
- with_input_for @user, :gender, :radio_buttons, :collection => [:male, :female]
71
+ with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
81
72
  assert_select 'input[type=radio][value=male]'
82
73
  assert_select 'input[type=radio][value=female]'
83
74
  assert_select 'label.collection_radio_buttons', 'Male'
@@ -87,12 +78,17 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
87
78
 
88
79
  test 'input should mark the current radio value by default' do
89
80
  @user.name = "Carlos"
90
- with_input_for @user, :name, :radio_buttons, :collection => ['Jose', 'Carlos']
81
+ with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
91
82
  assert_select 'input[type=radio][value=Carlos][checked=checked]'
92
83
  end
93
84
 
85
+ test 'input should accept html options as the last element of collection' do
86
+ with_input_for @user, :name, :radio_buttons, collection: [['Jose', 'jose', class: 'foo']]
87
+ assert_select 'input.foo[type=radio][value=jose]'
88
+ end
89
+
94
90
  test 'input should allow using a collection with text/value arrays' do
95
- with_input_for @user, :name, :radio_buttons, :collection => [['Jose', 'jose'], ['Carlos', 'carlos']]
91
+ with_input_for @user, :name, :radio_buttons, collection: [['Jose', 'jose'], ['Carlos', 'carlos']]
96
92
  assert_select 'input[type=radio][value=jose]'
97
93
  assert_select 'input[type=radio][value=carlos]'
98
94
  assert_select 'label.collection_radio_buttons', 'Jose'
@@ -100,32 +96,32 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
100
96
  end
101
97
 
102
98
  test 'input should allow using a collection with a Proc' do
103
- with_input_for @user, :name, :radio_buttons, :collection => Proc.new { ['Jose', 'Carlos' ] }
99
+ with_input_for @user, :name, :radio_buttons, collection: Proc.new { ['Jose', 'Carlos' ] }
104
100
  assert_select 'label.collection_radio_buttons', 'Jose'
105
101
  assert_select 'label.collection_radio_buttons', 'Carlos'
106
102
  end
107
103
 
108
104
  test 'input should allow overriding only label method for collections' do
109
105
  with_input_for @user, :name, :radio_buttons,
110
- :collection => ['Jose' , 'Carlos'],
111
- :label_method => :upcase
106
+ collection: ['Jose', 'Carlos'],
107
+ label_method: :upcase
112
108
  assert_select 'label.collection_radio_buttons', 'JOSE'
113
109
  assert_select 'label.collection_radio_buttons', 'CARLOS'
114
110
  end
115
111
 
116
112
  test 'input should allow overriding only value method for collections' do
117
113
  with_input_for @user, :name, :radio_buttons,
118
- :collection => ['Jose' , 'Carlos'],
119
- :value_method => :upcase
114
+ collection: ['Jose', 'Carlos'],
115
+ value_method: :upcase
120
116
  assert_select 'input[type=radio][value=JOSE]'
121
117
  assert_select 'input[type=radio][value=CARLOS]'
122
118
  end
123
119
 
124
120
  test 'input should allow overriding label and value method for collections' do
125
121
  with_input_for @user, :name, :radio_buttons,
126
- :collection => ['Jose' , 'Carlos'],
127
- :label_method => :upcase,
128
- :value_method => :downcase
122
+ collection: ['Jose', 'Carlos'],
123
+ label_method: :upcase,
124
+ value_method: :downcase
129
125
  assert_select 'input[type=radio][value=jose]'
130
126
  assert_select 'input[type=radio][value=carlos]'
131
127
  assert_select 'label.collection_radio_buttons', 'JOSE'
@@ -134,9 +130,9 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
134
130
 
135
131
  test 'input should allow overriding label and value method using a lambda for collections' do
136
132
  with_input_for @user, :name, :radio_buttons,
137
- :collection => ['Jose' , 'Carlos'],
138
- :label_method => lambda { |i| i.upcase },
139
- :value_method => lambda { |i| i.downcase }
133
+ collection: ['Jose', 'Carlos'],
134
+ label_method: lambda { |i| i.upcase },
135
+ value_method: lambda { |i| i.downcase }
140
136
  assert_select 'input[type=radio][value=jose]'
141
137
  assert_select 'input[type=radio][value=carlos]'
142
138
  assert_select 'label.collection_radio_buttons', 'JOSE'
@@ -144,108 +140,114 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
144
140
  end
145
141
 
146
142
  test 'collection input with radio type should generate required html attribute' do
147
- with_input_for @user, :name, :radio_buttons, :collection => ['Jose' , 'Carlos']
143
+ with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
148
144
  assert_select 'input[type=radio].required'
149
145
  assert_select 'input[type=radio][required]'
150
146
  end
151
147
 
148
+ test 'collection input with radio type should generate aria-required html attribute' do
149
+ with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
150
+ assert_select 'input[type=radio].required'
151
+ assert_select 'input[type=radio][aria-required=true]'
152
+ end
153
+
152
154
  test 'input radio does not wrap the collection by default' do
153
155
  with_input_for @user, :active, :radio_buttons
154
156
 
155
- assert_select 'form input[type=radio]', :count => 2
157
+ assert_select 'form input[type=radio]', count: 2
156
158
  assert_no_select 'form ul'
157
159
  end
158
160
 
159
161
  test 'input radio wraps the collection in the configured collection wrapper tag' do
160
- swap SimpleForm, :collection_wrapper_tag => :ul do
162
+ swap SimpleForm, collection_wrapper_tag: :ul do
161
163
  with_input_for @user, :active, :radio_buttons
162
164
 
163
- assert_select 'form ul input[type=radio]', :count => 2
165
+ assert_select 'form ul input[type=radio]', count: 2
164
166
  end
165
167
  end
166
168
 
167
169
  test 'input radio does not wrap the collection when configured with falsy values' do
168
- swap SimpleForm, :collection_wrapper_tag => false do
170
+ swap SimpleForm, collection_wrapper_tag: false do
169
171
  with_input_for @user, :active, :radio_buttons
170
172
 
171
- assert_select 'form input[type=radio]', :count => 2
173
+ assert_select 'form input[type=radio]', count: 2
172
174
  assert_no_select 'form ul'
173
175
  end
174
176
  end
175
177
 
176
178
  test 'input radio allows overriding the collection wrapper tag at input level' do
177
- swap SimpleForm, :collection_wrapper_tag => :ul do
178
- with_input_for @user, :active, :radio_buttons, :collection_wrapper_tag => :section
179
+ swap SimpleForm, collection_wrapper_tag: :ul do
180
+ with_input_for @user, :active, :radio_buttons, collection_wrapper_tag: :section
179
181
 
180
- assert_select 'form section input[type=radio]', :count => 2
182
+ assert_select 'form section input[type=radio]', count: 2
181
183
  assert_no_select 'form ul'
182
184
  end
183
185
  end
184
186
 
185
187
  test 'input radio allows disabling the collection wrapper tag at input level' do
186
- swap SimpleForm, :collection_wrapper_tag => :ul do
187
- with_input_for @user, :active, :radio_buttons, :collection_wrapper_tag => false
188
+ swap SimpleForm, collection_wrapper_tag: :ul do
189
+ with_input_for @user, :active, :radio_buttons, collection_wrapper_tag: false
188
190
 
189
- assert_select 'form input[type=radio]', :count => 2
191
+ assert_select 'form input[type=radio]', count: 2
190
192
  assert_no_select 'form ul'
191
193
  end
192
194
  end
193
195
 
194
196
  test 'input radio renders the wrapper tag with the configured wrapper class' do
195
- swap SimpleForm, :collection_wrapper_tag => :ul, :collection_wrapper_class => 'inputs-list' do
197
+ swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
196
198
  with_input_for @user, :active, :radio_buttons
197
199
 
198
- assert_select 'form ul.inputs-list input[type=radio]', :count => 2
200
+ assert_select 'form ul.inputs-list input[type=radio]', count: 2
199
201
  end
200
202
  end
201
203
 
202
204
  test 'input radio allows giving wrapper class at input level only' do
203
- swap SimpleForm, :collection_wrapper_tag => :ul do
204
- with_input_for @user, :active, :radio_buttons, :collection_wrapper_class => 'items-list'
205
+ swap SimpleForm, collection_wrapper_tag: :ul do
206
+ with_input_for @user, :active, :radio_buttons, collection_wrapper_class: 'items-list'
205
207
 
206
- assert_select 'form ul.items-list input[type=radio]', :count => 2
208
+ assert_select 'form ul.items-list input[type=radio]', count: 2
207
209
  end
208
210
  end
209
211
 
210
212
  test 'input radio uses both configured and given wrapper classes for wrapper tag' do
211
- swap SimpleForm, :collection_wrapper_tag => :ul, :collection_wrapper_class => 'inputs-list' do
212
- with_input_for @user, :active, :radio_buttons, :collection_wrapper_class => 'items-list'
213
+ swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
214
+ with_input_for @user, :active, :radio_buttons, collection_wrapper_class: 'items-list'
213
215
 
214
- assert_select 'form ul.inputs-list.items-list input[type=radio]', :count => 2
216
+ assert_select 'form ul.inputs-list.items-list input[type=radio]', count: 2
215
217
  end
216
218
  end
217
219
 
218
220
  test 'input radio wraps each item in the configured item wrapper tag' do
219
- swap SimpleForm, :item_wrapper_tag => :li do
221
+ swap SimpleForm, item_wrapper_tag: :li do
220
222
  with_input_for @user, :active, :radio_buttons
221
223
 
222
- assert_select 'form li input[type=radio]', :count => 2
224
+ assert_select 'form li input[type=radio]', count: 2
223
225
  end
224
226
  end
225
227
 
226
228
  test 'input radio does not wrap items when configured with falsy values' do
227
- swap SimpleForm, :item_wrapper_tag => false do
229
+ swap SimpleForm, item_wrapper_tag: false do
228
230
  with_input_for @user, :active, :radio_buttons
229
231
 
230
- assert_select 'form input[type=radio]', :count => 2
232
+ assert_select 'form input[type=radio]', count: 2
231
233
  assert_no_select 'form li'
232
234
  end
233
235
  end
234
236
 
235
237
  test 'input radio allows overriding the item wrapper tag at input level' do
236
- swap SimpleForm, :item_wrapper_tag => :li do
237
- with_input_for @user, :active, :radio_buttons, :item_wrapper_tag => :dl
238
+ swap SimpleForm, item_wrapper_tag: :li do
239
+ with_input_for @user, :active, :radio_buttons, item_wrapper_tag: :dl
238
240
 
239
- assert_select 'form dl input[type=radio]', :count => 2
241
+ assert_select 'form dl input[type=radio]', count: 2
240
242
  assert_no_select 'form li'
241
243
  end
242
244
  end
243
245
 
244
246
  test 'input radio allows disabling the item wrapper tag at input level' do
245
- swap SimpleForm, :item_wrapper_tag => :ul do
246
- with_input_for @user, :active, :radio_buttons, :item_wrapper_tag => false
247
+ swap SimpleForm, item_wrapper_tag: :ul do
248
+ with_input_for @user, :active, :radio_buttons, item_wrapper_tag: false
247
249
 
248
- assert_select 'form input[type=radio]', :count => 2
250
+ assert_select 'form input[type=radio]', count: 2
249
251
  assert_no_select 'form li'
250
252
  end
251
253
  end
@@ -253,41 +255,41 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
253
255
  test 'input radio wraps items in a span tag by default' do
254
256
  with_input_for @user, :active, :radio_buttons
255
257
 
256
- assert_select 'form span input[type=radio]', :count => 2
258
+ assert_select 'form span input[type=radio]', count: 2
257
259
  end
258
260
 
259
261
  test 'input radio renders the item wrapper tag with a default class "radio"' do
260
- with_input_for @user, :active, :radio_buttons, :item_wrapper_tag => :li
262
+ with_input_for @user, :active, :radio_buttons, item_wrapper_tag: :li
261
263
 
262
- assert_select 'form li.radio input[type=radio]', :count => 2
264
+ assert_select 'form li.radio input[type=radio]', count: 2
263
265
  end
264
266
 
265
267
  test 'input radio renders the item wrapper tag with the configured item wrapper class' do
266
- swap SimpleForm, :item_wrapper_tag => :li, :item_wrapper_class => 'item' do
268
+ swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
267
269
  with_input_for @user, :active, :radio_buttons
268
270
 
269
- assert_select 'form li.radio.item input[type=radio]', :count => 2
271
+ assert_select 'form li.radio.item input[type=radio]', count: 2
270
272
  end
271
273
  end
272
274
 
273
275
  test 'input radio allows giving item wrapper class at input level only' do
274
- swap SimpleForm, :item_wrapper_tag => :li do
275
- with_input_for @user, :active, :radio_buttons, :item_wrapper_class => 'item'
276
+ swap SimpleForm, item_wrapper_tag: :li do
277
+ with_input_for @user, :active, :radio_buttons, item_wrapper_class: 'item'
276
278
 
277
- assert_select 'form li.radio.item input[type=radio]', :count => 2
279
+ assert_select 'form li.radio.item input[type=radio]', count: 2
278
280
  end
279
281
  end
280
282
 
281
283
  test 'input radio uses both configured and given item wrapper classes for item wrapper tag' do
282
- swap SimpleForm, :item_wrapper_tag => :li, :item_wrapper_class => 'item' do
283
- with_input_for @user, :active, :radio_buttons, :item_wrapper_class => 'inline'
284
+ swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
285
+ with_input_for @user, :active, :radio_buttons, item_wrapper_class: 'inline'
284
286
 
285
- assert_select 'form li.radio.item.inline input[type=radio]', :count => 2
287
+ assert_select 'form li.radio.item.inline input[type=radio]', count: 2
286
288
  end
287
289
  end
288
290
 
289
291
  test 'input radio respects the nested boolean style config, generating nested label > input' do
290
- swap SimpleForm, :boolean_style => :nested do
292
+ swap SimpleForm, boolean_style: :nested do
291
293
  with_input_for @user, :active, :radio_buttons
292
294
 
293
295
  assert_select 'label.radio > input#user_active_true[type=radio]'
@@ -299,7 +301,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
299
301
  end
300
302
 
301
303
  test 'input radio with nested style overrides configured item wrapper tag, forcing the :label' do
302
- swap SimpleForm, :boolean_style => :nested, :item_wrapper_tag => :li do
304
+ swap SimpleForm, boolean_style: :nested, item_wrapper_tag: :li do
303
305
  with_input_for @user, :active, :radio_buttons
304
306
 
305
307
  assert_select 'label.radio > input'
@@ -308,8 +310,8 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
308
310
  end
309
311
 
310
312
  test 'input radio with nested style overrides given item wrapper tag, forcing the :label' do
311
- swap SimpleForm, :boolean_style => :nested do
312
- with_input_for @user, :active, :radio_buttons, :item_wrapper_tag => :li
313
+ swap SimpleForm, boolean_style: :nested do
314
+ with_input_for @user, :active, :radio_buttons, item_wrapper_tag: :li
313
315
 
314
316
  assert_select 'label.radio > input'
315
317
  assert_no_select 'li'
@@ -317,8 +319,8 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
317
319
  end
318
320
 
319
321
  test 'input radio with nested style accepts giving extra wrapper classes' do
320
- swap SimpleForm, :boolean_style => :nested do
321
- with_input_for @user, :active, :radio_buttons, :item_wrapper_class => "inline"
322
+ swap SimpleForm, boolean_style: :nested do
323
+ with_input_for @user, :active, :radio_buttons, item_wrapper_class: "inline"
322
324
 
323
325
  assert_select 'label.radio.inline > input'
324
326
  end