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
  require 'spec_helper'
3
4
 
4
5
  RSpec.describe 'date select input' do
@@ -6,14 +7,14 @@ RSpec.describe 'date select input' 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
 
13
14
  describe "general" do
14
15
 
15
16
  before do
16
- output_buffer.replace ''
17
+ @output_buffer = ActionView::OutputBuffer.new ''
17
18
  concat(semantic_form_for(@new_post) do |builder|
18
19
  concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :month, :day]))
19
20
  end)
@@ -28,37 +29,37 @@ RSpec.describe 'date select input' do
28
29
  it_should_apply_error_logic_for_input_type(:date_select)
29
30
 
30
31
  it 'should have a legend and label with the label text inside the fieldset' do
31
- expect(output_buffer).to have_tag('form li.date_select fieldset legend.label label', :text => /Publish at/)
32
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset legend.label label', :text => /Publish at/)
32
33
  end
33
34
 
34
35
  it 'should associate the legend label with the first select' do
35
- expect(output_buffer).to have_tag('form li.date_select fieldset legend.label')
36
- expect(output_buffer).to have_tag('form li.date_select fieldset legend.label label')
37
- expect(output_buffer).to have_tag('form li.date_select fieldset legend.label label[@for]')
38
- expect(output_buffer).to have_tag('form li.date_select fieldset legend.label label[@for="post_publish_at_1i"]')
36
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset legend.label')
37
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset legend.label label')
38
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset legend.label label[@for]')
39
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset legend.label label[@for="post_publish_at_1i"]')
39
40
  end
40
41
 
41
42
  it 'should have an ordered list of three items inside the fieldset' do
42
- expect(output_buffer).to have_tag('form li.date_select fieldset ol.fragments-group')
43
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li.fragment', :count => 3)
43
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol.fragments-group')
44
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li.fragment', :count => 3)
44
45
  end
45
46
 
46
47
  it 'should have three labels for year, month and day' do
47
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :count => 3)
48
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :text => /year/i)
49
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :text => /month/i)
50
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :text => /day/i)
48
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :count => 3)
49
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :text => /year/i)
50
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :text => /month/i)
51
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :text => /day/i)
51
52
  end
52
53
 
53
54
  it 'should have three selects for year, month and day' do
54
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li select', :count => 3)
55
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li select', :count => 3)
55
56
  end
56
57
  end
57
58
 
58
59
  describe "when namespace is provided" do
59
60
 
60
61
  before do
61
- output_buffer.replace ''
62
+ @output_buffer = ActionView::OutputBuffer.new ''
62
63
  concat(semantic_form_for(@new_post, :namespace => "context2") do |builder|
63
64
  concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :month, :day]))
64
65
  end)
@@ -70,11 +71,11 @@ RSpec.describe 'date select input' do
70
71
  it_should_have_select_with_id("context2_post_publish_at_3i")
71
72
 
72
73
  end
73
-
74
+
74
75
  describe "when index is provided" do
75
76
 
76
77
  before do
77
- @output_buffer = ''
78
+ @output_buffer = ActionView::OutputBuffer.new ''
78
79
  mock_everything
79
80
 
80
81
  concat(semantic_form_for(@new_post) do |builder|
@@ -83,77 +84,77 @@ RSpec.describe 'date select input' do
83
84
  end)
84
85
  end)
85
86
  end
86
-
87
+
87
88
  it 'should index the id of the wrapper' do
88
- expect(output_buffer).to have_tag("li#post_author_attributes_3_created_at_input")
89
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_created_at_input")
89
90
  end
90
-
91
+
91
92
  it 'should index the id of the select tag' do
92
- expect(output_buffer).to have_tag("select#post_author_attributes_3_created_at_1i")
93
- expect(output_buffer).to have_tag("select#post_author_attributes_3_created_at_2i")
94
- expect(output_buffer).to have_tag("select#post_author_attributes_3_created_at_3i")
93
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_1i")
94
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_2i")
95
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_3i")
95
96
  end
96
-
97
+
97
98
  it 'should index the name of the select tag' do
98
- expect(output_buffer).to have_tag("select[@name='post[author_attributes][3][created_at(1i)]']")
99
- expect(output_buffer).to have_tag("select[@name='post[author_attributes][3][created_at(2i)]']")
100
- expect(output_buffer).to have_tag("select[@name='post[author_attributes][3][created_at(3i)]']")
99
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(1i)]']")
100
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(2i)]']")
101
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(3i)]']")
101
102
  end
102
-
103
+
103
104
  end
104
105
 
105
106
  describe ':labels option' do
106
107
  fields = [:year, :month, :day]
107
108
  fields.each do |field|
108
109
  it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
109
- output_buffer.replace ''
110
+ @output_buffer = ActionView::OutputBuffer.new ''
110
111
  concat(semantic_form_for(@new_post) do |builder|
111
112
  concat(builder.input(:created_at, :as => :date_select, :labels => { field => "another #{field} label" }))
112
113
  end)
113
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :count => fields.length)
114
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :count => fields.length)
114
115
  fields.each do |f|
115
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :text => f == field ? /another #{f} label/i : /#{f}/i)
116
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :text => f == field ? /another #{f} label/i : /#{f}/i)
116
117
  end
117
118
  end
118
119
 
119
120
  it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
120
- output_buffer.replace ''
121
+ @output_buffer = ActionView::OutputBuffer.new ''
121
122
  concat(semantic_form_for(@new_post) do |builder|
122
123
  concat(builder.input(:created_at, :as => :date_select, :labels => { field => "" }))
123
124
  end)
124
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :count => fields.length-1)
125
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :count => fields.length-1)
125
126
  fields.each do |f|
126
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :text => /#{f}/i) unless field == f
127
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :text => /#{f}/i) unless field == f
127
128
  end
128
129
  end
129
-
130
+
130
131
  it "should not display the label for the #{field} field when :labels[:#{field}] is false" do
131
- output_buffer.replace ''
132
+ @output_buffer = ActionView::OutputBuffer.new ''
132
133
  concat(semantic_form_for(@new_post) do |builder|
133
134
  concat(builder.input(:created_at, :as => :date_select, :labels => { field => false }))
134
135
  end)
135
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :count => fields.length-1)
136
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :count => fields.length-1)
136
137
  fields.each do |f|
137
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', /#{f}/i) unless field == f
138
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', /#{f}/i) unless field == f
138
139
  end
139
140
  end
140
-
141
- it "should not render unsafe HTML when :labels[:#{field}] is false" do
142
- output_buffer.replace ''
141
+
142
+ it "should not render unsafe HTML when :labels[:#{field}] is false" do
143
+ @output_buffer = ActionView::OutputBuffer.new ''
143
144
  concat(semantic_form_for(@new_post) do |builder|
144
145
  concat(builder.input(:created_at, :as => :date_select, :include_seconds => true, :labels => { field => false }))
145
146
  end)
146
- expect(output_buffer).not_to include(">")
147
+ expect(output_buffer.to_str).not_to include(">")
147
148
  end
148
-
149
+
149
150
  end
150
151
 
151
152
  it "should not display labels for any fields when :labels is falsy" do
152
- output_buffer.replace ''
153
+ @output_buffer = ActionView::OutputBuffer.new ''
153
154
  concat(semantic_form_for(@new_post) do |builder|
154
155
  concat(builder.input(:created_at, :as => :date_select, :labels => false))
155
156
  end)
156
- expect(output_buffer).to have_tag('form li.date_select fieldset ol li label', :count => 0)
157
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset ol li label', :count => 0)
157
158
  end
158
159
  end
159
160
 
@@ -165,84 +166,84 @@ RSpec.describe 'date select input' do
165
166
  end
166
167
  )
167
168
 
168
- expect(output_buffer).to have_tag "option[value='2018'][selected='selected']"
169
- expect(output_buffer).to have_tag "option[value='10'][selected='selected']"
170
- expect(output_buffer).to have_tag "option[value='4'][selected='selected']"
169
+ expect(output_buffer.to_str).to have_tag "option[value='2018'][selected='selected']"
170
+ expect(output_buffer.to_str).to have_tag "option[value='10'][selected='selected']"
171
+ expect(output_buffer.to_str).to have_tag "option[value='4'][selected='selected']"
171
172
  end
172
173
  end
173
174
 
174
175
  describe "when required" do
175
176
  it "should add the required attribute to the input's html options" do
176
- with_config :use_required_attribute, true do
177
+ with_config :use_required_attribute, true do
177
178
  concat(semantic_form_for(@new_post) do |builder|
178
179
  concat(builder.input(:title, :as => :date_select, :required => true))
179
180
  end)
180
- expect(output_buffer).to have_tag("select[@required]", :count => 3)
181
+ expect(output_buffer.to_str).to have_tag("select[@required]", :count => 3)
181
182
  end
182
183
  end
183
184
  end
184
-
185
+
185
186
  describe "when order does not include day" do
186
187
  before do
187
- output_buffer.replace ''
188
+ @output_buffer = ActionView::OutputBuffer.new ''
188
189
  concat(semantic_form_for(@new_post) do |builder|
189
190
  concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :month]))
190
191
  end)
191
192
  end
192
193
 
193
194
  it "should include a hidden input for day" do
194
- expect(output_buffer).to have_tag('input[@type="hidden"][@name="post[publish_at(3i)]"][@value="1"]')
195
+ expect(output_buffer.to_str).to have_tag('input[@type="hidden"][@name="post[publish_at(3i)]"][@value="1"]')
195
196
  end
196
197
 
197
198
  it "should not include a select for day" do
198
- expect(output_buffer).not_to have_tag('select[@name="post[publish_at(3i)]"]')
199
+ expect(output_buffer.to_str).not_to have_tag('select[@name="post[publish_at(3i)]"]')
199
200
  end
200
201
  end
201
202
 
202
203
  describe "when order does not include month" do
203
204
  before do
204
- output_buffer.replace ''
205
+ @output_buffer = ActionView::OutputBuffer.new ''
205
206
  concat(semantic_form_for(@new_post) do |builder|
206
207
  concat(builder.input(:publish_at, :as => :date_select, :order => [:year, :day]))
207
208
  end)
208
209
  end
209
210
 
210
211
  it "should include a hidden input for month" do
211
- expect(output_buffer).to have_tag('input[@type="hidden"][@name="post[publish_at(2i)]"][@value="1"]')
212
+ expect(output_buffer.to_str).to have_tag('input[@type="hidden"][@name="post[publish_at(2i)]"][@value="1"]')
212
213
  end
213
214
 
214
215
  it "should not include a select for month" do
215
- expect(output_buffer).not_to have_tag('select[@name="post[publish_at(2i)]"]')
216
+ expect(output_buffer.to_str).not_to have_tag('select[@name="post[publish_at(2i)]"]')
216
217
  end
217
218
  end
218
219
 
219
220
  describe "when order does not include year" do
220
221
  before do
221
- output_buffer.replace ''
222
+ @output_buffer = ActionView::OutputBuffer.new ''
222
223
  concat(semantic_form_for(@new_post) do |builder|
223
224
  concat(builder.input(:publish_at, :as => :date_select, :order => [:month, :day]))
224
225
  end)
225
226
  end
226
227
 
227
228
  it "should include a hidden input for month" do
228
- expect(output_buffer).to have_tag("input[@type=\"hidden\"][@name=\"post[publish_at(1i)]\"][@value=\"#{Time.now.year}\"]")
229
+ expect(output_buffer.to_str).to have_tag("input[@type=\"hidden\"][@name=\"post[publish_at(1i)]\"][@value=\"#{Time.now.year}\"]")
229
230
  end
230
231
 
231
232
  it "should not include a select for month" do
232
- expect(output_buffer).not_to have_tag('select[@name="post[publish_at(1i)]"]')
233
+ expect(output_buffer.to_str).not_to have_tag('select[@name="post[publish_at(1i)]"]')
233
234
  end
234
235
  end
235
236
 
236
237
  describe "when order does not have year first" do
237
238
  before do
238
- output_buffer.replace ''
239
+ @output_buffer = ActionView::OutputBuffer.new ''
239
240
  concat(semantic_form_for(@new_post) do |builder|
240
241
  concat(builder.input(:publish_at, :as => :date_select, :order => [:day, :month, :year]))
241
242
  end)
242
243
  end
243
244
 
244
245
  it 'should associate the legend label with the new first select' do
245
- expect(output_buffer).to have_tag('form li.date_select fieldset legend.label label[@for="post_publish_at_3i"]')
246
+ expect(output_buffer.to_str).to have_tag('form li.date_select fieldset legend.label label[@for="post_publish_at_3i"]')
246
247
  end
247
248
  end
248
249