formtastic 2.1.0 → 4.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 (164) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/test.yml +61 -0
  4. data/.gitignore +4 -2
  5. data/CHANGELOG.md +52 -0
  6. data/Gemfile +1 -1
  7. data/Gemfile.lock +105 -0
  8. data/MIT-LICENSE +1 -1
  9. data/{README.textile → README.md} +204 -219
  10. data/RELEASE_PROCESS +3 -1
  11. data/Rakefile +27 -29
  12. data/app/assets/stylesheets/formtastic.css +3 -2
  13. data/bin/appraisal +8 -0
  14. data/formtastic.gemspec +11 -14
  15. data/gemfiles/rails_5.2/Gemfile +5 -0
  16. data/gemfiles/rails_6.0/Gemfile +5 -0
  17. data/gemfiles/rails_6.1/Gemfile +5 -0
  18. data/gemfiles/rails_edge/Gemfile +13 -0
  19. data/lib/formtastic/action_class_finder.rb +18 -0
  20. data/lib/formtastic/actions/button_action.rb +55 -60
  21. data/lib/formtastic/actions/input_action.rb +59 -57
  22. data/lib/formtastic/actions/link_action.rb +68 -67
  23. data/lib/formtastic/actions.rb +6 -3
  24. data/lib/formtastic/deprecation.rb +5 -0
  25. data/lib/formtastic/engine.rb +3 -1
  26. data/lib/formtastic/form_builder.rb +35 -16
  27. data/lib/formtastic/helpers/action_helper.rb +34 -28
  28. data/lib/formtastic/helpers/enum.rb +13 -0
  29. data/lib/formtastic/helpers/errors_helper.rb +2 -2
  30. data/lib/formtastic/helpers/fieldset_wrapper.rb +16 -12
  31. data/lib/formtastic/helpers/form_helper.rb +19 -16
  32. data/lib/formtastic/helpers/input_helper.rb +69 -97
  33. data/lib/formtastic/helpers/inputs_helper.rb +35 -25
  34. data/lib/formtastic/helpers/reflection.rb +4 -4
  35. data/lib/formtastic/helpers.rb +1 -2
  36. data/lib/formtastic/html_attributes.rb +12 -1
  37. data/lib/formtastic/i18n.rb +1 -1
  38. data/lib/formtastic/input_class_finder.rb +18 -0
  39. data/lib/formtastic/inputs/base/choices.rb +2 -2
  40. data/lib/formtastic/inputs/base/collections.rb +46 -14
  41. data/lib/formtastic/inputs/base/database.rb +7 -2
  42. data/lib/formtastic/inputs/base/datetime_pickerish.rb +85 -0
  43. data/lib/formtastic/inputs/base/errors.rb +7 -7
  44. data/lib/formtastic/inputs/base/hints.rb +2 -2
  45. data/lib/formtastic/inputs/base/html.rb +10 -9
  46. data/lib/formtastic/inputs/base/labelling.rb +5 -8
  47. data/lib/formtastic/inputs/base/naming.rb +4 -4
  48. data/lib/formtastic/inputs/base/numeric.rb +1 -1
  49. data/lib/formtastic/inputs/base/options.rb +3 -4
  50. data/lib/formtastic/inputs/base/stringish.rb +10 -2
  51. data/lib/formtastic/inputs/base/timeish.rb +34 -22
  52. data/lib/formtastic/inputs/base/validations.rb +41 -13
  53. data/lib/formtastic/inputs/base/wrapping.rb +29 -26
  54. data/lib/formtastic/inputs/base.rb +22 -15
  55. data/lib/formtastic/inputs/boolean_input.rb +26 -12
  56. data/lib/formtastic/inputs/check_boxes_input.rb +39 -31
  57. data/lib/formtastic/inputs/color_input.rb +41 -0
  58. data/lib/formtastic/inputs/country_input.rb +24 -5
  59. data/lib/formtastic/inputs/datalist_input.rb +41 -0
  60. data/lib/formtastic/inputs/date_picker_input.rb +93 -0
  61. data/lib/formtastic/inputs/{date_input.rb → date_select_input.rb} +1 -1
  62. data/lib/formtastic/inputs/datetime_picker_input.rb +103 -0
  63. data/lib/formtastic/inputs/{datetime_input.rb → datetime_select_input.rb} +1 -1
  64. data/lib/formtastic/inputs/file_input.rb +2 -2
  65. data/lib/formtastic/inputs/hidden_input.rb +2 -6
  66. data/lib/formtastic/inputs/radio_input.rb +28 -22
  67. data/lib/formtastic/inputs/select_input.rb +36 -39
  68. data/lib/formtastic/inputs/time_picker_input.rb +99 -0
  69. data/lib/formtastic/inputs/{time_input.rb → time_select_input.rb} +6 -2
  70. data/lib/formtastic/inputs/time_zone_input.rb +16 -6
  71. data/lib/formtastic/inputs.rb +32 -21
  72. data/lib/formtastic/localized_string.rb +1 -1
  73. data/lib/formtastic/localizer.rb +24 -24
  74. data/lib/formtastic/namespaced_class_finder.rb +99 -0
  75. data/lib/formtastic/version.rb +1 -1
  76. data/lib/formtastic.rb +20 -10
  77. data/lib/generators/formtastic/form/form_generator.rb +10 -4
  78. data/lib/generators/formtastic/input/input_generator.rb +46 -0
  79. data/lib/generators/formtastic/install/install_generator.rb +5 -19
  80. data/lib/generators/templates/_form.html.slim +2 -2
  81. data/lib/generators/templates/formtastic.rb +46 -25
  82. data/lib/generators/templates/input.rb +19 -0
  83. data/sample/basic_inputs.html +23 -3
  84. data/script/integration-template.rb +74 -0
  85. data/script/integration.sh +19 -0
  86. data/spec/action_class_finder_spec.rb +12 -0
  87. data/spec/actions/button_action_spec.rb +8 -8
  88. data/spec/actions/generic_action_spec.rb +92 -56
  89. data/spec/actions/input_action_spec.rb +7 -7
  90. data/spec/actions/link_action_spec.rb +10 -10
  91. data/spec/builder/custom_builder_spec.rb +36 -20
  92. data/spec/builder/error_proc_spec.rb +4 -4
  93. data/spec/builder/semantic_fields_for_spec.rb +28 -29
  94. data/spec/fast_spec_helper.rb +12 -0
  95. data/spec/generators/formtastic/form/form_generator_spec.rb +45 -32
  96. data/spec/generators/formtastic/input/input_generator_spec.rb +124 -0
  97. data/spec/generators/formtastic/install/install_generator_spec.rb +9 -9
  98. data/spec/helpers/action_helper_spec.rb +75 -103
  99. data/spec/helpers/actions_helper_spec.rb +17 -17
  100. data/spec/helpers/form_helper_spec.rb +84 -33
  101. data/spec/helpers/input_helper_spec.rb +333 -285
  102. data/spec/helpers/inputs_helper_spec.rb +167 -121
  103. data/spec/helpers/reflection_helper_spec.rb +3 -3
  104. data/spec/helpers/semantic_errors_helper_spec.rb +23 -23
  105. data/spec/i18n_spec.rb +26 -26
  106. data/spec/input_class_finder_spec.rb +10 -0
  107. data/spec/inputs/base/collections_spec.rb +76 -0
  108. data/spec/inputs/base/validations_spec.rb +480 -0
  109. data/spec/inputs/boolean_input_spec.rb +100 -65
  110. data/spec/inputs/check_boxes_input_spec.rb +200 -101
  111. data/spec/inputs/color_input_spec.rb +85 -0
  112. data/spec/inputs/country_input_spec.rb +20 -20
  113. data/spec/inputs/custom_input_spec.rb +3 -4
  114. data/spec/inputs/datalist_input_spec.rb +61 -0
  115. data/spec/inputs/date_picker_input_spec.rb +449 -0
  116. data/spec/inputs/date_select_input_spec.rb +249 -0
  117. data/spec/inputs/datetime_picker_input_spec.rb +490 -0
  118. data/spec/inputs/datetime_select_input_spec.rb +209 -0
  119. data/spec/inputs/email_input_spec.rb +5 -5
  120. data/spec/inputs/file_input_spec.rb +6 -6
  121. data/spec/inputs/hidden_input_spec.rb +22 -35
  122. data/spec/inputs/include_blank_spec.rb +11 -11
  123. data/spec/inputs/label_spec.rb +62 -25
  124. data/spec/inputs/number_input_spec.rb +112 -112
  125. data/spec/inputs/password_input_spec.rb +5 -5
  126. data/spec/inputs/phone_input_spec.rb +5 -5
  127. data/spec/inputs/placeholder_spec.rb +6 -6
  128. data/spec/inputs/radio_input_spec.rb +99 -55
  129. data/spec/inputs/range_input_spec.rb +66 -66
  130. data/spec/inputs/readonly_spec.rb +50 -0
  131. data/spec/inputs/search_input_spec.rb +5 -5
  132. data/spec/inputs/select_input_spec.rb +170 -170
  133. data/spec/inputs/string_input_spec.rb +68 -16
  134. data/spec/inputs/text_input_spec.rb +16 -16
  135. data/spec/inputs/time_picker_input_spec.rb +455 -0
  136. data/spec/inputs/time_select_input_spec.rb +261 -0
  137. data/spec/inputs/time_zone_input_spec.rb +54 -28
  138. data/spec/inputs/url_input_spec.rb +5 -5
  139. data/spec/inputs/with_options_spec.rb +7 -7
  140. data/spec/localizer_spec.rb +39 -17
  141. data/spec/namespaced_class_finder_spec.rb +79 -0
  142. data/spec/schema.rb +21 -0
  143. data/spec/spec_helper.rb +254 -221
  144. data/spec/support/custom_macros.rb +128 -95
  145. data/spec/support/shared_examples.rb +12 -0
  146. data/spec/support/specialized_class_finder_shared_example.rb +27 -0
  147. data/spec/support/test_environment.rb +26 -10
  148. metadata +177 -238
  149. data/.travis.yml +0 -8
  150. data/Appraisals +0 -11
  151. data/CHANGELOG +0 -371
  152. data/gemfiles/rails-3.0.gemfile +0 -7
  153. data/gemfiles/rails-3.1.gemfile +0 -7
  154. data/gemfiles/rails-3.2.gemfile +0 -7
  155. data/lib/formtastic/helpers/buttons_helper.rb +0 -310
  156. data/lib/formtastic/inputs/base/grouped_collections.rb +0 -77
  157. data/lib/formtastic/util.rb +0 -25
  158. data/lib/tasks/verify_rcov.rb +0 -44
  159. data/spec/helpers/buttons_helper_spec.rb +0 -166
  160. data/spec/helpers/commit_button_helper_spec.rb +0 -530
  161. data/spec/inputs/date_input_spec.rb +0 -227
  162. data/spec/inputs/datetime_input_spec.rb +0 -185
  163. data/spec/inputs/time_input_spec.rb +0 -267
  164. data/spec/support/deferred_garbage_collection.rb +0 -21
@@ -1,53 +1,61 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'boolean input' do
4
+ RSpec.describe 'boolean input' do
5
5
 
6
6
  include FormtasticSpecHelper
7
7
 
8
8
  before do
9
9
  @output_buffer = ''
10
10
  mock_everything
11
-
12
- concat(semantic_form_for(@new_post) do |builder|
13
- concat(builder.input(:allow_comments, :as => :boolean))
14
- end)
15
- end
16
-
17
- it_should_have_input_wrapper_with_class("boolean")
18
- it_should_have_input_wrapper_with_class(:input)
19
- it_should_have_input_wrapper_with_id("post_allow_comments_input")
20
- it_should_apply_error_logic_for_input_type(:boolean)
21
-
22
- it 'should generate a label containing the input' do
23
- output_buffer.should_not have_tag('label.label')
24
- output_buffer.should have_tag('form li label', :count => 1)
25
- output_buffer.should have_tag('form li label[@for="post_allow_comments"]')
26
- output_buffer.should have_tag('form li label', /Allow comments/)
27
- output_buffer.should have_tag('form li label input[@type="checkbox"]', :count => 1)
28
- output_buffer.should have_tag('form li input[@type="hidden"]', :count => 1)
29
- output_buffer.should_not have_tag('form li label input[@type="hidden"]', :count => 1) # invalid HTML5
30
11
  end
31
12
 
32
- it 'should generate a checkbox input' do
33
- output_buffer.should have_tag('form li label input')
34
- output_buffer.should have_tag('form li label input#post_allow_comments')
35
- output_buffer.should have_tag('form li label input[@type="checkbox"]')
36
- output_buffer.should have_tag('form li label input[@name="post[allow_comments]"]')
37
- output_buffer.should have_tag('form li label input[@type="checkbox"][@value="1"]')
38
- end
39
-
40
- it 'should generate a checked input if object.method returns true' do
41
- output_buffer.should have_tag('form li label input[@checked="checked"]')
42
- output_buffer.should have_tag('form li input[@name="post[allow_comments]"]', :count => 2)
43
- output_buffer.should have_tag('form li input#post_allow_comments', :count => 1)
13
+ describe 'generic' do
14
+ before do
15
+ concat(semantic_form_for(@new_post) do |builder|
16
+ concat(builder.input(:allow_comments, :as => :boolean))
17
+ end)
18
+ end
19
+
20
+ it_should_have_input_wrapper_with_class("boolean")
21
+ it_should_have_input_wrapper_with_class(:input)
22
+ it_should_have_input_wrapper_with_id("post_allow_comments_input")
23
+ it_should_apply_error_logic_for_input_type(:boolean)
24
+
25
+ it 'should generate a label containing the input' do
26
+ expect(output_buffer).not_to have_tag('label.label')
27
+ expect(output_buffer).to have_tag('form li label', :count => 1)
28
+ expect(output_buffer).to have_tag('form li label[@for="post_allow_comments"]')
29
+ expect(output_buffer).to have_tag('form li label', :text => /Allow comments/)
30
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"]', :count => 1)
31
+ expect(output_buffer).to have_tag('form li input[@type="hidden"]', :count => 1)
32
+ expect(output_buffer).not_to have_tag('form li label input[@type="hidden"]', :count => 1) # invalid HTML5
33
+ end
34
+
35
+ it 'should not add a "name" attribute to the label' do
36
+ expect(output_buffer).not_to have_tag('form li label[@name]')
37
+ end
38
+
39
+ it 'should generate a checkbox input' do
40
+ expect(output_buffer).to have_tag('form li label input')
41
+ expect(output_buffer).to have_tag('form li label input#post_allow_comments')
42
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"]')
43
+ expect(output_buffer).to have_tag('form li label input[@name="post[allow_comments]"]')
44
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="1"]')
45
+ end
46
+
47
+ it 'should generate a checked input if object.method returns true' do
48
+ expect(output_buffer).to have_tag('form li label input[@checked="checked"]')
49
+ expect(output_buffer).to have_tag('form li input[@name="post[allow_comments]"]', :count => 2)
50
+ expect(output_buffer).to have_tag('form li input#post_allow_comments', :count => 1)
51
+ end
44
52
  end
45
53
 
46
54
  it 'should generate a checked input if :input_html is passed :checked => checked' do
47
55
  concat(semantic_form_for(@new_post) do |builder|
48
56
  concat(builder.input(:answer_comments, :as => :boolean, :input_html => {:checked => 'checked'}))
49
57
  end)
50
- output_buffer.should have_tag('form li label input[@checked="checked"]')
58
+ expect(output_buffer).to have_tag('form li label input[@checked="checked"]')
51
59
  end
52
60
 
53
61
  it 'should name the hidden input with the :name html_option' do
@@ -55,8 +63,8 @@ describe 'boolean input' do
55
63
  concat(builder.input(:answer_comments, :as => :boolean, :input_html => { :name => "foo" }))
56
64
  end)
57
65
 
58
- output_buffer.should have_tag('form li input[@type="checkbox"][@name="foo"]', :count => 1)
59
- output_buffer.should have_tag('form li input[@type="hidden"][@name="foo"]', :count => 1)
66
+ expect(output_buffer).to have_tag('form li input[@type="checkbox"][@name="foo"]', :count => 1)
67
+ expect(output_buffer).to have_tag('form li input[@type="hidden"][@name="foo"]', :count => 1)
60
68
  end
61
69
 
62
70
  it 'should name the hidden input with the :name html_option' do
@@ -64,73 +72,93 @@ describe 'boolean input' do
64
72
  concat(builder.input(:answer_comments, :as => :boolean, :input_html => { :name => "foo" }))
65
73
  end)
66
74
 
67
- output_buffer.should have_tag('form li input[@type="checkbox"][@name="foo"]', :count => 1)
68
- output_buffer.should have_tag('form li input[@type="hidden"][@name="foo"]', :count => 1)
75
+ expect(output_buffer).to have_tag('form li input[@type="checkbox"][@name="foo"]', :count => 1)
76
+ expect(output_buffer).to have_tag('form li input[@type="hidden"][@name="foo"]', :count => 1)
69
77
  end
70
78
 
71
79
  it "should generate a disabled input and hidden input if :input_html is passed :disabled => 'disabled' " do
72
80
  concat(semantic_form_for(@new_post) do |builder|
73
81
  concat(builder.input(:allow_comments, :as => :boolean, :input_html => {:disabled => 'disabled'}))
74
82
  end)
75
- output_buffer.should have_tag('form li label input[@disabled="disabled"]', :count => 1)
76
- output_buffer.should have_tag('form li input[@type="hidden"][@disabled="disabled"]', :count => 1)
83
+ expect(output_buffer).to have_tag('form li label input[@disabled="disabled"]', :count => 1)
84
+ expect(output_buffer).to have_tag('form li input[@type="hidden"][@disabled="disabled"]', :count => 1)
77
85
  end
78
86
 
79
87
  it 'should generate an input[id] with matching label[for] when id passed in :input_html' do
80
88
  concat(semantic_form_for(@new_post) do |builder|
81
89
  concat(builder.input(:allow_comments, :as => :boolean, :input_html => {:id => 'custom_id'}))
82
90
  end)
83
- output_buffer.should have_tag('form li label input[@id="custom_id"]')
84
- output_buffer.should have_tag('form li label[@for="custom_id"]')
91
+ expect(output_buffer).to have_tag('form li label input[@id="custom_id"]')
92
+ expect(output_buffer).to have_tag('form li label[@for="custom_id"]')
85
93
  end
86
94
 
87
95
  it 'should allow checked and unchecked values to be sent' do
88
96
  concat(semantic_form_for(@new_post) do |builder|
89
97
  concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'checked', :unchecked_value => 'unchecked'))
90
98
  end)
91
- output_buffer.should have_tag('form li label input[@type="checkbox"][@value="checked"]:not([@unchecked_value][@checked_value])')
92
- output_buffer.should have_tag('form li input[@type="hidden"][@value="unchecked"]')
93
- output_buffer.should_not have_tag('form li label input[@type="hidden"]') # invalid HTML5
99
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="checked"]:not([@unchecked_value][@checked_value])')
100
+ expect(output_buffer).to have_tag('form li input[@type="hidden"][@value="unchecked"]')
101
+ expect(output_buffer).not_to have_tag('form li label input[@type="hidden"]') # invalid HTML5
94
102
  end
95
103
 
96
104
  it 'should generate a checked input if object.method returns checked value' do
97
- @new_post.stub!(:allow_comments).and_return('yes')
105
+ allow(@new_post).to receive(:allow_comments).and_return('yes')
98
106
 
99
107
  concat(semantic_form_for(@new_post) do |builder|
100
108
  concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
101
109
  end)
102
110
 
103
- output_buffer.should have_tag('form li label input[@type="checkbox"][@value="yes"][@checked="checked"]')
111
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="yes"][@checked="checked"]')
104
112
  end
105
113
 
106
114
  it 'should not generate a checked input if object.method returns unchecked value' do
107
- @new_post.stub!(:allow_comments).and_return('no')
115
+ allow(@new_post).to receive(:allow_comments).and_return('no')
108
116
 
109
117
  concat(semantic_form_for(@new_post) do |builder|
110
118
  concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
111
119
  end)
112
120
 
113
- output_buffer.should have_tag('form li label input[@type="checkbox"][@value="yes"]:not([@checked])')
121
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="yes"]:not([@checked])')
114
122
  end
115
123
 
116
124
  it 'should generate a checked input if object.method returns checked value' do
117
- @new_post.stub!(:allow_comments).and_return('yes')
125
+ allow(@new_post).to receive(:allow_comments).and_return('yes')
118
126
 
119
127
  concat(semantic_form_for(@new_post) do |builder|
120
128
  concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
121
129
  end)
122
130
 
123
- output_buffer.should have_tag('form li label input[@type="checkbox"][@value="yes"][@checked="checked"]')
131
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="yes"][@checked="checked"]')
132
+ end
133
+
134
+ it 'should generate a checked input for boolean database values compared to string checked values' do
135
+ allow(@new_post).to receive(:foo).and_return(1)
136
+
137
+ concat(semantic_form_for(@new_post) do |builder|
138
+ concat(builder.input(:foo, :as => :boolean))
139
+ end)
140
+
141
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="1"][@checked="checked"]')
142
+ end
143
+
144
+ it 'should generate a checked input if object.method returns checked value when inverted' do
145
+ allow(@new_post).to receive(:allow_comments).and_return(0)
146
+
147
+ concat(semantic_form_for(@new_post) do |builder|
148
+ concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 0, :unchecked_value => 1))
149
+ end)
150
+
151
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="0"][@checked="checked"]')
124
152
  end
125
153
 
126
154
  it 'should not generate a checked input if object.method returns unchecked value' do
127
- @new_post.stub!(:allow_comments).and_return('no')
155
+ allow(@new_post).to receive(:allow_comments).and_return('no')
128
156
 
129
157
  concat(semantic_form_for(@new_post) do |builder|
130
158
  concat(builder.input(:allow_comments, :as => :boolean, :checked_value => 'yes', :unchecked_value => 'no'))
131
159
  end)
132
160
 
133
- output_buffer.should have_tag('form li label input[@type="checkbox"][@value="yes"]:not([@checked])')
161
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"][@value="yes"]:not([@checked])')
134
162
  end
135
163
 
136
164
  it 'should generate a label and a checkbox even if no object is given' do
@@ -138,13 +166,21 @@ describe 'boolean input' do
138
166
  concat(builder.input(:allow_comments, :as => :boolean))
139
167
  end)
140
168
 
141
- output_buffer.should have_tag('form li label[@for="project_allow_comments"]')
142
- output_buffer.should have_tag('form li label', /Allow comments/)
143
- output_buffer.should have_tag('form li label input[@type="checkbox"]')
169
+ expect(output_buffer).to have_tag('form li label[@for="project_allow_comments"]')
170
+ expect(output_buffer).to have_tag('form li label', :text => /Allow comments/)
171
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"]')
144
172
 
145
- output_buffer.should have_tag('form li label input#project_allow_comments')
146
- output_buffer.should have_tag('form li label input[@type="checkbox"]')
147
- output_buffer.should have_tag('form li label input[@name="project[allow_comments]"]')
173
+ expect(output_buffer).to have_tag('form li label input#project_allow_comments')
174
+ expect(output_buffer).to have_tag('form li label input[@type="checkbox"]')
175
+ expect(output_buffer).to have_tag('form li label input[@name="project[allow_comments]"]')
176
+ end
177
+
178
+ it 'should not pass input_html options down to the label html' do
179
+ concat(semantic_form_for(@new_post) do |builder|
180
+ builder.input(:title, :as => :boolean, :input_html => { :tabindex => 2, :x => "X" })
181
+ end)
182
+ expect(output_buffer).not_to have_tag('label[tabindex]')
183
+ expect(output_buffer).not_to have_tag('label[x]')
148
184
  end
149
185
 
150
186
  context "when required" do
@@ -154,7 +190,7 @@ describe 'boolean input' do
154
190
  concat(semantic_form_for(@new_post) do |builder|
155
191
  concat(builder.input(:title, :as => :boolean, :required => true))
156
192
  end)
157
- output_buffer.should have_tag("input[@required]")
193
+ expect(output_buffer).to have_tag("input[@required]")
158
194
  end
159
195
  end
160
196
 
@@ -163,7 +199,7 @@ describe 'boolean input' do
163
199
  concat(semantic_form_for(@new_post) do |builder|
164
200
  concat(builder.input(:title, :as => :boolean))
165
201
  end)
166
- output_buffer.should_not have_tag("input[@required]")
202
+ expect(output_buffer).not_to have_tag("input[@required]")
167
203
  end
168
204
  end
169
205
 
@@ -199,21 +235,20 @@ describe 'boolean input' do
199
235
  end
200
236
 
201
237
  it 'should index the id of the wrapper' do
202
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
238
+ expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
203
239
  end
204
240
 
205
241
  it 'should index the id of the input tag' do
206
- output_buffer.should have_tag("input#post_author_attributes_3_name")
242
+ expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
207
243
  end
208
244
 
209
245
  it 'should index the name of the hidden input' do
210
- output_buffer.should have_tag("input[@type='hidden'][@name='post[author_attributes][3][name]']")
246
+ expect(output_buffer).to have_tag("input[@type='hidden'][@name='post[author_attributes][3][name]']")
211
247
  end
212
248
 
213
249
  it 'should index the name of the checkbox input' do
214
- output_buffer.should have_tag("input[@type='checkbox'][@name='post[author_attributes][3][name]']")
250
+ expect(output_buffer).to have_tag("input[@type='checkbox'][@name='post[author_attributes][3][name]']")
215
251
  end
216
252
 
217
253
  end
218
-
219
254
  end