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 'password input' do
@@ -6,7 +7,7 @@ RSpec.describe 'password 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
 
12
13
  concat(semantic_form_for(@new_post) do |builder|
@@ -56,11 +57,11 @@ RSpec.describe 'password input' do
56
57
  it_should_have_label_and_input_with_id("context2_post_title")
57
58
 
58
59
  end
59
-
60
+
60
61
  describe "when index is provided" do
61
62
 
62
63
  before do
63
- @output_buffer = ''
64
+ @output_buffer = ActionView::OutputBuffer.new ''
64
65
  mock_everything
65
66
 
66
67
  concat(semantic_form_for(@new_post) do |builder|
@@ -69,31 +70,31 @@ RSpec.describe 'password input' do
69
70
  end)
70
71
  end)
71
72
  end
72
-
73
+
73
74
  it 'should index the id of the wrapper' do
74
- expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
75
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
75
76
  end
76
-
77
+
77
78
  it 'should index the id of the select tag' do
78
- expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
79
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
79
80
  end
80
-
81
+
81
82
  it 'should index the name of the select tag' do
82
- expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
83
+ expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
83
84
  end
84
-
85
+
85
86
  end
86
-
87
-
87
+
88
+
88
89
  describe "when required" do
89
90
  it "should add the required attribute to the input's html options" do
90
- with_config :use_required_attribute, true do
91
+ with_config :use_required_attribute, true do
91
92
  concat(semantic_form_for(@new_post) do |builder|
92
93
  concat(builder.input(:title, :as => :password, :required => true))
93
94
  end)
94
- expect(output_buffer).to have_tag("input[@required]")
95
+ expect(output_buffer.to_str).to have_tag("input[@required]")
95
96
  end
96
97
  end
97
98
  end
98
-
99
+
99
100
  end
@@ -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 'phone input' do
@@ -6,7 +7,7 @@ RSpec.describe 'phone 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
 
@@ -41,11 +42,11 @@ RSpec.describe 'phone input' do
41
42
  it_should_have_label_and_input_with_id("context2_post_phone")
42
43
 
43
44
  end
44
-
45
+
45
46
  describe "when index is provided" do
46
47
 
47
48
  before do
48
- @output_buffer = ''
49
+ @output_buffer = ActionView::OutputBuffer.new ''
49
50
  mock_everything
50
51
 
51
52
  concat(semantic_form_for(@new_post) do |builder|
@@ -54,32 +55,32 @@ RSpec.describe 'phone input' do
54
55
  end)
55
56
  end)
56
57
  end
57
-
58
+
58
59
  it 'should index the id of the wrapper' do
59
- expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
60
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
60
61
  end
61
-
62
+
62
63
  it 'should index the id of the select tag' do
63
- expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
64
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
64
65
  end
65
-
66
+
66
67
  it 'should index the name of the select tag' do
67
- expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
68
+ expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
68
69
  end
69
-
70
+
70
71
  end
71
-
72
-
72
+
73
+
73
74
  describe "when required" do
74
75
  it "should add the required attribute to the input's html options" do
75
- with_config :use_required_attribute, true do
76
+ with_config :use_required_attribute, true do
76
77
  concat(semantic_form_for(@new_post) do |builder|
77
78
  concat(builder.input(:title, :as => :phone, :required => true))
78
79
  end)
79
- expect(output_buffer).to have_tag("input[@required]")
80
+ expect(output_buffer.to_str).to have_tag("input[@required]")
80
81
  end
81
82
  end
82
83
  end
83
-
84
+
84
85
  end
85
86
 
@@ -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 'string input' do
@@ -6,20 +7,20 @@ RSpec.describe 'string 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
  after do
14
15
  ::I18n.backend.reload!
15
16
  end
16
-
17
+
17
18
  describe "placeholder text" do
18
-
19
+
19
20
  [:email, :number, :password, :phone, :search, :string, :url, :text, :date_picker, :time_picker, :datetime_picker].each do |type|
20
-
21
+
21
22
  describe "for #{type} inputs" do
22
-
23
+
23
24
  describe "when found in i18n" do
24
25
  it "should have a placeholder containing i18n text" do
25
26
  with_config :i18n_lookups_by_default, true do
@@ -27,20 +28,20 @@ RSpec.describe 'string input' do
27
28
  concat(semantic_form_for(@new_post) do |builder|
28
29
  concat(builder.input(:title, :as => type))
29
30
  end)
30
- expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="War and Peace"]')
31
+ expect(output_buffer.to_str).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="War and Peace"]')
31
32
  end
32
33
  end
33
34
  end
34
-
35
+
35
36
  describe "when not found in i18n" do
36
37
  it "should not have placeholder" do
37
38
  concat(semantic_form_for(@new_post) do |builder|
38
39
  concat(builder.input(:title, :as => type))
39
40
  end)
40
- expect(output_buffer).not_to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder]')
41
+ expect(output_buffer.to_str).not_to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder]')
41
42
  end
42
43
  end
43
-
44
+
44
45
  describe "when found in i18n and :input_html" do
45
46
  it "should favor :input_html" do
46
47
  with_config :i18n_lookups_by_default, true do
@@ -48,24 +49,24 @@ RSpec.describe 'string input' do
48
49
  concat(semantic_form_for(@new_post) do |builder|
49
50
  concat(builder.input(:title, :as => type, :input_html => { :placeholder => "Foo" }))
50
51
  end)
51
- expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Foo"]')
52
+ expect(output_buffer.to_str).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Foo"]')
52
53
  end
53
54
  end
54
55
  end
55
-
56
+
56
57
  describe "when found in :input_html" do
57
58
  it "should use the :input_html placeholder" do
58
59
  concat(semantic_form_for(@new_post) do |builder|
59
60
  concat(builder.input(:title, :as => type, :input_html => { :placeholder => "Untitled" }))
60
61
  end)
61
- expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Untitled"]')
62
+ expect(output_buffer.to_str).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Untitled"]')
62
63
  end
63
64
  end
64
-
65
+
65
66
  end
66
-
67
+
67
68
  end
68
-
69
+
69
70
  end
70
-
71
+
71
72
  end
@@ -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 'radio input' do
@@ -6,7 +7,7 @@ RSpec.describe 'radio 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
 
@@ -27,53 +28,53 @@ RSpec.describe 'radio input' do
27
28
  it_should_use_the_collection_when_provided(:radio, 'input')
28
29
 
29
30
  it 'should generate a legend containing a label with text for the input' do
30
- expect(output_buffer).to have_tag('form li fieldset legend.label label')
31
- expect(output_buffer).to have_tag('form li fieldset legend.label label', :text => /Author/)
31
+ expect(output_buffer.to_str).to have_tag('form li fieldset legend.label label')
32
+ expect(output_buffer.to_str).to have_tag('form li fieldset legend.label label', :text => /Author/)
32
33
  end
33
34
 
34
35
  it 'should not link the label within the legend to any input' do
35
- expect(output_buffer).not_to have_tag('form li fieldset legend label[@for]')
36
+ expect(output_buffer.to_str).not_to have_tag('form li fieldset legend label[@for]')
36
37
  end
37
38
 
38
39
  it 'should generate an ordered list with a list item for each choice' do
39
- expect(output_buffer).to have_tag('form li fieldset ol')
40
- expect(output_buffer).to have_tag('form li fieldset ol li.choice', :count => ::Author.all.size)
40
+ expect(output_buffer.to_str).to have_tag('form li fieldset ol')
41
+ expect(output_buffer.to_str).to have_tag('form li fieldset ol li.choice', :count => ::Author.all.size)
41
42
  end
42
43
 
43
44
  it 'should have one option with a "checked" attribute' do
44
- expect(output_buffer).to have_tag('form li input[@checked]', :count => 1)
45
+ expect(output_buffer.to_str).to have_tag('form li input[@checked]', :count => 1)
45
46
  end
46
47
 
47
48
  describe "each choice" do
48
49
 
49
50
  it 'should not give the choice label the .label class' do
50
- expect(output_buffer).not_to have_tag('li.choice label.label')
51
+ expect(output_buffer.to_str).not_to have_tag('li.choice label.label')
51
52
  end
52
53
 
53
54
  it 'should not add the required attribute to each input' do
54
- expect(output_buffer).not_to have_tag('li.choice input[@required]')
55
+ expect(output_buffer.to_str).not_to have_tag('li.choice input[@required]')
55
56
  end
56
57
 
57
58
 
58
59
  it 'should contain a label for the radio input with a nested input and label text' do
59
60
  ::Author.all.each do |author|
60
- expect(output_buffer).to have_tag('form li fieldset ol li label', /#{author.to_label}/)
61
- expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
61
+ expect(output_buffer.to_str).to have_tag('form li fieldset ol li label', /#{author.to_label}/)
62
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
62
63
  end
63
64
  end
64
65
 
65
66
  it 'should use values as li.class when value_as_class is true' do
66
67
  ::Author.all.each do |author|
67
- expect(output_buffer).to have_tag("form li fieldset ol li.author_#{author.id} label")
68
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li.author_#{author.id} label")
68
69
  end
69
70
  end
70
71
 
71
72
  it "should have a radio input" do
72
73
  ::Author.all.each do |author|
73
- expect(output_buffer).to have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
74
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@type='radio']")
75
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
76
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@name='post[author_id]']")
74
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
75
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@type='radio']")
76
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
77
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@name='post[author_id]']")
77
78
  end
78
79
  end
79
80
 
@@ -86,7 +87,7 @@ RSpec.describe 'radio input' do
86
87
  concat(builder.input(:author, :as => :radio))
87
88
  end)
88
89
 
89
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@checked='checked']")
90
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@checked='checked']")
90
91
  end
91
92
 
92
93
  it "should mark the input as disabled if options attached for disabling" do
@@ -94,8 +95,8 @@ RSpec.describe 'radio input' do
94
95
  concat(builder.input(:author, :as => :radio, :collection => [["Test", 'test'], ["Try", "try", {:disabled => true}]]))
95
96
  end)
96
97
 
97
- expect(output_buffer).not_to have_tag("form li fieldset ol li label input[@value='test'][@disabled='disabled']")
98
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='try'][@disabled='disabled']")
98
+ expect(output_buffer.to_str).not_to have_tag("form li fieldset ol li label input[@value='test'][@disabled='disabled']")
99
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@value='try'][@disabled='disabled']")
99
100
  end
100
101
 
101
102
  it "should not contain invalid HTML attributes" do
@@ -104,31 +105,31 @@ RSpec.describe 'radio input' do
104
105
  concat(builder.input(:author, :as => :radio))
105
106
  end)
106
107
 
107
- expect(output_buffer).not_to have_tag("form li fieldset ol li input[@find_options]")
108
+ expect(output_buffer.to_str).not_to have_tag("form li fieldset ol li input[@find_options]")
108
109
  end
109
110
 
110
111
  end
111
112
 
112
113
  describe 'and no object is given' do
113
114
  before(:example) do
114
- output_buffer.replace ''
115
+ @output_buffer = ActionView::OutputBuffer.new ''
115
116
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
116
117
  concat(builder.input(:author_id, :as => :radio, :collection => ::Author.all))
117
118
  end)
118
119
  end
119
120
 
120
121
  it 'should generate a fieldset with legend' do
121
- expect(output_buffer).to have_tag('form li fieldset legend', :text => /Author/)
122
+ expect(output_buffer.to_str).to have_tag('form li fieldset legend', :text => /Author/)
122
123
  end
123
124
 
124
125
  it 'should generate an li tag for each item in the collection' do
125
- expect(output_buffer).to have_tag('form li fieldset ol li', :count => ::Author.all.size)
126
+ expect(output_buffer.to_str).to have_tag('form li fieldset ol li', :count => ::Author.all.size)
126
127
  end
127
128
 
128
129
  it 'should generate labels for each item' do
129
130
  ::Author.all.each do |author|
130
- expect(output_buffer).to have_tag('form li fieldset ol li label', :text => /#{author.to_label}/)
131
- expect(output_buffer).to have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
131
+ expect(output_buffer.to_str).to have_tag('form li fieldset ol li label', :text => /#{author.to_label}/)
132
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
132
133
  end
133
134
  end
134
135
 
@@ -136,15 +137,15 @@ RSpec.describe 'radio input' do
136
137
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
137
138
  concat(builder.input(:author_id, :as => :radio, :collection => [["<b>Item 1</b>", 1], ["<b>Item 2</b>", 2]]))
138
139
  end)
139
- expect(output_buffer).to have_tag('form li fieldset ol li label', text: %r{<b>Item [12]</b>}, count: 2)
140
+ expect(output_buffer.to_str).to have_tag('form li fieldset ol li label', text: %r{<b>Item [12]</b>}, count: 2)
140
141
  end
141
142
 
142
143
  it 'should generate inputs for each item' do
143
144
  ::Author.all.each do |author|
144
- expect(output_buffer).to have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
145
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@type='radio']")
146
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
147
- expect(output_buffer).to have_tag("form li fieldset ol li label input[@name='project[author_id]']")
145
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
146
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@type='radio']")
147
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
148
+ expect(output_buffer.to_str).to have_tag("form li fieldset ol li label input[@name='project[author_id]']")
148
149
  end
149
150
  end
150
151
  end
@@ -165,15 +166,15 @@ RSpec.describe 'radio input' do
165
166
  end
166
167
 
167
168
  it 'should have a radio input for each defined enum status' do
168
- expect(output_buffer).to have_tag("form li input[@name='post[status]'][@type='radio']", :count => @new_post.class.statuses.count)
169
+ expect(output_buffer.to_str).to have_tag("form li input[@name='post[status]'][@type='radio']", :count => @new_post.class.statuses.count)
169
170
  @new_post.class.statuses.each do |label, value|
170
- expect(output_buffer).to have_tag("form li input[@value='#{label}']")
171
- expect(output_buffer).to have_tag("form li label", :text => /#{label.humanize}/)
171
+ expect(output_buffer.to_str).to have_tag("form li input[@value='#{label}']")
172
+ expect(output_buffer.to_str).to have_tag("form li label", :text => /#{label.humanize}/)
172
173
  end
173
174
  end
174
175
 
175
176
  it 'should have one radio input with a "checked" attribute' do
176
- expect(output_buffer).to have_tag("form li input[@name='post[status]'][@checked]", :count => 1)
177
+ expect(output_buffer.to_str).to have_tag("form li input[@name='post[status]'][@checked]", :count => 1)
177
178
  end
178
179
  end
179
180
 
@@ -196,7 +197,7 @@ RSpec.describe 'radio input' do
196
197
  end
197
198
 
198
199
  it "should do foo" do
199
- expect(output_buffer).to have_tag("legend.label label", :text => /Translated/)
200
+ expect(output_buffer.to_str).to have_tag("legend.label label", :text => /Translated/)
200
201
  end
201
202
 
202
203
  end
@@ -210,13 +211,13 @@ RSpec.describe 'radio input' do
210
211
  end
211
212
 
212
213
  it "should output the correct label title" do
213
- expect(output_buffer).to have_tag("legend.label label", :text => /The authors/)
214
+ expect(output_buffer.to_str).to have_tag("legend.label label", :text => /The authors/)
214
215
  end
215
216
  end
216
217
 
217
218
  describe "when :label option is false" do
218
219
  before do
219
- @output_buffer = ''
220
+ @output_buffer = ActionView::OutputBuffer.new ''
220
221
  allow(@new_post).to receive(:author_ids).and_return(nil)
221
222
  concat(semantic_form_for(@new_post) do |builder|
222
223
  concat(builder.input(:authors, :as => :radio, :label => false))
@@ -224,12 +225,12 @@ RSpec.describe 'radio input' do
224
225
  end
225
226
 
226
227
  it "should not output the legend" do
227
- expect(output_buffer).not_to have_tag("legend.label")
228
- expect(output_buffer).not_to include("&gt;")
228
+ expect(output_buffer.to_str).not_to have_tag("legend.label")
229
+ expect(output_buffer.to_str).not_to include("&gt;")
229
230
  end
230
231
 
231
232
  it "should not cause escaped HTML" do
232
- expect(output_buffer).not_to include("&gt;")
233
+ expect(output_buffer.to_str).not_to include("&gt;")
233
234
  end
234
235
  end
235
236
 
@@ -242,20 +243,20 @@ RSpec.describe 'radio input' do
242
243
  end
243
244
 
244
245
  it "should output the correct label title" do
245
- expect(output_buffer).to have_tag("legend.label label abbr")
246
+ expect(output_buffer.to_str).to have_tag("legend.label label abbr")
246
247
  end
247
248
  end
248
249
 
249
250
  describe "when :namespace is given on form" do
250
251
  before do
251
- @output_buffer = ''
252
+ @output_buffer = ActionView::OutputBuffer.new ''
252
253
  allow(@new_post).to receive(:author_ids).and_return(nil)
253
254
  concat(semantic_form_for(@new_post, :namespace => "custom_prefix") do |builder|
254
255
  concat(builder.input(:authors, :as => :radio, :label => ''))
255
256
  end)
256
257
 
257
- expect(output_buffer).to match(/for="custom_prefix_post_author_ids_(\d+)"/)
258
- expect(output_buffer).to match(/id="custom_prefix_post_author_ids_(\d+)"/)
258
+ expect(output_buffer.to_str).to match(/for="custom_prefix_post_author_ids_(\d+)"/)
259
+ expect(output_buffer.to_str).to match(/id="custom_prefix_post_author_ids_(\d+)"/)
259
260
  end
260
261
  it_should_have_input_wrapper_with_id("custom_prefix_post_authors_input")
261
262
  end
@@ -263,7 +264,7 @@ RSpec.describe 'radio input' do
263
264
  describe "when index is provided" do
264
265
 
265
266
  before do
266
- @output_buffer = ''
267
+ @output_buffer = ActionView::OutputBuffer.new ''
267
268
  mock_everything
268
269
 
269
270
  concat(semantic_form_for(@new_post) do |builder|
@@ -274,23 +275,23 @@ RSpec.describe 'radio input' do
274
275
  end
275
276
 
276
277
  it 'should index the id of the wrapper' do
277
- expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
278
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
278
279
  end
279
280
 
280
281
  it 'should index the id of the select tag' do
281
- expect(output_buffer).to have_tag("input#post_author_attributes_3_name_true")
282
- expect(output_buffer).to have_tag("input#post_author_attributes_3_name_false")
282
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name_true")
283
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name_false")
283
284
  end
284
285
 
285
286
  it 'should index the name of the select tag' do
286
- expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
287
+ expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
287
288
  end
288
289
 
289
290
  end
290
291
 
291
292
  describe "when collection contains integers" do
292
293
  before do
293
- @output_buffer = ''
294
+ @output_buffer = ActionView::OutputBuffer.new ''
294
295
  mock_everything
295
296
 
296
297
  concat(semantic_form_for(:project) do |builder|
@@ -299,15 +300,15 @@ RSpec.describe 'radio input' do
299
300
  end
300
301
 
301
302
  it 'should output the correct labels' do
302
- expect(output_buffer).to have_tag("li.choice label", :text => /1/)
303
- expect(output_buffer).to have_tag("li.choice label", :text => /2/)
304
- expect(output_buffer).to have_tag("li.choice label", :text => /3/)
303
+ expect(output_buffer.to_str).to have_tag("li.choice label", :text => /1/)
304
+ expect(output_buffer.to_str).to have_tag("li.choice label", :text => /2/)
305
+ expect(output_buffer.to_str).to have_tag("li.choice label", :text => /3/)
305
306
  end
306
307
  end
307
308
 
308
309
  describe "when collection contains symbols" do
309
310
  before do
310
- @output_buffer = ''
311
+ @output_buffer = ActionView::OutputBuffer.new ''
311
312
  mock_everything
312
313
 
313
314
  concat(semantic_form_for(:project) do |builder|
@@ -316,9 +317,9 @@ RSpec.describe 'radio input' do
316
317
  end
317
318
 
318
319
  it 'should output the correct labels' do
319
- expect(output_buffer).to have_tag("li.choice label", :text => /A/)
320
- expect(output_buffer).to have_tag("li.choice label", :text => /B/)
321
- expect(output_buffer).to have_tag("li.choice label", :text => /C/)
320
+ expect(output_buffer.to_str).to have_tag("li.choice label", :text => /A/)
321
+ expect(output_buffer.to_str).to have_tag("li.choice label", :text => /B/)
322
+ expect(output_buffer.to_str).to have_tag("li.choice label", :text => /C/)
322
323
  end
323
324
  end
324
325