simple_form 3.0.4 → 5.0.3

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.
Files changed (107) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +199 -33
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +453 -128
  5. data/lib/generators/simple_form/install_generator.rb +4 -3
  6. data/lib/generators/simple_form/templates/README +3 -5
  7. data/lib/generators/simple_form/templates/_form.html.erb +2 -0
  8. data/lib/generators/simple_form/templates/_form.html.haml +2 -0
  9. data/lib/generators/simple_form/templates/_form.html.slim +1 -0
  10. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +47 -16
  11. data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +418 -23
  12. data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +101 -5
  13. data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +7 -2
  14. data/lib/simple_form/action_view_extensions/builder.rb +2 -0
  15. data/lib/simple_form/action_view_extensions/form_helper.rb +10 -3
  16. data/lib/simple_form/components/errors.rb +39 -6
  17. data/lib/simple_form/components/hints.rb +3 -2
  18. data/lib/simple_form/components/html5.rb +16 -5
  19. data/lib/simple_form/components/label_input.rb +21 -2
  20. data/lib/simple_form/components/labels.rb +22 -11
  21. data/lib/simple_form/components/maxlength.rb +9 -5
  22. data/lib/simple_form/components/min_max.rb +2 -1
  23. data/lib/simple_form/components/minlength.rb +38 -0
  24. data/lib/simple_form/components/pattern.rb +2 -1
  25. data/lib/simple_form/components/placeholders.rb +4 -3
  26. data/lib/simple_form/components/readonly.rb +2 -1
  27. data/lib/simple_form/components.rb +2 -0
  28. data/lib/simple_form/error_notification.rb +1 -0
  29. data/lib/simple_form/form_builder.rb +220 -89
  30. data/lib/simple_form/helpers/autofocus.rb +1 -0
  31. data/lib/simple_form/helpers/disabled.rb +1 -0
  32. data/lib/simple_form/helpers/readonly.rb +1 -0
  33. data/lib/simple_form/helpers/required.rb +1 -0
  34. data/lib/simple_form/helpers/validators.rb +2 -1
  35. data/lib/simple_form/helpers.rb +6 -5
  36. data/lib/simple_form/i18n_cache.rb +1 -0
  37. data/lib/simple_form/inputs/base.rb +62 -16
  38. data/lib/simple_form/inputs/block_input.rb +2 -1
  39. data/lib/simple_form/inputs/boolean_input.rb +40 -16
  40. data/lib/simple_form/inputs/collection_check_boxes_input.rb +3 -2
  41. data/lib/simple_form/inputs/collection_input.rb +37 -14
  42. data/lib/simple_form/inputs/collection_radio_buttons_input.rb +9 -13
  43. data/lib/simple_form/inputs/collection_select_input.rb +5 -2
  44. data/lib/simple_form/inputs/color_input.rb +14 -0
  45. data/lib/simple_form/inputs/date_time_input.rb +24 -9
  46. data/lib/simple_form/inputs/file_input.rb +5 -2
  47. data/lib/simple_form/inputs/grouped_collection_select_input.rb +16 -3
  48. data/lib/simple_form/inputs/hidden_input.rb +5 -2
  49. data/lib/simple_form/inputs/numeric_input.rb +6 -4
  50. data/lib/simple_form/inputs/password_input.rb +6 -3
  51. data/lib/simple_form/inputs/priority_input.rb +5 -6
  52. data/lib/simple_form/inputs/range_input.rb +2 -1
  53. data/lib/simple_form/inputs/rich_text_area_input.rb +12 -0
  54. data/lib/simple_form/inputs/string_input.rb +7 -4
  55. data/lib/simple_form/inputs/text_input.rb +6 -3
  56. data/lib/simple_form/inputs.rb +3 -0
  57. data/lib/simple_form/map_type.rb +1 -0
  58. data/lib/simple_form/railtie.rb +8 -0
  59. data/lib/simple_form/tags.rb +13 -2
  60. data/lib/simple_form/version.rb +2 -1
  61. data/lib/simple_form/wrappers/builder.rb +7 -6
  62. data/lib/simple_form/wrappers/leaf.rb +29 -0
  63. data/lib/simple_form/wrappers/many.rb +7 -6
  64. data/lib/simple_form/wrappers/root.rb +10 -3
  65. data/lib/simple_form/wrappers/single.rb +7 -4
  66. data/lib/simple_form/wrappers.rb +2 -0
  67. data/lib/simple_form.rb +137 -21
  68. data/test/action_view_extensions/builder_test.rb +64 -45
  69. data/test/action_view_extensions/form_helper_test.rb +36 -16
  70. data/test/components/custom_components_test.rb +62 -0
  71. data/test/components/label_test.rb +70 -41
  72. data/test/form_builder/association_test.rb +85 -37
  73. data/test/form_builder/button_test.rb +11 -10
  74. data/test/form_builder/error_notification_test.rb +2 -1
  75. data/test/form_builder/error_test.rb +146 -33
  76. data/test/form_builder/general_test.rb +183 -81
  77. data/test/form_builder/hint_test.rb +24 -18
  78. data/test/form_builder/input_field_test.rb +105 -75
  79. data/test/form_builder/label_test.rb +68 -13
  80. data/test/form_builder/wrapper_test.rb +197 -22
  81. data/test/generators/simple_form_generator_test.rb +8 -7
  82. data/test/inputs/boolean_input_test.rb +97 -6
  83. data/test/inputs/collection_check_boxes_input_test.rb +117 -25
  84. data/test/inputs/collection_radio_buttons_input_test.rb +176 -54
  85. data/test/inputs/collection_select_input_test.rb +189 -77
  86. data/test/inputs/color_input_test.rb +10 -0
  87. data/test/inputs/datetime_input_test.rb +121 -50
  88. data/test/inputs/disabled_test.rb +29 -15
  89. data/test/inputs/discovery_test.rb +79 -6
  90. data/test/inputs/file_input_test.rb +3 -2
  91. data/test/inputs/general_test.rb +23 -22
  92. data/test/inputs/grouped_collection_select_input_test.rb +54 -17
  93. data/test/inputs/hidden_input_test.rb +5 -4
  94. data/test/inputs/numeric_input_test.rb +48 -44
  95. data/test/inputs/priority_input_test.rb +17 -16
  96. data/test/inputs/readonly_test.rb +20 -19
  97. data/test/inputs/required_test.rb +58 -13
  98. data/test/inputs/rich_text_area_input_test.rb +15 -0
  99. data/test/inputs/string_input_test.rb +58 -36
  100. data/test/inputs/text_input_test.rb +20 -7
  101. data/test/simple_form_test.rb +9 -0
  102. data/test/support/discovery_inputs.rb +40 -2
  103. data/test/support/misc_helpers.rb +113 -5
  104. data/test/support/mock_controller.rb +7 -1
  105. data/test/support/models.rb +162 -39
  106. data/test/test_helper.rb +19 -4
  107. metadata +51 -43
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: UTF-8
2
3
  require 'test_helper'
3
4
 
@@ -8,7 +9,7 @@ class FormBuilderTest < ActionView::TestCase
8
9
  end
9
10
  end
10
11
 
11
- test 'nested simple fields should yield an instance of FormBuilder' do
12
+ test 'nested simple fields yields an instance of FormBuilder' do
12
13
  simple_form_for :user do |f|
13
14
  f.simple_fields_for :posts do |posts_form|
14
15
  assert posts_form.instance_of?(SimpleForm::FormBuilder)
@@ -22,7 +23,7 @@ class FormBuilderTest < ActionView::TestCase
22
23
  end
23
24
  end
24
25
 
25
- test 'builder should work without controller' do
26
+ test 'builder works without controller' do
26
27
  stub_any_instance ActionView::TestCase, :controller, nil do
27
28
  simple_form_for @user do |f|
28
29
  assert f.input(:name)
@@ -30,7 +31,13 @@ class FormBuilderTest < ActionView::TestCase
30
31
  end
31
32
  end
32
33
 
33
- test 'builder input should allow a block to configure input' do
34
+ test 'builder works with decorated object responsive to #to_model' do
35
+ assert_nothing_raised do
36
+ with_form_for @decorated_user, :name
37
+ end
38
+ end
39
+
40
+ test 'builder input allows a block to configure input' do
34
41
  with_form_for @user, :name do
35
42
  text_field_tag :foo, :bar, id: :cool
36
43
  end
@@ -38,7 +45,7 @@ class FormBuilderTest < ActionView::TestCase
38
45
  assert_select 'input#cool'
39
46
  end
40
47
 
41
- test 'builder should allow adding custom input mappings for default input types' do
48
+ test 'builder allows adding custom input mappings for default input types' do
42
49
  swap SimpleForm, input_mappings: { /count$/ => :integer } do
43
50
  with_form_for @user, :post_count
44
51
  assert_no_select 'form input#user_post_count.string'
@@ -46,15 +53,26 @@ class FormBuilderTest < ActionView::TestCase
46
53
  end
47
54
  end
48
55
 
49
- test 'builder should allow to skip input_type class' do
50
- swap SimpleForm, generate_additional_classes_for: [:label, :wrapper] do
56
+ test 'builder does not override custom input mappings for custom collection' do
57
+ swap SimpleForm, input_mappings: { /gender$/ => :check_boxes } do
58
+ with_concat_form_for @user do |f|
59
+ f.input :gender, collection: %i[male female]
60
+ end
61
+
62
+ assert_no_select 'select option', 'Male'
63
+ assert_select 'input[type=checkbox][value=male]'
64
+ end
65
+ end
66
+
67
+ test 'builder allows to skip input_type class' do
68
+ swap SimpleForm, generate_additional_classes_for: %i[label wrapper] do
51
69
  with_form_for @user, :post_count
52
70
  assert_no_select "form input#user_post_count.integer"
53
71
  assert_select "form input#user_post_count"
54
72
  end
55
73
  end
56
74
 
57
- test 'builder should allow to add additional classes only for wrapper' do
75
+ test 'builder allows to add additional classes only for wrapper' do
58
76
  swap SimpleForm, generate_additional_classes_for: [:wrapper] do
59
77
  with_form_for @user, :post_count
60
78
  assert_no_select "form input#user_post_count.string"
@@ -63,7 +81,7 @@ class FormBuilderTest < ActionView::TestCase
63
81
  end
64
82
  end
65
83
 
66
- test 'builder should allow adding custom input mappings for integer input types' do
84
+ test 'builder allows adding custom input mappings for integer input types' do
67
85
  swap SimpleForm, input_mappings: { /lock_version/ => :hidden } do
68
86
  with_form_for @user, :lock_version
69
87
  assert_no_select 'form input#user_lock_version.integer'
@@ -101,187 +119,271 @@ class FormBuilderTest < ActionView::TestCase
101
119
  end
102
120
 
103
121
  # INPUT TYPES
104
- test 'builder should generate text fields for string columns' do
122
+ test 'builder generates text fields for string columns' do
105
123
  with_form_for @user, :name
106
124
  assert_select 'form input#user_name.string'
107
125
  end
108
126
 
109
- test 'builder should generate text areas for text columns' do
127
+ test 'builder generates text areas for text columns' do
110
128
  with_form_for @user, :description
129
+ assert_no_select 'form input#user_description.string'
130
+ assert_select 'form textarea#user_description.text'
131
+ end
132
+
133
+ test 'builder generates text areas for text columns when hinted' do
134
+ with_form_for @user, :description, as: :text
135
+ assert_no_select 'form input#user_description.string'
111
136
  assert_select 'form textarea#user_description.text'
112
137
  end
113
138
 
114
- test 'builder should generate a checkbox for boolean columns' do
139
+ test 'builder generates text field for text columns when hinted' do
140
+ with_form_for @user, :description, as: :string
141
+ assert_no_select 'form textarea#user_description.text'
142
+ assert_select 'form input#user_description.string'
143
+ end
144
+
145
+ test 'builder generates text areas for hstore columns' do
146
+ with_form_for @user, :hstore
147
+ assert_no_select 'form input#user_hstore.string'
148
+ assert_select 'form textarea#user_hstore.text'
149
+ end
150
+
151
+ test 'builder generates text areas for json columns' do
152
+ with_form_for @user, :json
153
+ assert_no_select 'form input#user_json.string'
154
+ assert_select 'form textarea#user_json.text'
155
+ end
156
+
157
+ test 'builder generates text areas for jsonb columns' do
158
+ with_form_for @user, :jsonb
159
+ assert_no_select 'form input#user_jsonb.string'
160
+ assert_select 'form textarea#user_jsonb.text'
161
+ end
162
+
163
+ test 'builder generates a checkbox for boolean columns' do
115
164
  with_form_for @user, :active
116
165
  assert_select 'form input[type=checkbox]#user_active.boolean'
117
166
  end
118
167
 
119
- test 'builder should use integer text field for integer columns' do
168
+ test 'builder uses integer text field for integer columns' do
120
169
  with_form_for @user, :age
121
170
  assert_select 'form input#user_age.numeric.integer'
122
171
  end
123
172
 
124
- test 'builder should generate decimal text field for decimal columns' do
173
+ test 'builder generates decimal text field for decimal columns' do
125
174
  with_form_for @user, :credit_limit
126
175
  assert_select 'form input#user_credit_limit.numeric.decimal'
127
176
  end
128
177
 
129
- test 'builder should generate password fields for columns that matches password' do
178
+ test 'builder generates uuid fields for uuid columns' do
179
+ with_form_for @user, :uuid
180
+ if defined? ActiveModel::Type
181
+ assert_select 'form input#user_uuid.string.string'
182
+ else
183
+ assert_select 'form input#user_uuid.string.uuid'
184
+ end
185
+ end
186
+
187
+ test 'builder generates string fields for citext columns' do
188
+ with_form_for @user, :citext
189
+ assert_select 'form input#user_citext.string'
190
+ end
191
+
192
+ test 'builder generates password fields for columns that matches password' do
130
193
  with_form_for @user, :password
131
194
  assert_select 'form input#user_password.password'
132
195
  end
133
196
 
134
- test 'builder should generate country fields for columns that matches country' do
197
+ test 'builder generates country fields for columns that matches country' do
135
198
  with_form_for @user, :residence_country
136
199
  assert_select 'form select#user_residence_country.country'
137
200
  end
138
201
 
139
- test 'builder should generate time_zone fields for columns that matches time_zone' do
202
+ test 'builder generates time_zone fields for columns that matches time_zone' do
140
203
  with_form_for @user, :time_zone
141
204
  assert_select 'form select#user_time_zone.time_zone'
142
205
  end
143
206
 
144
- test 'builder should generate email fields for columns that matches email' do
207
+ test 'builder generates email fields for columns that matches email' do
145
208
  with_form_for @user, :email
146
209
  assert_select 'form input#user_email.string.email'
147
210
  end
148
211
 
149
- test 'builder should generate tel fields for columns that matches phone' do
212
+ test 'builder generates tel fields for columns that matches phone' do
150
213
  with_form_for @user, :phone_number
151
214
  assert_select 'form input#user_phone_number.string.tel'
152
215
  end
153
216
 
154
- test 'builder should generate url fields for columns that matches url' do
217
+ test 'builder generates url fields for columns that matches url' do
155
218
  with_form_for @user, :url
156
219
  assert_select 'form input#user_url.string.url'
157
220
  end
158
221
 
159
- test 'builder should generate date select for date columns' do
222
+ test 'builder generates date select for date columns' do
160
223
  with_form_for @user, :born_at
161
224
  assert_select 'form select#user_born_at_1i.date'
162
225
  end
163
226
 
164
- test 'builder should generate time select for time columns' do
227
+ test 'builder generates time select for time columns' do
165
228
  with_form_for @user, :delivery_time
166
229
  assert_select 'form select#user_delivery_time_4i.time'
167
230
  end
168
231
 
169
- test 'builder should generate datetime select for datetime columns' do
232
+ test 'builder generates datetime select for datetime columns' do
170
233
  with_form_for @user, :created_at
171
234
  assert_select 'form select#user_created_at_1i.datetime'
172
235
  end
173
236
 
174
- test 'builder should generate datetime select for timestamp columns' do
237
+ test 'builder generates datetime select for timestamp columns' do
175
238
  with_form_for @user, :updated_at
176
239
  assert_select 'form select#user_updated_at_1i.datetime'
177
240
  end
178
241
 
179
- test 'builder should generate file for file columns' do
180
- @user.avatar = MiniTest::Mock.new
181
- @user.avatar.expect(:public_filename, true)
242
+ test 'builder generates file input for ActiveStorage >= 5.2 and Refile >= 0.2.0 <= 0.4.0' do
243
+ with_form_for UserWithAttachment.build, :avatar
244
+ assert_select 'form input#user_with_attachment_avatar.file'
245
+ end
246
+
247
+ test 'builder generates file input for ActiveStorage::Attached::Many' do
248
+ with_form_for UserWithAttachment.build, :avatars
249
+ assert_select 'form input#user_with_attachment_avatars.file'
250
+ end
182
251
 
183
- with_form_for @user, :avatar
184
- assert_select 'form input#user_avatar.file'
252
+ test 'builder generates file input for Refile >= 0.3.0 and CarrierWave >= 0.2.2' do
253
+ with_form_for UserWithAttachment.build, :cover
254
+ assert_select 'form input#user_with_attachment_cover.file'
185
255
  end
186
256
 
187
- test 'builder should generate file for attributes that are real db columns but have file methods' do
188
- @user.home_picture = MiniTest::Mock.new
189
- @user.home_picture.expect(:mounted_as, true)
257
+ test 'builder generates file input for Refile >= 0.4.0 and Shrine >= 0.9.0' do
258
+ with_form_for UserWithAttachment.build, :profile_image
259
+ assert_select 'form input#user_with_attachment_profile_image.file'
260
+ end
190
261
 
191
- with_form_for @user, :home_picture
192
- assert_select 'form input#user_home_picture.file'
262
+ test 'builder generates file input for Paperclip ~> 2.0' do
263
+ with_form_for UserWithAttachment.build, :portrait
264
+ assert_select 'form input#user_with_attachment_portrait.file'
193
265
  end
194
266
 
195
- test 'build should generate select if a collection is given' do
267
+ test 'build generates select if a collection is given' do
196
268
  with_form_for @user, :age, collection: 1..60
197
269
  assert_select 'form select#user_age.select'
198
270
  end
199
271
 
200
- test 'builder should allow overriding default input type for text' do
272
+ test 'builder does not generate url fields for columns that contain only the letters url' do
273
+ with_form_for @user, :hourly
274
+ assert_no_select 'form input#user_url.string.url'
275
+ assert_select 'form input#user_hourly.string'
276
+ end
277
+
278
+ test 'builder allows overriding default input type for text' do
201
279
  with_form_for @user, :name, as: :text
202
280
  assert_no_select 'form input#user_name'
203
281
  assert_select 'form textarea#user_name.text'
282
+ end
204
283
 
284
+ test 'builder allows overriding default input type for radio_buttons' do
205
285
  with_form_for @user, :active, as: :radio_buttons
206
286
  assert_no_select 'form input[type=checkbox]'
207
287
  assert_select 'form input.radio_buttons[type=radio]', count: 2
288
+ end
208
289
 
290
+ test 'builder allows overriding default input type for string' do
209
291
  with_form_for @user, :born_at, as: :string
210
292
  assert_no_select 'form select'
211
293
  assert_select 'form input#user_born_at.string'
212
294
  end
213
295
 
214
296
  # COMMON OPTIONS
215
- test 'builder should add chosen form class' do
216
- swap SimpleForm, form_class: :my_custom_class do
297
+ # Remove this test when SimpleForm.form_class is removed in 4.x
298
+ test 'builder adds chosen form class' do
299
+ ActiveSupport::Deprecation.silence do
300
+ swap SimpleForm, form_class: :my_custom_class do
301
+ with_form_for @user, :name
302
+ assert_select 'form.my_custom_class'
303
+ end
304
+ end
305
+ end
306
+
307
+ # Remove this test when SimpleForm.form_class is removed in 4.x
308
+ test 'builder adds chosen form class and default form class' do
309
+ ActiveSupport::Deprecation.silence do
310
+ swap SimpleForm, form_class: "my_custom_class", default_form_class: "my_default_class" do
311
+ with_form_for @user, :name
312
+ assert_select 'form.my_custom_class.my_default_class'
313
+ end
314
+ end
315
+ end
316
+
317
+ test 'builder adds default form class' do
318
+ swap SimpleForm, default_form_class: "default_class" do
217
319
  with_form_for @user, :name
218
- assert_select 'form.my_custom_class'
320
+ assert_select 'form.default_class'
219
321
  end
220
322
  end
221
323
 
222
- test 'builder should allow passing options to input' do
324
+ test 'builder allows passing options to input' do
223
325
  with_form_for @user, :name, input_html: { class: 'my_input', id: 'my_input' }
224
326
  assert_select 'form input#my_input.my_input.string'
225
327
  end
226
328
 
227
- test 'builder should not propagate input options to wrapper' do
329
+ test 'builder does not propagate input options to wrapper' do
228
330
  with_form_for @user, :name, input_html: { class: 'my_input', id: 'my_input' }
229
331
  assert_no_select 'form div.input.my_input.string'
230
332
  assert_select 'form input#my_input.my_input.string'
231
333
  end
232
334
 
233
- test 'builder should not propagate input options to wrapper with custom wrapper' do
234
- swap_wrapper :default, self.custom_wrapper_with_wrapped_input do
335
+ test 'builder does not propagate input options to wrapper with custom wrapper' do
336
+ swap_wrapper :default, custom_wrapper_with_wrapped_input do
235
337
  with_form_for @user, :name, input_html: { class: 'my_input' }
236
338
  assert_no_select 'form div.input.my_input'
237
339
  assert_select 'form input.my_input.string'
238
340
  end
239
341
  end
240
342
 
241
- test 'builder should not propagate label options to wrapper with custom wrapper' do
242
- swap_wrapper :default, self.custom_wrapper_with_wrapped_label do
343
+ test 'builder does not propagate label options to wrapper with custom wrapper' do
344
+ swap_wrapper :default, custom_wrapper_with_wrapped_label do
243
345
  with_form_for @user, :name, label_html: { class: 'my_label' }
244
346
  assert_no_select 'form div.label.my_label'
245
347
  assert_select 'form label.my_label.string'
246
348
  end
247
349
  end
248
350
 
249
- test 'builder should generate a input with label' do
351
+ test 'builder generates an input with label' do
250
352
  with_form_for @user, :name
251
353
  assert_select 'form label.string[for=user_name]', /Name/
252
354
  end
253
355
 
254
- test 'builder should be able to disable the label for a input' do
356
+ test 'builder is able to disable the label for an input' do
255
357
  with_form_for @user, :name, label: false
256
358
  assert_no_select 'form label'
257
359
  end
258
360
 
259
- test 'builder should be able to disable the label for an input and return a html safe string' do
361
+ test 'builder is able to disable the label for an input and return a html safe string' do
260
362
  with_form_for @user, :name, label: false, wrapper: custom_wrapper_with_wrapped_label_input
261
363
  assert_select 'form input#user_name'
262
364
  end
263
365
 
264
- test 'builder should use custom label' do
366
+ test 'builder uses custom label' do
265
367
  with_form_for @user, :name, label: 'Yay!'
266
368
  assert_select 'form label', /Yay!/
267
369
  end
268
370
 
269
- test 'builder should pass options to label' do
371
+ test 'builder passes options to label' do
270
372
  with_form_for @user, :name, label_html: { id: "cool" }
271
373
  assert_select 'form label#cool', /Name/
272
374
  end
273
375
 
274
- test 'builder should not generate hints for a input' do
376
+ test 'builder does not generate hints for an input' do
275
377
  with_form_for @user, :name
276
378
  assert_no_select 'span.hint'
277
379
  end
278
380
 
279
- test 'builder should be able to add a hint for a input' do
381
+ test 'builder is able to add a hint for an input' do
280
382
  with_form_for @user, :name, hint: 'test'
281
383
  assert_select 'span.hint', 'test'
282
384
  end
283
385
 
284
- test 'builder should be able to disable a hint even if it exists in i18n' do
386
+ test 'builder is able to disable a hint even if it exists in i18n' do
285
387
  store_translations(:en, simple_form: { hints: { name: 'Hint test' } }) do
286
388
  stub_any_instance(SimpleForm::Inputs::Base, :hint, -> { raise 'Never' }) do
287
389
  with_form_for @user, :name, hint: false
@@ -290,32 +392,32 @@ class FormBuilderTest < ActionView::TestCase
290
392
  end
291
393
  end
292
394
 
293
- test 'builder should pass options to hint' do
395
+ test 'builder passes options to hint' do
294
396
  with_form_for @user, :name, hint: 'test', hint_html: { id: "cool" }
295
397
  assert_select 'span.hint#cool', 'test'
296
398
  end
297
399
 
298
- test 'builder should generate errors for attribute without errors' do
400
+ test 'builder generates errors for attribute without errors' do
299
401
  with_form_for @user, :credit_limit
300
402
  assert_no_select 'span.errors'
301
403
  end
302
404
 
303
- test 'builder should generate errors for attribute with errors' do
405
+ test 'builder generates errors for attribute with errors' do
304
406
  with_form_for @user, :name
305
- assert_select 'span.error', "can&#39;t be blank"
407
+ assert_select 'span.error', "cannot be blank"
306
408
  end
307
409
 
308
- test 'builder should be able to disable showing errors for a input' do
410
+ test 'builder is able to disable showing errors for an input' do
309
411
  with_form_for @user, :name, error: false
310
412
  assert_no_select 'span.error'
311
413
  end
312
414
 
313
- test 'builder should pass options to errors' do
415
+ test 'builder passes options to errors' do
314
416
  with_form_for @user, :name, error_html: { id: "cool" }
315
- assert_select 'span.error#cool', "can&#39;t be blank"
417
+ assert_select 'span.error#cool', "cannot be blank"
316
418
  end
317
419
 
318
- test 'placeholder should not be generated when set to false' do
420
+ test 'placeholder does not be generated when set to false' do
319
421
  store_translations(:en, simple_form: { placeholders: { user: {
320
422
  name: 'Name goes here'
321
423
  } } }) do
@@ -325,31 +427,31 @@ class FormBuilderTest < ActionView::TestCase
325
427
  end
326
428
 
327
429
  # DEFAULT OPTIONS
328
- [:input, :input_field].each do |method|
329
- test "builder should receive a default argument and pass it to the inputs when calling '#{method}'" do
430
+ %i[input input_field].each do |method|
431
+ test "builder receives a default argument and pass it to the inputs when calling '#{method}'" do
330
432
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class' } } do |f|
331
- f.send(method, :name)
433
+ f.public_send(method, :name)
332
434
  end
333
435
  assert_select 'input.default_class'
334
436
  end
335
437
 
336
- test "builder should receive a default argument and pass it to the inputs without changing the defaults when calling '#{method}'" do
438
+ test "builder receives a default argument and pass it to the inputs without changing the defaults when calling '#{method}'" do
337
439
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class', id: 'default_id' } } do |f|
338
- concat(f.send(method, :name))
339
- concat(f.send(method, :credit_limit))
440
+ concat(f.public_send(method, :name))
441
+ concat(f.public_send(method, :credit_limit))
340
442
  end
341
443
 
342
444
  assert_select "input.string.default_class[name='user[name]']"
343
445
  assert_no_select "input.string[name='user[credit_limit]']"
344
446
  end
345
447
 
346
- test "builder should receive a default argument and pass it to the inputs and nested form when calling '#{method}'" do
448
+ test "builder receives a default argument and pass it to the inputs and nested form when calling '#{method}'" do
347
449
  @user.company = Company.new(1, 'Empresa')
348
450
 
349
451
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class' } } do |f|
350
- concat(f.send(method, :name))
452
+ concat(f.public_send(method, :name))
351
453
  concat(f.simple_fields_for(:company) do |company_form|
352
- concat(company_form.send(method, :name))
454
+ concat(company_form.public_send(method, :name))
353
455
  end)
354
456
  end
355
457
 
@@ -358,28 +460,28 @@ class FormBuilderTest < ActionView::TestCase
358
460
  end
359
461
  end
360
462
 
361
- test "builder should receive a default argument and pass it to the inputs when calling 'input', respecting the specific options" do
463
+ test "builder receives a default argument and pass it to the inputs when calling 'input', respecting the specific options" do
362
464
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class' } } do |f|
363
465
  f.input :name, input_html: { id: 'specific_id' }
364
466
  end
365
467
  assert_select 'input.default_class#specific_id'
366
468
  end
367
469
 
368
- test "builder should receive a default argument and pass it to the inputs when calling 'input_field', respecting the specific options" do
470
+ test "builder receives a default argument and pass it to the inputs when calling 'input_field', respecting the specific options" do
369
471
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class' } } do |f|
370
472
  f.input_field :name, id: 'specific_id'
371
473
  end
372
474
  assert_select 'input.default_class#specific_id'
373
475
  end
374
476
 
375
- test "builder should receive a default argument and pass it to the inputs when calling 'input', overwriting the defaults with specific options" do
477
+ test "builder receives a default argument and pass it to the inputs when calling 'input', overwriting the defaults with specific options" do
376
478
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class', id: 'default_id' } } do |f|
377
479
  f.input :name, input_html: { id: 'specific_id' }
378
480
  end
379
481
  assert_select 'input.default_class#specific_id'
380
482
  end
381
483
 
382
- test "builder should receive a default argument and pass it to the inputs when calling 'input_field', overwriting the defaults with specific options" do
484
+ test "builder receives a default argument and pass it to the inputs when calling 'input_field', overwriting the defaults with specific options" do
383
485
  with_concat_form_for @user, defaults: { input_html: { class: 'default_class', id: 'default_id' } } do |f|
384
486
  f.input_field :name, id: 'specific_id'
385
487
  end
@@ -387,24 +489,24 @@ class FormBuilderTest < ActionView::TestCase
387
489
  end
388
490
 
389
491
  # WITHOUT OBJECT
390
- test 'builder should generate properly when object is not present' do
492
+ test 'builder generates properly when object is not present' do
391
493
  with_form_for :project, :name
392
494
  assert_select 'form input.string#project_name'
393
495
  end
394
496
 
395
- test 'builder should generate password fields based on attribute name when object is not present' do
497
+ test 'builder generates password fields based on attribute name when object is not present' do
396
498
  with_form_for :project, :password_confirmation
397
499
  assert_select 'form input[type=password].password#project_password_confirmation'
398
500
  end
399
501
 
400
- test 'builder should generate text fields by default for all attributes when object is not present' do
502
+ test 'builder generates text fields by default for all attributes when object is not present' do
401
503
  with_form_for :project, :created_at
402
504
  assert_select 'form input.string#project_created_at'
403
505
  with_form_for :project, :budget
404
506
  assert_select 'form input.string#project_budget'
405
507
  end
406
508
 
407
- test 'builder should allow overriding input type when object is not present' do
509
+ test 'builder allows overriding input type when object is not present' do
408
510
  with_form_for :project, :created_at, as: :datetime
409
511
  assert_select 'form select.datetime#project_created_at_1i'
410
512
  with_form_for :project, :budget, as: :decimal
@@ -412,24 +514,24 @@ class FormBuilderTest < ActionView::TestCase
412
514
  end
413
515
 
414
516
  # CUSTOM FORM BUILDER
415
- test 'custom builder should inherit mappings' do
517
+ test 'custom builder inherits mappings' do
416
518
  with_custom_form_for @user, :email
417
519
  assert_select 'form input[type=email]#user_email.custom'
418
520
  end
419
521
 
420
- test 'form with CustomMapTypeFormBuilder should use custom map type builder' do
522
+ test 'form with CustomMapTypeFormBuilder uses custom map type builder' do
421
523
  with_concat_custom_mapping_form_for(:user) do |user|
422
524
  assert user.instance_of?(CustomMapTypeFormBuilder)
423
525
  end
424
526
  end
425
527
 
426
- test 'form with CustomMapTypeFormBuilder should use custom mapping' do
528
+ test 'form with CustomMapTypeFormBuilder uses custom mapping' do
427
529
  with_concat_custom_mapping_form_for(:user) do |user|
428
530
  assert_equal SimpleForm::Inputs::StringInput, user.class.mappings[:custom_type]
429
531
  end
430
532
  end
431
533
 
432
- test 'form without CustomMapTypeFormBuilder should not use custom mapping' do
534
+ test 'form without CustomMapTypeFormBuilder does not use custom mapping' do
433
535
  with_concat_form_for(:user) do |user|
434
536
  assert_nil user.class.mappings[:custom_type]
435
537
  end