formtastic 4.0.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe 'FormHelper' do
@@ -6,7 +7,7 @@ RSpec.describe 'FormHelper' do
6
7
  include FormtasticSpecHelper
7
8
 
8
9
  before do
9
- @output_buffer = ''
10
+ @output_buffer = ActionView::OutputBuffer.new ''
10
11
  mock_everything
11
12
  end
12
13
 
@@ -21,14 +22,14 @@ RSpec.describe 'FormHelper' do
21
22
  it 'adds a class of "formtastic" to the generated form' do
22
23
  concat(semantic_form_for(@new_post, :url => '/hello') do |builder|
23
24
  end)
24
- expect(output_buffer).to have_tag("form.formtastic")
25
+ expect(output_buffer.to_str).to have_tag("form.formtastic")
25
26
  end
26
27
 
27
28
  it 'does not add "novalidate" attribute to the generated form when configured to do so' do
28
29
  with_config :perform_browser_validations, true do
29
30
  concat(semantic_form_for(@new_post, :url => '/hello') do |builder|
30
31
  end)
31
- expect(output_buffer).not_to have_tag("form[@novalidate]")
32
+ expect(output_buffer.to_str).not_to have_tag("form[@novalidate]")
32
33
  end
33
34
  end
34
35
 
@@ -36,7 +37,7 @@ RSpec.describe 'FormHelper' do
36
37
  with_config :perform_browser_validations, false do
37
38
  concat(semantic_form_for(@new_post, :url => '/hello') do |builder|
38
39
  end)
39
- expect(output_buffer).to have_tag("form[@novalidate]")
40
+ expect(output_buffer.to_str).to have_tag("form[@novalidate]")
40
41
  end
41
42
  end
42
43
 
@@ -44,7 +45,7 @@ RSpec.describe 'FormHelper' do
44
45
  with_config :perform_browser_validations, false do
45
46
  concat(semantic_form_for(@new_post, :url => '/hello', :html => { :novalidate => true }) do |builder|
46
47
  end)
47
- expect(output_buffer).to have_tag("form[@novalidate]")
48
+ expect(output_buffer.to_str).to have_tag("form[@novalidate]")
48
49
  end
49
50
  end
50
51
 
@@ -52,7 +53,7 @@ RSpec.describe 'FormHelper' do
52
53
  with_config :perform_browser_validations, true do
53
54
  concat(semantic_form_for(@new_post, :url => '/hello', :html => { :novalidate => false }) do |builder|
54
55
  end)
55
- expect(output_buffer).not_to have_tag("form[@novalidate]")
56
+ expect(output_buffer.to_str).not_to have_tag("form[@novalidate]")
56
57
  end
57
58
  end
58
59
 
@@ -60,57 +61,57 @@ RSpec.describe 'FormHelper' do
60
61
  Formtastic::Helpers::FormHelper.default_form_class = 'xyz'
61
62
  concat(semantic_form_for(::Post.new, :as => :post, :url => '/hello') do |builder|
62
63
  end)
63
- expect(output_buffer).to have_tag("form.xyz")
64
+ expect(output_buffer.to_str).to have_tag("form.xyz")
64
65
  end
65
66
 
66
67
  it 'omits the leading spaces from the classes in the generated form when the default class is nil' do
67
68
  Formtastic::Helpers::FormHelper.default_form_class = nil
68
69
  concat(semantic_form_for(::Post.new, :as => :post, :url => '/hello') do |builder|
69
70
  end)
70
- expect(output_buffer).to have_tag("form[class='post']")
71
+ expect(output_buffer.to_str).to have_tag("form[class='post']")
71
72
  end
72
73
 
73
74
  it 'adds class matching the object name to the generated form when a symbol is provided' do
74
75
  concat(semantic_form_for(@new_post, :url => '/hello') do |builder|
75
76
  end)
76
- expect(output_buffer).to have_tag("form.post")
77
+ expect(output_buffer.to_str).to have_tag("form.post")
77
78
 
78
79
  concat(semantic_form_for(:project, :url => '/hello') do |builder|
79
80
  end)
80
- expect(output_buffer).to have_tag("form.project")
81
+ expect(output_buffer.to_str).to have_tag("form.project")
81
82
  end
82
83
 
83
84
  it 'adds class matching the :as option when provided' do
84
85
  concat(semantic_form_for(@new_post, :as => :message, :url => '/hello') do |builder|
85
86
  end)
86
- expect(output_buffer).to have_tag("form.message")
87
+ expect(output_buffer.to_str).to have_tag("form.message")
87
88
 
88
89
  concat(semantic_form_for([:admins, @new_post], :as => :message, :url => '/hello') do |builder|
89
90
  end)
90
- expect(output_buffer).to have_tag("form.message")
91
+ expect(output_buffer.to_str).to have_tag("form.message")
91
92
  end
92
93
 
93
94
  it 'adds class matching the object\'s class to the generated form when an object is provided' do
94
95
  concat(semantic_form_for(@new_post) do |builder|
95
96
  end)
96
- expect(output_buffer).to have_tag("form.post")
97
+ expect(output_buffer.to_str).to have_tag("form.post")
97
98
  end
98
99
 
99
100
  it 'adds a namespaced class to the generated form' do
100
101
  concat(semantic_form_for(::Namespaced::Post.new, :url => '/hello') do |builder|
101
102
  end)
102
- expect(output_buffer).to have_tag("form.namespaced_post")
103
+ expect(output_buffer.to_str).to have_tag("form.namespaced_post")
103
104
  end
104
105
 
105
106
  it 'adds a customized class to the generated form' do
106
107
  Formtastic::Helpers::FormHelper.default_form_model_class_proc = lambda { |model_class_name| "#{model_class_name}_form" }
107
108
  concat(semantic_form_for(@new_post, :url => '/hello') do |builder|
108
109
  end)
109
- expect(output_buffer).to have_tag("form.post_form")
110
+ expect(output_buffer.to_str).to have_tag("form.post_form")
110
111
 
111
112
  concat(semantic_form_for(:project, :url => '/hello') do |builder|
112
113
  end)
113
- expect(output_buffer).to have_tag("form.project_form")
114
+ expect(output_buffer.to_str).to have_tag("form.project_form")
114
115
  end
115
116
 
116
117
  describe 'allows :html options' do
@@ -120,15 +121,15 @@ RSpec.describe 'FormHelper' do
120
121
  end
121
122
 
122
123
  it 'to add a id of "something-special" to generated form' do
123
- expect(output_buffer).to have_tag("form#something-special")
124
+ expect(output_buffer.to_str).to have_tag("form#something-special")
124
125
  end
125
126
 
126
127
  it 'to add a class of "something-extra" to generated form' do
127
- expect(output_buffer).to have_tag("form.something-extra")
128
+ expect(output_buffer.to_str).to have_tag("form.something-extra")
128
129
  end
129
130
 
130
131
  it 'to add enctype="multipart/form-data"' do
131
- expect(output_buffer).to have_tag('form[@enctype="multipart/form-data"]')
132
+ expect(output_buffer.to_str).to have_tag('form[@enctype="multipart/form-data"]')
132
133
  end
133
134
  end
134
135
 
@@ -154,6 +155,12 @@ RSpec.describe 'FormHelper' do
154
155
  end
155
156
 
156
157
  describe 'ActionView::Base.field_error_proc' do
158
+ around do |ex|
159
+ error_proc = Formtastic::Helpers::FormHelper.formtastic_field_error_proc
160
+ ex.run
161
+ Formtastic::Helpers::FormHelper.formtastic_field_error_proc = error_proc
162
+ end
163
+
157
164
  it 'is set to no-op wrapper by default' do
158
165
  semantic_form_for(@new_post, :url => '/hello') do |builder|
159
166
  expect(::ActionView::Base.field_error_proc.call("html", nil)).to eq("html")
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe 'with input class finder' do
@@ -29,8 +30,8 @@ RSpec.describe 'with input class finder' do
29
30
  concat(semantic_form_for(@new_post) do |builder|
30
31
  concat(builder.input(:title, :required => true))
31
32
  end)
32
- expect(output_buffer).not_to have_tag('form li.optional')
33
- expect(output_buffer).to have_tag('form li.required')
33
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
34
+ expect(output_buffer.to_str).to have_tag('form li.required')
34
35
  end
35
36
  end
36
37
 
@@ -39,7 +40,7 @@ RSpec.describe 'with input class finder' do
39
40
  concat(semantic_form_for(@new_post) do |builder|
40
41
  concat(builder.input(:title, :required => true))
41
42
  end)
42
- expect(output_buffer).to have_tag('form li.required label', :text => /required yo/)
43
+ expect(output_buffer.to_str).to have_tag('form li.required label', :text => /required yo/)
43
44
  end
44
45
  end
45
46
  end
@@ -59,8 +60,8 @@ RSpec.describe 'with input class finder' do
59
60
  concat(semantic_form_for(@new_post) do |builder|
60
61
  concat(builder.input(:title, :required => false))
61
62
  end)
62
- expect(output_buffer).not_to have_tag('form li.required')
63
- expect(output_buffer).to have_tag('form li.optional')
63
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
64
+ expect(output_buffer.to_str).to have_tag('form li.optional')
64
65
  end
65
66
 
66
67
  it 'should set and "optional" class also when there is presence validator' do
@@ -70,15 +71,15 @@ RSpec.describe 'with input class finder' do
70
71
  concat(semantic_form_for(@new_post) do |builder|
71
72
  concat(builder.input(:title, :required => false))
72
73
  end)
73
- expect(output_buffer).not_to have_tag('form li.required')
74
- expect(output_buffer).to have_tag('form li.optional')
74
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
75
+ expect(output_buffer.to_str).to have_tag('form li.optional')
75
76
  end
76
77
 
77
78
  it 'should append the "optional" string to the label' do
78
79
  concat(semantic_form_for(@new_post) do |builder|
79
80
  concat(builder.input(:title, :required => false))
80
81
  end)
81
- expect(output_buffer).to have_tag('form li.optional label', :text => /#{@string}$/)
82
+ expect(output_buffer.to_str).to have_tag('form li.optional label', :text => /#{@string}$/)
82
83
  end
83
84
 
84
85
  end
@@ -94,8 +95,8 @@ RSpec.describe 'with input class finder' do
94
95
  concat(semantic_form_for(:project, :url => 'http://test.host/') do |builder|
95
96
  concat(builder.input(:title))
96
97
  end)
97
- expect(output_buffer).not_to have_tag('form li.required')
98
- expect(output_buffer).to have_tag('form li.optional')
98
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
99
+ expect(output_buffer.to_str).to have_tag('form li.optional')
99
100
 
100
101
  Formtastic::FormBuilder.all_fields_required_by_default = true
101
102
  end
@@ -125,8 +126,8 @@ RSpec.describe 'with input class finder' do
125
126
  concat(builder.input(:title))
126
127
  concat(builder.input(:body))
127
128
  end)
128
- expect(output_buffer).to have_tag('form li.required')
129
- expect(output_buffer).not_to have_tag('form li.optional')
129
+ expect(output_buffer.to_str).to have_tag('form li.required')
130
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
130
131
  end
131
132
 
132
133
  it 'should be required when there is :on => :create option on create' do
@@ -137,8 +138,8 @@ RSpec.describe 'with input class finder' do
137
138
  concat(semantic_form_for(@new_post) do |builder|
138
139
  concat(builder.input(:title))
139
140
  end)
140
- expect(output_buffer).to have_tag('form li.required')
141
- expect(output_buffer).not_to have_tag('form li.optional')
141
+ expect(output_buffer.to_str).to have_tag('form li.required')
142
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
142
143
  end
143
144
  end
144
145
 
@@ -150,8 +151,8 @@ RSpec.describe 'with input class finder' do
150
151
  concat(semantic_form_for(@new_post) do |builder|
151
152
  concat(builder.input(:title))
152
153
  end)
153
- expect(output_buffer).to have_tag('form li.required')
154
- expect(output_buffer).not_to have_tag('form li.optional')
154
+ expect(output_buffer.to_str).to have_tag('form li.required')
155
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
155
156
  end
156
157
  end
157
158
 
@@ -163,8 +164,8 @@ RSpec.describe 'with input class finder' do
163
164
  concat(semantic_form_for(@new_post) do |builder|
164
165
  concat(builder.input(:title))
165
166
  end)
166
- expect(output_buffer).to have_tag('form li.required')
167
- expect(output_buffer).not_to have_tag('form li.optional')
167
+ expect(output_buffer.to_str).to have_tag('form li.required')
168
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
168
169
  end
169
170
  end
170
171
 
@@ -176,8 +177,8 @@ RSpec.describe 'with input class finder' do
176
177
  concat(semantic_form_for(@new_post) do |builder|
177
178
  concat(builder.input(:title))
178
179
  end)
179
- expect(output_buffer).to have_tag('form li.required')
180
- expect(output_buffer).not_to have_tag('form li.optional')
180
+ expect(output_buffer.to_str).to have_tag('form li.required')
181
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
181
182
  end
182
183
  end
183
184
 
@@ -189,8 +190,8 @@ RSpec.describe 'with input class finder' do
189
190
  concat(semantic_form_for(@fred) do |builder|
190
191
  concat(builder.input(:login))
191
192
  end)
192
- expect(output_buffer).to have_tag('form li.required')
193
- expect(output_buffer).not_to have_tag('form li.optional')
193
+ expect(output_buffer.to_str).to have_tag('form li.required')
194
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
194
195
  end
195
196
  end
196
197
 
@@ -202,8 +203,8 @@ RSpec.describe 'with input class finder' do
202
203
  concat(semantic_form_for(@fred) do |builder|
203
204
  concat(builder.input(:login))
204
205
  end)
205
- expect(output_buffer).to have_tag('form li.required')
206
- expect(output_buffer).not_to have_tag('form li.optional')
206
+ expect(output_buffer.to_str).to have_tag('form li.required')
207
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
207
208
  end
208
209
  end
209
210
 
@@ -214,8 +215,8 @@ RSpec.describe 'with input class finder' do
214
215
  concat(semantic_form_for(@fred) do |builder|
215
216
  concat(builder.input(:login))
216
217
  end)
217
- expect(output_buffer).not_to have_tag('form li.required')
218
- expect(output_buffer).to have_tag('form li.optional')
218
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
219
+ expect(output_buffer.to_str).to have_tag('form li.optional')
219
220
  end
220
221
 
221
222
  it 'should not be required when there is :create option in validation contexts array on update' do
@@ -225,8 +226,8 @@ RSpec.describe 'with input class finder' do
225
226
  concat(semantic_form_for(@fred) do |builder|
226
227
  concat(builder.input(:login))
227
228
  end)
228
- expect(output_buffer).not_to have_tag('form li.required')
229
- expect(output_buffer).to have_tag('form li.optional')
229
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
230
+ expect(output_buffer.to_str).to have_tag('form li.optional')
230
231
  end
231
232
 
232
233
  it 'should not be required when there is :on => :update option on create' do
@@ -236,8 +237,8 @@ RSpec.describe 'with input class finder' do
236
237
  concat(semantic_form_for(@new_post) do |builder|
237
238
  concat(builder.input(:title))
238
239
  end)
239
- expect(output_buffer).not_to have_tag('form li.required')
240
- expect(output_buffer).to have_tag('form li.optional')
240
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
241
+ expect(output_buffer.to_str).to have_tag('form li.optional')
241
242
  end
242
243
 
243
244
  it 'should not be required when there is :update option in validation contexts array on create' do
@@ -247,8 +248,8 @@ RSpec.describe 'with input class finder' do
247
248
  concat(semantic_form_for(@new_post) do |builder|
248
249
  concat(builder.input(:title))
249
250
  end)
250
- expect(output_buffer).not_to have_tag('form li.required')
251
- expect(output_buffer).to have_tag('form li.optional')
251
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
252
+ expect(output_buffer.to_str).to have_tag('form li.optional')
252
253
  end
253
254
 
254
255
  it 'should be not be required if the optional :if condition is not satisifed' do
@@ -353,11 +354,11 @@ RSpec.describe 'with input class finder' do
353
354
  end)
354
355
 
355
356
  if options[:required]
356
- expect(output_buffer).not_to have_tag('form li.optional')
357
- expect(output_buffer).to have_tag('form li.required')
357
+ expect(output_buffer.to_str).not_to have_tag('form li.optional')
358
+ expect(output_buffer.to_str).to have_tag('form li.required')
358
359
  else
359
- expect(output_buffer).to have_tag('form li.optional')
360
- expect(output_buffer).not_to have_tag('form li.required')
360
+ expect(output_buffer.to_str).to have_tag('form li.optional')
361
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
361
362
  end
362
363
  end
363
364
 
@@ -381,8 +382,8 @@ RSpec.describe 'with input class finder' do
381
382
  concat(semantic_form_for(@new_post) do |builder|
382
383
  concat(builder.input(:title))
383
384
  end)
384
- expect(output_buffer).not_to have_tag('form li.required')
385
- expect(output_buffer).to have_tag('form li.optional')
385
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
386
+ expect(output_buffer.to_str).to have_tag('form li.optional')
386
387
  end
387
388
  end
388
389
 
@@ -397,8 +398,8 @@ RSpec.describe 'with input class finder' do
397
398
  concat(semantic_form_for(@new_post) do |builder|
398
399
  concat(builder.input(:title))
399
400
  end)
400
- expect(output_buffer).not_to have_tag('form li.required')
401
- expect(output_buffer).to have_tag('form li.optional')
401
+ expect(output_buffer.to_str).not_to have_tag('form li.required')
402
+ expect(output_buffer.to_str).to have_tag('form li.optional')
402
403
 
403
404
  Formtastic::FormBuilder.all_fields_required_by_default = true
404
405
  end
@@ -417,7 +418,7 @@ RSpec.describe 'with input class finder' do
417
418
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
418
419
  concat(builder.input(:anything))
419
420
  end)
420
- expect(output_buffer).to have_tag('form li.string')
421
+ expect(output_buffer.to_str).to have_tag('form li.string')
421
422
  end
422
423
 
423
424
  it 'should default to password for forms without objects if column is password' do
@@ -426,7 +427,7 @@ RSpec.describe 'with input class finder' do
426
427
  concat(builder.input(:password_confirmation))
427
428
  concat(builder.input(:confirm_password))
428
429
  end)
429
- expect(output_buffer).to have_tag('form li.password', :count => 3)
430
+ expect(output_buffer.to_str).to have_tag('form li.password', :count => 3)
430
431
  end
431
432
 
432
433
  it 'should default to a string for methods on objects that don\'t respond to "column_for_attribute"' do
@@ -598,21 +599,21 @@ RSpec.describe 'with input class finder' do
598
599
  concat(semantic_form_for(@new_post) do |builder|
599
600
  concat(builder.input(:title, :label => "Kustom"))
600
601
  end)
601
- expect(output_buffer).to have_tag("form li label", :text => /Kustom/)
602
+ expect(output_buffer.to_str).to have_tag("form li label", :text => /Kustom/)
602
603
  end
603
604
 
604
605
  it 'should not generate a label if false' do
605
606
  concat(semantic_form_for(@new_post) do |builder|
606
607
  concat(builder.input(:title, :label => false))
607
608
  end)
608
- expect(output_buffer).not_to have_tag("form li label")
609
+ expect(output_buffer.to_str).not_to have_tag("form li label")
609
610
  end
610
611
 
611
612
  it 'should be dupped if frozen' do
612
613
  concat(semantic_form_for(@new_post) do |builder|
613
614
  concat(builder.input(:title, :label => "Kustom".freeze))
614
615
  end)
615
- expect(output_buffer).to have_tag("form li label", :text => /Kustom/)
616
+ expect(output_buffer.to_str).to have_tag("form li label", :text => /Kustom/)
616
617
  end
617
618
  end
618
619
 
@@ -634,7 +635,7 @@ RSpec.describe 'with input class finder' do
634
635
  concat(semantic_form_for(@new_post) do |builder|
635
636
  concat(builder.input(:meta_description))
636
637
  end)
637
- expect(output_buffer).to have_tag('form li label', :text => /Localized title/)
638
+ expect(output_buffer.to_str).to have_tag('form li label', :text => /Localized title/)
638
639
  end
639
640
  end
640
641
  end
@@ -649,7 +650,7 @@ RSpec.describe 'with input class finder' do
649
650
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
650
651
  concat(builder.input(:meta_description))
651
652
  end)
652
- expect(output_buffer).to have_tag("form li label", :text => /#{'meta_description'.humanize}/)
653
+ expect(output_buffer.to_str).to have_tag("form li label", :text => /#{'meta_description'.humanize}/)
653
654
  end
654
655
  end
655
656
  end
@@ -662,7 +663,7 @@ RSpec.describe 'with input class finder' do
662
663
  concat(semantic_form_for(@new_post) do |builder|
663
664
  concat(builder.input(:meta_description))
664
665
  end)
665
- expect(output_buffer).to have_tag("form li label", :text => /#{'meta_description'.humanize}/)
666
+ expect(output_buffer.to_str).to have_tag("form li label", :text => /#{'meta_description'.humanize}/)
666
667
  end
667
668
  end
668
669
 
@@ -674,7 +675,7 @@ RSpec.describe 'with input class finder' do
674
675
  concat(semantic_form_for(@new_post) do |builder|
675
676
  concat(builder.input(:meta_description))
676
677
  end)
677
- expect(output_buffer).to have_tag("form li label", :text => /#{'meta_description'.capitalize}/)
678
+ expect(output_buffer.to_str).to have_tag("form li label", :text => /#{'meta_description'.capitalize}/)
678
679
  end
679
680
  end
680
681
  end
@@ -703,7 +704,7 @@ RSpec.describe 'with input class finder' do
703
704
  concat(builder.input(:title, :label => true))
704
705
  concat(builder.input(:published, :as => :boolean, :label => true))
705
706
  end)
706
- expect(output_buffer).to have_tag('form li label', :text => Regexp.new('^' + @localized_label_text))
707
+ expect(output_buffer.to_str).to have_tag('form li label', :text => Regexp.new('^' + @localized_label_text))
707
708
  end
708
709
  end
709
710
 
@@ -722,7 +723,7 @@ RSpec.describe 'with input class finder' do
722
723
  concat(builder.input(:title, :label => true))
723
724
  concat(builder.input(:published, :as => :boolean, :label => true))
724
725
  end)
725
- expect(output_buffer).to have_tag('form li label', :text => Regexp.new('^' + @default_localized_label_text))
726
+ expect(output_buffer.to_str).to have_tag('form li label', :text => Regexp.new('^' + @default_localized_label_text))
726
727
  end
727
728
  end
728
729
  end
@@ -743,7 +744,7 @@ RSpec.describe 'with input class finder' do
743
744
  concat(semantic_form_for(@new_post) do |builder|
744
745
  concat(builder.input(:title, :hint => hint_text))
745
746
  end)
746
- expect(output_buffer).to have_tag("form li p.inline-hints", :text => hint_text)
747
+ expect(output_buffer.to_str).to have_tag("form li p.inline-hints", :text => hint_text)
747
748
  end
748
749
 
749
750
  it 'should have a custom hint class defaulted for all forms' do
@@ -752,7 +753,7 @@ RSpec.describe 'with input class finder' do
752
753
  concat(semantic_form_for(@new_post) do |builder|
753
754
  concat(builder.input(:title, :hint => hint_text))
754
755
  end)
755
- expect(output_buffer).to have_tag("form li p.custom-hint-class", :text => hint_text)
756
+ expect(output_buffer.to_str).to have_tag("form li p.custom-hint-class", :text => hint_text)
756
757
  end
757
758
  end
758
759
 
@@ -787,7 +788,7 @@ RSpec.describe 'with input class finder' do
787
788
  concat(semantic_form_for(@new_post) do |builder|
788
789
  concat(builder.input(:title, :hint => true))
789
790
  end)
790
- expect(output_buffer).to have_tag('form li p.inline-hints', :text => @localized_hint_text)
791
+ expect(output_buffer.to_str).to have_tag('form li p.inline-hints', :text => @localized_hint_text)
791
792
  end
792
793
  end
793
794
 
@@ -796,7 +797,7 @@ RSpec.describe 'with input class finder' do
796
797
  concat(semantic_form_for(@new_post) do |builder|
797
798
  concat(builder.input(:title, :hint => true))
798
799
  end)
799
- expect(output_buffer).to have_tag('form li p.inline-hints', :text => @default_localized_hint_text)
800
+ expect(output_buffer.to_str).to have_tag('form li p.inline-hints', :text => @default_localized_hint_text)
800
801
  end
801
802
  end
802
803
  end
@@ -807,7 +808,7 @@ RSpec.describe 'with input class finder' do
807
808
  concat(semantic_form_for(@new_post) do |builder|
808
809
  concat(builder.input(:title, :hint => false))
809
810
  end)
810
- expect(output_buffer).not_to have_tag('form li p.inline-hints', :text => @localized_hint_text)
811
+ expect(output_buffer.to_str).not_to have_tag('form li p.inline-hints', :text => @localized_hint_text)
811
812
  end
812
813
  end
813
814
  end
@@ -827,7 +828,7 @@ RSpec.describe 'with input class finder' do
827
828
  semantic_form_for(@new_post) do |builder|
828
829
  concat(builder.input(:title, :hint => true))
829
830
  end
830
- expect(output_buffer).not_to have_tag('form li p.inline-hints', :text => @localized_hint_text)
831
+ expect(output_buffer.to_str).not_to have_tag('form li p.inline-hints', :text => @localized_hint_text)
831
832
  end
832
833
  end
833
834
  end
@@ -838,7 +839,7 @@ RSpec.describe 'with input class finder' do
838
839
  concat(semantic_form_for(@new_post) do |builder|
839
840
  concat(builder.input(:title))
840
841
  end)
841
- expect(output_buffer).not_to have_tag('form li p.inline-hints')
842
+ expect(output_buffer.to_str).not_to have_tag('form li p.inline-hints')
842
843
  end
843
844
  end
844
845
  end
@@ -853,25 +854,25 @@ RSpec.describe 'with input class finder' do
853
854
  concat(semantic_form_for(@new_post) do |builder|
854
855
  concat(builder.input(:title, :wrapper_html => {:id => :another_id}))
855
856
  end)
856
- expect(output_buffer).to have_tag("form li#another_id")
857
+ expect(output_buffer.to_str).to have_tag("form li#another_id")
857
858
  end
858
859
 
859
860
  it 'should append given classes to li default classes' do
860
861
  concat(semantic_form_for(@new_post) do |builder|
861
862
  concat(builder.input(:title, :wrapper_html => {:class => :another_class}, :required => true))
862
863
  end)
863
- expect(output_buffer).to have_tag("form li.string")
864
- expect(output_buffer).to have_tag("form li.required")
865
- expect(output_buffer).to have_tag("form li.another_class")
864
+ expect(output_buffer.to_str).to have_tag("form li.string")
865
+ expect(output_buffer.to_str).to have_tag("form li.required")
866
+ expect(output_buffer.to_str).to have_tag("form li.another_class")
866
867
  end
867
868
 
868
869
  it 'should allow classes to be an array' do
869
870
  concat(semantic_form_for(@new_post) do |builder|
870
871
  concat(builder.input(:title, :wrapper_html => {:class => [ :my_class, :another_class ]}))
871
872
  end)
872
- expect(output_buffer).to have_tag("form li.string")
873
- expect(output_buffer).to have_tag("form li.my_class")
874
- expect(output_buffer).to have_tag("form li.another_class")
873
+ expect(output_buffer.to_str).to have_tag("form li.string")
874
+ expect(output_buffer.to_str).to have_tag("form li.my_class")
875
+ expect(output_buffer.to_str).to have_tag("form li.another_class")
875
876
  end
876
877
 
877
878
  describe 'when nil' do
@@ -879,7 +880,7 @@ RSpec.describe 'with input class finder' do
879
880
  concat(semantic_form_for(@new_post) do |builder|
880
881
  concat(builder.input(:title, :wrapper_html => {:id => nil}))
881
882
  end)
882
- expect(output_buffer).to have_tag('form li:not([id])')
883
+ expect(output_buffer.to_str).to have_tag('form li:not([id])')
883
884
  end
884
885
  end
885
886
  end
@@ -889,8 +890,8 @@ RSpec.describe 'with input class finder' do
889
890
  concat(semantic_form_for(@new_post) do |builder|
890
891
  concat(builder.input(:title))
891
892
  end)
892
- expect(output_buffer).to have_tag("form li#post_title_input")
893
- expect(output_buffer).to have_tag("form li.string")
893
+ expect(output_buffer.to_str).to have_tag("form li#post_title_input")
894
+ expect(output_buffer.to_str).to have_tag("form li.string")
894
895
  end
895
896
  end
896
897
 
@@ -932,7 +933,7 @@ RSpec.describe 'with input class finder' do
932
933
  concat(builder.input(:title, my_options))
933
934
  concat(builder.input(:publish_at, my_options))
934
935
  end)
935
- expect(output_buffer).to have_tag 'li.string', :count => 2
936
+ expect(output_buffer.to_str).to have_tag 'li.string', :count => 2
936
937
  end
937
938
  end
938
939