formtastic 4.0.0 → 5.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.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +13 -13
  3. data/CHANGELOG.md +10 -1
  4. data/Gemfile.lock +99 -64
  5. data/README.md +7 -2
  6. data/formtastic.gemspec +5 -3
  7. data/gemfiles/{rails_5.2 → rails_7.0}/Gemfile +1 -1
  8. data/gemfiles/rails_7.1/Gemfile +5 -0
  9. data/gemfiles/rails_edge/Gemfile +1 -1
  10. data/lib/formtastic/action_class_finder.rb +1 -0
  11. data/lib/formtastic/actions/base.rb +1 -0
  12. data/lib/formtastic/actions/button_action.rb +1 -0
  13. data/lib/formtastic/actions/buttonish.rb +1 -0
  14. data/lib/formtastic/actions/input_action.rb +1 -0
  15. data/lib/formtastic/actions/link_action.rb +1 -0
  16. data/lib/formtastic/actions.rb +1 -0
  17. data/lib/formtastic/deprecation.rb +2 -1
  18. data/lib/formtastic/engine.rb +1 -0
  19. data/lib/formtastic/form_builder.rb +1 -0
  20. data/lib/formtastic/helpers/action_helper.rb +1 -0
  21. data/lib/formtastic/helpers/actions_helper.rb +1 -0
  22. data/lib/formtastic/helpers/enum.rb +1 -0
  23. data/lib/formtastic/helpers/errors_helper.rb +1 -0
  24. data/lib/formtastic/helpers/fieldset_wrapper.rb +1 -0
  25. data/lib/formtastic/helpers/file_column_detection.rb +1 -0
  26. data/lib/formtastic/helpers/form_helper.rb +1 -0
  27. data/lib/formtastic/helpers/input_helper.rb +2 -4
  28. data/lib/formtastic/helpers/inputs_helper.rb +2 -1
  29. data/lib/formtastic/helpers/reflection.rb +1 -0
  30. data/lib/formtastic/helpers.rb +1 -1
  31. data/lib/formtastic/html_attributes.rb +1 -0
  32. data/lib/formtastic/i18n.rb +1 -0
  33. data/lib/formtastic/input_class_finder.rb +1 -0
  34. data/lib/formtastic/inputs/base/associations.rb +1 -0
  35. data/lib/formtastic/inputs/base/choices.rb +2 -1
  36. data/lib/formtastic/inputs/base/collections.rb +4 -1
  37. data/lib/formtastic/inputs/base/database.rb +5 -7
  38. data/lib/formtastic/inputs/base/datetime_pickerish.rb +1 -0
  39. data/lib/formtastic/inputs/base/errors.rb +3 -2
  40. data/lib/formtastic/inputs/base/fileish.rb +1 -0
  41. data/lib/formtastic/inputs/base/hints.rb +1 -0
  42. data/lib/formtastic/inputs/base/html.rb +2 -1
  43. data/lib/formtastic/inputs/base/labelling.rb +3 -2
  44. data/lib/formtastic/inputs/base/naming.rb +1 -0
  45. data/lib/formtastic/inputs/base/numeric.rb +1 -0
  46. data/lib/formtastic/inputs/base/options.rb +1 -0
  47. data/lib/formtastic/inputs/base/placeholder.rb +1 -0
  48. data/lib/formtastic/inputs/base/stringish.rb +1 -0
  49. data/lib/formtastic/inputs/base/timeish.rb +4 -3
  50. data/lib/formtastic/inputs/base/validations.rb +2 -1
  51. data/lib/formtastic/inputs/base/wrapping.rb +1 -0
  52. data/lib/formtastic/inputs/base.rb +3 -2
  53. data/lib/formtastic/inputs/boolean_input.rb +2 -1
  54. data/lib/formtastic/inputs/check_boxes_input.rb +2 -1
  55. data/lib/formtastic/inputs/color_input.rb +1 -0
  56. data/lib/formtastic/inputs/country_input.rb +1 -0
  57. data/lib/formtastic/inputs/datalist_input.rb +1 -0
  58. data/lib/formtastic/inputs/date_picker_input.rb +1 -0
  59. data/lib/formtastic/inputs/date_select_input.rb +1 -0
  60. data/lib/formtastic/inputs/datetime_picker_input.rb +1 -0
  61. data/lib/formtastic/inputs/datetime_select_input.rb +1 -0
  62. data/lib/formtastic/inputs/email_input.rb +1 -0
  63. data/lib/formtastic/inputs/file_input.rb +1 -0
  64. data/lib/formtastic/inputs/hidden_input.rb +3 -2
  65. data/lib/formtastic/inputs/number_input.rb +1 -0
  66. data/lib/formtastic/inputs/password_input.rb +1 -0
  67. data/lib/formtastic/inputs/phone_input.rb +1 -0
  68. data/lib/formtastic/inputs/radio_input.rb +1 -0
  69. data/lib/formtastic/inputs/range_input.rb +1 -0
  70. data/lib/formtastic/inputs/search_input.rb +1 -0
  71. data/lib/formtastic/inputs/select_input.rb +1 -0
  72. data/lib/formtastic/inputs/string_input.rb +1 -0
  73. data/lib/formtastic/inputs/text_input.rb +1 -0
  74. data/lib/formtastic/inputs/time_picker_input.rb +1 -0
  75. data/lib/formtastic/inputs/time_select_input.rb +1 -0
  76. data/lib/formtastic/inputs/time_zone_input.rb +1 -0
  77. data/lib/formtastic/inputs/url_input.rb +1 -0
  78. data/lib/formtastic/inputs.rb +1 -0
  79. data/lib/formtastic/localized_string.rb +1 -0
  80. data/lib/formtastic/localizer.rb +1 -0
  81. data/lib/formtastic/namespaced_class_finder.rb +7 -8
  82. data/lib/formtastic/version.rb +2 -1
  83. data/lib/formtastic.rb +1 -0
  84. data/lib/generators/formtastic/form/form_generator.rb +1 -0
  85. data/lib/generators/formtastic/input/input_generator.rb +1 -0
  86. data/lib/generators/formtastic/install/install_generator.rb +1 -0
  87. data/lib/generators/templates/formtastic.rb +1 -0
  88. data/script/integration-template.rb +2 -3
  89. data/spec/action_class_finder_spec.rb +1 -0
  90. data/spec/actions/button_action_spec.rb +17 -16
  91. data/spec/actions/generic_action_spec.rb +130 -129
  92. data/spec/actions/input_action_spec.rb +16 -15
  93. data/spec/actions/link_action_spec.rb +25 -24
  94. data/spec/builder/custom_builder_spec.rb +5 -4
  95. data/spec/builder/error_proc_spec.rb +2 -1
  96. data/spec/builder/semantic_fields_for_spec.rb +26 -25
  97. data/spec/fast_spec_helper.rb +1 -0
  98. data/spec/generators/formtastic/form/form_generator_spec.rb +8 -7
  99. data/spec/generators/formtastic/input/input_generator_spec.rb +1 -0
  100. data/spec/generators/formtastic/install/install_generator_spec.rb +1 -0
  101. data/spec/helpers/action_helper_spec.rb +15 -14
  102. data/spec/helpers/actions_helper_spec.rb +42 -41
  103. data/spec/helpers/form_helper_spec.rb +26 -19
  104. data/spec/helpers/input_helper_spec.rb +70 -69
  105. data/spec/helpers/inputs_helper_spec.rb +179 -179
  106. data/spec/helpers/reflection_helper_spec.rb +4 -3
  107. data/spec/helpers/semantic_errors_helper_spec.rb +4 -3
  108. data/spec/i18n_spec.rb +13 -12
  109. data/spec/input_class_finder_spec.rb +1 -0
  110. data/spec/inputs/base/collections_spec.rb +2 -0
  111. data/spec/inputs/base/validations_spec.rb +1 -0
  112. data/spec/inputs/boolean_input_spec.rb +66 -65
  113. data/spec/inputs/check_boxes_input_spec.rb +89 -88
  114. data/spec/inputs/color_input_spec.rb +7 -6
  115. data/spec/inputs/country_input_spec.rb +10 -9
  116. data/spec/inputs/custom_input_spec.rb +1 -0
  117. data/spec/inputs/datalist_input_spec.rb +2 -1
  118. data/spec/inputs/date_picker_input_spec.rb +109 -108
  119. data/spec/inputs/date_select_input_spec.rb +63 -62
  120. data/spec/inputs/datetime_picker_input_spec.rb +118 -117
  121. data/spec/inputs/datetime_select_input_spec.rb +72 -71
  122. data/spec/inputs/email_input_spec.rb +16 -15
  123. data/spec/inputs/file_input_spec.rb +17 -16
  124. data/spec/inputs/hidden_input_spec.rb +29 -28
  125. data/spec/inputs/include_blank_spec.rb +7 -6
  126. data/spec/inputs/label_spec.rb +25 -24
  127. data/spec/inputs/number_input_spec.rb +159 -158
  128. data/spec/inputs/password_input_spec.rb +16 -15
  129. data/spec/inputs/phone_input_spec.rb +16 -15
  130. data/spec/inputs/placeholder_spec.rb +17 -16
  131. data/spec/inputs/radio_input_spec.rb +58 -57
  132. data/spec/inputs/range_input_spec.rb +108 -107
  133. data/spec/inputs/readonly_spec.rb +5 -4
  134. data/spec/inputs/search_input_spec.rb +15 -14
  135. data/spec/inputs/select_input_spec.rb +144 -93
  136. data/spec/inputs/string_input_spec.rb +36 -35
  137. data/spec/inputs/text_input_spec.rb +32 -31
  138. data/spec/inputs/time_picker_input_spec.rb +110 -109
  139. data/spec/inputs/time_select_input_spec.rb +71 -70
  140. data/spec/inputs/time_zone_input_spec.rb +21 -20
  141. data/spec/inputs/url_input_spec.rb +16 -15
  142. data/spec/inputs/with_options_spec.rb +8 -7
  143. data/spec/localizer_spec.rb +1 -0
  144. data/spec/namespaced_class_finder_spec.rb +17 -5
  145. data/spec/schema.rb +1 -0
  146. data/spec/spec_helper.rb +8 -8
  147. data/spec/support/custom_macros.rb +64 -63
  148. data/spec/support/deprecation.rb +2 -1
  149. data/spec/support/shared_examples.rb +2 -1
  150. data/spec/support/specialized_class_finder_shared_example.rb +1 -0
  151. data/spec/support/test_environment.rb +1 -0
  152. metadata +29 -14
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module CustomMacros
4
5
 
@@ -10,67 +11,67 @@ module CustomMacros
10
11
 
11
12
  def it_should_have_input_wrapper_with_class(class_name)
12
13
  it "should have input wrapper with class '#{class_name}'" do
13
- expect(output_buffer).to have_tag("form li.#{class_name}")
14
+ expect(output_buffer.to_str).to have_tag("form li.#{class_name}")
14
15
  end
15
16
  end
16
17
 
17
18
  def it_should_have_input_wrapper_with_id(id_string)
18
19
  it "should have input wrapper with id '#{id_string}'" do
19
- expect(output_buffer).to have_tag("form li##{id_string}")
20
+ expect(output_buffer.to_str).to have_tag("form li##{id_string}")
20
21
  end
21
22
  end
22
23
 
23
24
  def it_should_not_have_a_label
24
25
  it "should not have a label" do
25
- expect(output_buffer).not_to have_tag("form li label")
26
+ expect(output_buffer.to_str).not_to have_tag("form li label")
26
27
  end
27
28
  end
28
29
 
29
30
  def it_should_have_a_nested_fieldset
30
31
  it "should have a nested_fieldset" do
31
- expect(output_buffer).to have_tag("form li fieldset")
32
+ expect(output_buffer.to_str).to have_tag("form li fieldset")
32
33
  end
33
34
  end
34
35
 
35
36
  def it_should_have_a_nested_fieldset_with_class(klass)
36
37
  it "should have a nested_fieldset with class #{klass}" do
37
- expect(output_buffer).to have_tag("form li fieldset.#{klass}")
38
+ expect(output_buffer.to_str).to have_tag("form li fieldset.#{klass}")
38
39
  end
39
40
  end
40
41
 
41
42
  def it_should_have_a_nested_ordered_list_with_class(klass)
42
43
  it "should have a nested fieldset with class #{klass}" do
43
- expect(output_buffer).to have_tag("form li ol.#{klass}")
44
+ expect(output_buffer.to_str).to have_tag("form li ol.#{klass}")
44
45
  end
45
46
  end
46
47
 
47
48
  def it_should_have_label_with_text(string_or_regex)
48
49
  it "should have a label with text '#{string_or_regex}'" do
49
- expect(output_buffer).to have_tag("form li label", :text => string_or_regex)
50
+ expect(output_buffer.to_str).to have_tag("form li label", :text => string_or_regex)
50
51
  end
51
52
  end
52
53
 
53
54
  def it_should_have_label_for(element_id)
54
55
  it "should have a label for ##{element_id}" do
55
- expect(output_buffer).to have_tag("form li label.label[@for='#{element_id}']")
56
+ expect(output_buffer.to_str).to have_tag("form li label.label[@for='#{element_id}']")
56
57
  end
57
58
  end
58
59
 
59
60
  def it_should_have_an_inline_label_for(element_id)
60
61
  it "should have a label for ##{element_id}" do
61
- expect(output_buffer).to have_tag("form li label[@for='#{element_id}']")
62
+ expect(output_buffer.to_str).to have_tag("form li label[@for='#{element_id}']")
62
63
  end
63
64
  end
64
65
 
65
66
  def it_should_have_input_with_id(element_id)
66
67
  it "should have an input with id '#{element_id}'" do
67
- expect(output_buffer).to have_tag("form li input##{element_id}")
68
+ expect(output_buffer.to_str).to have_tag("form li input##{element_id}")
68
69
  end
69
70
  end
70
71
 
71
72
  def it_should_have_select_with_id(element_id)
72
73
  it "should have a select box with id '#{element_id}'" do
73
- expect(output_buffer).to have_tag("form li select##{element_id}")
74
+ expect(output_buffer.to_str).to have_tag("form li select##{element_id}")
74
75
  end
75
76
  end
76
77
 
@@ -78,7 +79,7 @@ module CustomMacros
78
79
  def it_should_have_tag_with(type, attribute_value_hash)
79
80
  attribute_value_hash.each do |attribute, value|
80
81
  it "should have a #{type} box with #{attribute} '#{value}'" do
81
- expect(output_buffer).to have_tag("form li #{type}[@#{attribute}=\"#{value}\"]")
82
+ expect(output_buffer.to_str).to have_tag("form li #{type}[@#{attribute}=\"#{value}\"]")
82
83
  end
83
84
  end
84
85
  end
@@ -88,44 +89,44 @@ module CustomMacros
88
89
 
89
90
  def it_should_have_many_tags(type, count)
90
91
  it "should have #{count} #{type} tags" do
91
- expect(output_buffer).to have_tag("form li #{type}", count: count)
92
+ expect(output_buffer.to_str).to have_tag("form li #{type}", count: count)
92
93
  end
93
94
  end
94
95
 
95
96
  def it_should_have_input_with_type(input_type)
96
97
  it "should have a #{input_type} input" do
97
- expect(output_buffer).to have_tag("form li input[@type=\"#{input_type}\"]")
98
+ expect(output_buffer.to_str).to have_tag("form li input[@type=\"#{input_type}\"]")
98
99
  end
99
100
  end
100
101
 
101
102
  def it_should_have_input_with_name(name)
102
103
  it "should have an input named #{name}" do
103
- expect(output_buffer).to have_tag("form li input[@name=\"#{name}\"]")
104
+ expect(output_buffer.to_str).to have_tag("form li input[@name=\"#{name}\"]")
104
105
  end
105
106
  end
106
107
 
107
108
  def it_should_have_select_with_name(name)
108
109
  it "should have an input named #{name}" do
109
- expect(output_buffer).to have_tag("form li select[@name=\"#{name}\"]")
110
+ expect(output_buffer.to_str).to have_tag("form li select[@name=\"#{name}\"]")
110
111
  end
111
112
  end
112
113
 
113
114
  def it_should_have_textarea_with_name(name)
114
115
  it "should have an input named #{name}" do
115
- expect(output_buffer).to have_tag("form li textarea[@name=\"#{name}\"]")
116
+ expect(output_buffer.to_str).to have_tag("form li textarea[@name=\"#{name}\"]")
116
117
  end
117
118
  end
118
119
 
119
120
  def it_should_have_textarea_with_id(element_id)
120
121
  it "should have an input with id '#{element_id}'" do
121
- expect(output_buffer).to have_tag("form li textarea##{element_id}")
122
+ expect(output_buffer.to_str).to have_tag("form li textarea##{element_id}")
122
123
  end
123
124
  end
124
125
 
125
126
  def it_should_have_label_and_input_with_id(element_id)
126
127
  it "should have an input with id '#{element_id}'" do
127
- expect(output_buffer).to have_tag("form li input##{element_id}")
128
- expect(output_buffer).to have_tag("form li label[@for='#{element_id}']")
128
+ expect(output_buffer.to_str).to have_tag("form li input##{element_id}")
129
+ expect(output_buffer.to_str).to have_tag("form li label[@for='#{element_id}']")
129
130
  end
130
131
  end
131
132
 
@@ -135,7 +136,7 @@ module CustomMacros
135
136
  concat(semantic_form_for(@new_post) do |builder|
136
137
  concat(builder.input(:title, :as => as))
137
138
  end)
138
- expect(output_buffer).to have_tag("form li input[@size='#{Formtastic::FormBuilder.default_text_field_size}']")
139
+ expect(output_buffer.to_str).to have_tag("form li input[@size='#{Formtastic::FormBuilder.default_text_field_size}']")
139
140
  end
140
141
  end
141
142
  end
@@ -146,8 +147,8 @@ module CustomMacros
146
147
  concat(semantic_form_for(@new_post) do |builder|
147
148
  concat(builder.input(:title, :as => as))
148
149
  end)
149
- expect(output_buffer).to have_tag("form li input")
150
- expect(output_buffer).not_to have_tag("form li input[@size]")
150
+ expect(output_buffer.to_str).to have_tag("form li input")
151
+ expect(output_buffer.to_str).not_to have_tag("form li input[@size]")
151
152
  end
152
153
  end
153
154
  end
@@ -157,7 +158,7 @@ module CustomMacros
157
158
  concat(semantic_form_for(@new_post) do |builder|
158
159
  concat(builder.input(:title, :as => as, :input_html => { :class => 'myclass' }))
159
160
  end)
160
- expect(output_buffer).to have_tag("form li input.myclass")
161
+ expect(output_buffer.to_str).to have_tag("form li input.myclass")
161
162
  end
162
163
  end
163
164
 
@@ -166,14 +167,14 @@ module CustomMacros
166
167
  concat(semantic_form_for(@new_post) do |builder|
167
168
  concat(builder.input(:title, :as => as, :input_html => { :id => 'myid' }))
168
169
  end)
169
- expect(output_buffer).to have_tag('form li label[@for="myid"]')
170
+ expect(output_buffer.to_str).to have_tag('form li label[@for="myid"]')
170
171
  end
171
172
  end
172
173
 
173
174
  def it_should_have_maxlength_matching_column_limit
174
175
  it 'should have a maxlength matching column limit' do
175
176
  expect(@new_post.column_for_attribute(:title).limit).to eq(50)
176
- expect(output_buffer).to have_tag("form li input[@maxlength='50']")
177
+ expect(output_buffer.to_str).to have_tag("form li input[@maxlength='50']")
177
178
  end
178
179
  end
179
180
 
@@ -187,7 +188,7 @@ module CustomMacros
187
188
  concat(builder.input(:title, :as => as))
188
189
  end)
189
190
 
190
- expect(output_buffer).to have_tag("form li input[@size='#{column_limit_shorted_than_default}']")
191
+ expect(output_buffer.to_str).to have_tag("form li input[@size='#{column_limit_shorted_than_default}']")
191
192
  end
192
193
  end
193
194
 
@@ -207,14 +208,14 @@ module CustomMacros
207
208
  concat(semantic_form_for(@new_post) do |builder|
208
209
  concat(builder.input(:title, :as => type))
209
210
  end)
210
- expect(output_buffer).to have_tag('form li.error')
211
+ expect(output_buffer.to_str).to have_tag('form li.error')
211
212
  end
212
213
 
213
214
  it 'should not wrap the input with the Rails default error wrapping' do
214
215
  concat(semantic_form_for(@new_post) do |builder|
215
216
  concat(builder.input(:title, :as => type))
216
217
  end)
217
- expect(output_buffer).not_to have_tag('div.fieldWithErrors')
218
+ expect(output_buffer.to_str).not_to have_tag('div.fieldWithErrors')
218
219
  end
219
220
 
220
221
  it 'should render a paragraph for the errors' do
@@ -222,7 +223,7 @@ module CustomMacros
222
223
  concat(semantic_form_for(@new_post) do |builder|
223
224
  concat(builder.input(:title, :as => type))
224
225
  end)
225
- expect(output_buffer).to have_tag('form li.error p.inline-errors')
226
+ expect(output_buffer.to_str).to have_tag('form li.error p.inline-errors')
226
227
  end
227
228
 
228
229
  it 'should not display an error list' do
@@ -230,7 +231,7 @@ module CustomMacros
230
231
  concat(semantic_form_for(@new_post) do |builder|
231
232
  concat(builder.input(:title, :as => type))
232
233
  end)
233
- expect(output_buffer).to have_tag('form li.error ul.errors')
234
+ expect(output_buffer.to_str).to have_tag('form li.error ul.errors')
234
235
  end
235
236
  end
236
237
 
@@ -242,15 +243,15 @@ module CustomMacros
242
243
  end
243
244
 
244
245
  it 'should not apply an errors class to the list item' do
245
- expect(output_buffer).not_to have_tag('form li.error')
246
+ expect(output_buffer.to_str).not_to have_tag('form li.error')
246
247
  end
247
248
 
248
249
  it 'should not render a paragraph for the errors' do
249
- expect(output_buffer).not_to have_tag('form li.error p.inline-errors')
250
+ expect(output_buffer.to_str).not_to have_tag('form li.error p.inline-errors')
250
251
  end
251
252
 
252
253
  it 'should not display an error list' do
253
- expect(output_buffer).not_to have_tag('form li.error ul.errors')
254
+ expect(output_buffer.to_str).not_to have_tag('form li.error ul.errors')
254
255
  end
255
256
  end
256
257
 
@@ -262,15 +263,15 @@ module CustomMacros
262
263
  end
263
264
 
264
265
  it 'should not apply an errors class to the list item' do
265
- expect(output_buffer).not_to have_tag('form li.error')
266
+ expect(output_buffer.to_str).not_to have_tag('form li.error')
266
267
  end
267
268
 
268
269
  it 'should not render a paragraph for the errors' do
269
- expect(output_buffer).not_to have_tag('form li.error p.inline-errors')
270
+ expect(output_buffer.to_str).not_to have_tag('form li.error p.inline-errors')
270
271
  end
271
272
 
272
273
  it 'should not display an error list' do
273
- expect(output_buffer).not_to have_tag('form li.error ul.errors')
274
+ expect(output_buffer.to_str).not_to have_tag('form li.error ul.errors')
274
275
  end
275
276
  end
276
277
  end
@@ -289,14 +290,14 @@ module CustomMacros
289
290
 
290
291
  before do
291
292
  @authors = ([::Author.all] * 2).flatten
292
- output_buffer.replace ''
293
+ @output_buffer = ActionView::OutputBuffer.new ''
293
294
  end
294
295
 
295
296
  it 'should use the provided collection' do
296
297
  concat(semantic_form_for(@new_post) do |builder|
297
298
  concat(builder.input(:author, :as => as, :collection => @authors))
298
299
  end)
299
- expect(output_buffer).to have_tag("form li.#{as} #{countable}", :count => @authors.size + (as == :select ? 1 : 0))
300
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}", :count => @authors.size + (as == :select ? 1 : 0))
300
301
  end
301
302
 
302
303
  describe 'and the :collection is an array of strings' do
@@ -310,8 +311,8 @@ module CustomMacros
310
311
  end)
311
312
 
312
313
  @categories.each do |value|
313
- expect(output_buffer).to have_tag("form li.#{as}", :text => /#{value}/)
314
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
314
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{value}/)
315
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
315
316
  end
316
317
  end
317
318
 
@@ -324,10 +325,10 @@ module CustomMacros
324
325
  end
325
326
  concat(fields)
326
327
  end)
327
- expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_category_name_general']")
328
- expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_category_name_design']")
329
- expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_category_name_development']")
330
- expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_category_name_quasi-serious_inventions']")
328
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_general']")
329
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_design']")
330
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_development']")
331
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_category_name_quasi-serious_inventions']")
331
332
  end
332
333
  end
333
334
  end
@@ -343,8 +344,8 @@ module CustomMacros
343
344
  end)
344
345
 
345
346
  @categories.each do |label, value|
346
- expect(output_buffer).to have_tag("form li.#{as}", :text => /#{label}/)
347
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
347
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{label}/)
348
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
348
349
  end
349
350
  end
350
351
  end
@@ -361,9 +362,9 @@ module CustomMacros
361
362
 
362
363
  @categories.each do |text, value|
363
364
  label = as == :select ? :option : :label
364
- expect(output_buffer).to have_tag("form li.#{as} #{label}", :text => /#{text}/i)
365
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{value.to_s}']")
366
- expect(output_buffer).to have_tag("form li.#{as} #{countable}#post_category_name_#{value.to_s}") if as == :radio
365
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{label}", :text => /#{text}/i)
366
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value.to_s}']")
367
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}#post_category_name_#{value.to_s}") if as == :radio
367
368
  end
368
369
  end
369
370
  end
@@ -379,8 +380,8 @@ module CustomMacros
379
380
  concat(builder.input(:category_name, :as => as, :collection => @choices))
380
381
  end)
381
382
 
382
- expect(output_buffer).to have_tag("form li.#{as} #{countable}#post_category_name_true")
383
- expect(output_buffer).to have_tag("form li.#{as} #{countable}#post_category_name_false")
383
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}#post_category_name_true")
384
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}#post_category_name_false")
384
385
  end
385
386
  end
386
387
  end
@@ -397,8 +398,8 @@ module CustomMacros
397
398
 
398
399
  @categories.each do |value|
399
400
  label = as == :select ? :option : :label
400
- expect(output_buffer).to have_tag("form li.#{as} #{label}", :text => /#{value}/i)
401
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{value.to_s}']")
401
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{label}", :text => /#{value}/i)
402
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value.to_s}']")
402
403
  end
403
404
  end
404
405
  end
@@ -414,8 +415,8 @@ module CustomMacros
414
415
  end)
415
416
 
416
417
  @categories.each do |label, value|
417
- expect(output_buffer).to have_tag("form li.#{as}", :text => /#{label}/)
418
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
418
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{label}/)
419
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{value}']")
419
420
  end
420
421
  end
421
422
 
@@ -434,7 +435,7 @@ module CustomMacros
434
435
 
435
436
  it 'should have options with text content from the specified method' do
436
437
  ::Author.all.each do |author|
437
- expect(output_buffer).to have_tag("form li.#{as}", :text => /#{author.login}/)
438
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{author.login}/)
438
439
  end
439
440
  end
440
441
  end
@@ -450,7 +451,7 @@ module CustomMacros
450
451
 
451
452
  it 'should have options with the proc applied to each' do
452
453
  ::Author.all.each do |author|
453
- expect(output_buffer).to have_tag("form li.#{as}", :text => /#{author.login.reverse}/)
454
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{author.login.reverse}/)
454
455
  end
455
456
  end
456
457
  end
@@ -469,7 +470,7 @@ module CustomMacros
469
470
 
470
471
  it 'should have options with the proc applied to each' do
471
472
  ::Author.all.each do |author|
472
- expect(output_buffer).to have_tag("form li.#{as}", :text => /#{author.login.reverse}/)
473
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /#{author.login.reverse}/)
473
474
  end
474
475
  end
475
476
  end
@@ -492,7 +493,7 @@ module CustomMacros
492
493
 
493
494
  it "should render the options with #{label_method} as the label" do
494
495
  ::Author.all.each do |author|
495
- expect(output_buffer).to have_tag("form li.#{as}", :text => /The Label Text/)
496
+ expect(output_buffer.to_str).to have_tag("form li.#{as}", :text => /The Label Text/)
496
497
  end
497
498
  end
498
499
  end
@@ -513,7 +514,7 @@ module CustomMacros
513
514
 
514
515
  it 'should have options with values from specified method' do
515
516
  ::Author.all.each do |author|
516
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{author.login}']")
517
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{author.login}']")
517
518
  end
518
519
  end
519
520
  end
@@ -529,7 +530,7 @@ module CustomMacros
529
530
 
530
531
  it 'should have options with the proc applied to each value' do
531
532
  ::Author.all.each do |author|
532
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{author.login.reverse}']")
533
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{author.login.reverse}']")
533
534
  end
534
535
  end
535
536
  end
@@ -548,7 +549,7 @@ module CustomMacros
548
549
 
549
550
  it 'should have options with the proc applied to each value' do
550
551
  ::Author.all.each do |author|
551
- expect(output_buffer).to have_tag("form li.#{as} #{countable}[@value='#{author.login.reverse}']")
552
+ expect(output_buffer.to_str).to have_tag("form li.#{as} #{countable}[@value='#{author.login.reverse}']")
552
553
  end
553
554
  end
554
555
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  def with_deprecation_silenced(&block)
2
- ::ActiveSupport::Deprecation.silence do
3
+ ::Formtastic::Deprecation.silence do
3
4
  yield
4
5
  end
5
6
  end
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  RSpec.shared_context 'form builder' do
2
3
  include FormtasticSpecHelper
3
4
 
4
5
  before do
5
- @output_buffer = ''
6
+ @output_buffer = ActionView::OutputBuffer.new ''
6
7
  mock_everything
7
8
  end
8
9
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  #
3
4
  RSpec.shared_examples 'Specialized Class Finder' do
4
5
  let(:builder) { Formtastic::FormBuilder.allocate }
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'rspec/core'
3
4
 
4
5
  require 'rspec-dom-testing'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formtastic
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin French
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-01 00:00:00.000000000 Z
11
+ date: 2023-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0
19
+ version: 6.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.0
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec-rails
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.4'
33
+ version: '4.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3.4'
40
+ version: '4.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec-dom-testing
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-mocks
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.12.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.12.2
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: yard
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -134,9 +148,10 @@ files:
134
148
  - app/assets/stylesheets/formtastic_ie7.css
135
149
  - bin/appraisal
136
150
  - formtastic.gemspec
137
- - gemfiles/rails_5.2/Gemfile
138
151
  - gemfiles/rails_6.0/Gemfile
139
152
  - gemfiles/rails_6.1/Gemfile
153
+ - gemfiles/rails_7.0/Gemfile
154
+ - gemfiles/rails_7.1/Gemfile
140
155
  - gemfiles/rails_edge/Gemfile
141
156
  - lib/formtastic.rb
142
157
  - lib/formtastic/action_class_finder.rb
@@ -294,7 +309,7 @@ homepage: http://github.com/formtastic/formtastic
294
309
  licenses:
295
310
  - MIT
296
311
  metadata: {}
297
- post_install_message:
312
+ post_install_message:
298
313
  rdoc_options:
299
314
  - "--charset=UTF-8"
300
315
  require_paths:
@@ -303,15 +318,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
303
318
  requirements:
304
319
  - - ">="
305
320
  - !ruby/object:Gem::Version
306
- version: 2.4.0
321
+ version: 2.6.0
307
322
  required_rubygems_version: !ruby/object:Gem::Requirement
308
323
  requirements:
309
324
  - - ">="
310
325
  - !ruby/object:Gem::Version
311
326
  version: '0'
312
327
  requirements: []
313
- rubygems_version: 3.1.2
314
- signing_key:
328
+ rubygems_version: 3.3.26
329
+ signing_key:
315
330
  specification_version: 4
316
331
  summary: A Rails form builder plugin/gem with semantically rich and accessible markup
317
332
  test_files: