formtastic 2.1.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,530 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
-
4
- describe 'Formtastic::FormBuilder#commit_button' do
5
-
6
- include FormtasticSpecHelper
7
-
8
- before do
9
- @output_buffer = ''
10
- mock_everything
11
- end
12
-
13
- describe 'when the object responds to :persisted? (ActiveModel)' do
14
-
15
- before do
16
- @new_post.stub(:respond_to?).with(:to_model).and_return("X")
17
- @new_post.stub(:respond_to?).with(:persisted?).and_return(true)
18
- @new_post.stub(:respond_to?).with(:new_record?).and_return(false)
19
- end
20
-
21
- it 'should call :persisted?' do
22
- with_deprecation_silenced do
23
- with_config :i18n_lookups_by_default, false do
24
- @new_post.should_receive(:persisted?)
25
- @new_post.should_not_receive(:new_record?)
26
- semantic_form_for(@new_post) do |builder|
27
- concat(builder.commit_button)
28
- end
29
- end
30
- end
31
- end
32
-
33
- end
34
-
35
- describe 'when not persisted' do
36
-
37
- before do
38
- @new_post.stub(:respond_to?).with(:to_model).and_return("X")
39
- @new_post.stub(:respond_to?).with(:persisted?).and_return(false)
40
- @new_post.stub(:respond_to?).with(:new_record?).and_return(false)
41
- end
42
-
43
- it 'should have a submit button label' do
44
- with_deprecation_silenced do
45
- with_config :i18n_lookups_by_default, false do
46
- concat(semantic_form_for(@new_post) do |builder|
47
- concat(builder.commit_button)
48
- end)
49
- end
50
- end
51
-
52
- output_buffer.should have_tag('.commit input[@value="Submit Post"]')
53
- end
54
- end
55
-
56
- describe 'when used on any record' do
57
-
58
- before do
59
- @new_post.stub!(:new_record?).and_return(false)
60
- with_deprecation_silenced do
61
- concat(semantic_form_for(@new_post) do |builder|
62
- concat(builder.commit_button)
63
- end)
64
- end
65
- end
66
-
67
- it 'should render a commit li' do
68
- output_buffer.should have_tag('li.commit')
69
- end
70
-
71
- it 'should render a button li' do
72
- output_buffer.should have_tag('li.button')
73
- end
74
-
75
- it 'should render an input with a type attribute of "submit"' do
76
- output_buffer.should have_tag('li.commit input[@type="submit"]')
77
- end
78
-
79
- it 'should render an input with a name attribute of "commit"' do
80
- output_buffer.should have_tag('li.commit input[@name="commit"]')
81
- end
82
-
83
- it 'should pass options given in :button_html to the button' do
84
- @new_post.stub!(:new_record?).and_return(false)
85
- with_deprecation_silenced do
86
- concat(semantic_form_for(@new_post) do |builder|
87
- concat(builder.commit_button('text', :button_html => {:class => 'my_class', :id => 'my_id'}))
88
- end)
89
- end
90
-
91
- output_buffer.should have_tag('li.commit input#my_id')
92
- output_buffer.should have_tag('li.commit input.my_class')
93
- end
94
-
95
- end
96
-
97
- describe "its accesskey" do
98
-
99
- it 'should allow nil default' do
100
- with_config :default_commit_button_accesskey, nil do
101
- output_buffer.should_not have_tag('li.commit input[@accesskey]')
102
- end
103
- end
104
-
105
- it 'should use the default if set' do
106
- with_config :default_commit_button_accesskey, 's' do
107
- @new_post.stub!(:new_record?).and_return(false)
108
- with_deprecation_silenced do
109
- concat(semantic_form_for(@new_post) do |builder|
110
- concat(builder.commit_button('text', :button_html => {}))
111
- end)
112
- end
113
- output_buffer.should have_tag('li.commit input[@accesskey="s"]')
114
- end
115
- end
116
-
117
- it 'should use the value set in options over the default' do
118
- with_config :default_commit_button_accesskey, 's' do
119
- @new_post.stub!(:new_record?).and_return(false)
120
- with_deprecation_silenced do
121
- concat(semantic_form_for(@new_post) do |builder|
122
- concat(builder.commit_button('text', :accesskey => 'o'))
123
- end)
124
- end
125
- output_buffer.should_not have_tag('li.commit input[@accesskey="s"]')
126
- output_buffer.should have_tag('li.commit input[@accesskey="o"]')
127
- end
128
- end
129
-
130
- it 'should use the value set in button_html over options' do
131
- with_config :default_commit_button_accesskey, 's' do
132
- @new_post.stub!(:new_record?).and_return(false)
133
- with_deprecation_silenced do
134
- concat(semantic_form_for(@new_post) do |builder|
135
- concat(builder.commit_button('text', :accesskey => 'o', :button_html => {:accesskey => 't'}))
136
- end)
137
- end
138
- output_buffer.should_not have_tag('li.commit input[@accesskey="s"]')
139
- output_buffer.should_not have_tag('li.commit input[@accesskey="o"]')
140
- output_buffer.should have_tag('li.commit input[@accesskey="t"]')
141
- end
142
- end
143
-
144
- end
145
-
146
- describe 'when the first option is a string and the second is a hash' do
147
-
148
- before do
149
- @new_post.stub!(:new_record?).and_return(false)
150
- with_deprecation_silenced do
151
- concat(semantic_form_for(@new_post) do |builder|
152
- concat(builder.commit_button("a string", :button_html => { :class => "pretty"}))
153
- end)
154
- end
155
- end
156
-
157
- it "should render the string as the value of the button" do
158
- output_buffer.should have_tag('li input[@value="a string"]')
159
- end
160
-
161
- it "should deal with the options hash" do
162
- output_buffer.should have_tag('li input.pretty')
163
- end
164
-
165
- end
166
-
167
- describe 'when the first option is a hash' do
168
-
169
- before do
170
- @new_post.stub!(:new_record?).and_return(false)
171
- with_deprecation_silenced do
172
- concat(semantic_form_for(@new_post) do |builder|
173
- concat(builder.commit_button(:button_html => { :class => "pretty"}))
174
- end)
175
- end
176
- end
177
-
178
- it "should deal with the options hash" do
179
- output_buffer.should have_tag('li input.pretty')
180
- end
181
-
182
- end
183
-
184
- describe 'label' do
185
-
186
- # No object
187
- describe 'when used without object' do
188
- describe 'when explicit label is provided' do
189
- it 'should render an input with the explicitly specified label' do
190
- with_deprecation_silenced do
191
- concat(semantic_form_for(:post, :url => 'http://example.com') do |builder|
192
- concat(builder.commit_button("Click!"))
193
- end)
194
- end
195
- output_buffer.should have_tag('li.commit input[@value="Click!"][@class~="submit"]')
196
- end
197
- end
198
-
199
- describe 'when no explicit label is provided' do
200
- describe 'when no I18n-localized label is provided' do
201
- before do
202
- ::I18n.backend.store_translations :en, :formtastic => {:submit => 'Submit %{model}'}
203
- end
204
-
205
- after do
206
- ::I18n.backend.reload!
207
- end
208
-
209
- it 'should render an input with default I18n-localized label (fallback)' do
210
- with_deprecation_silenced do
211
- concat(semantic_form_for(:post, :url => 'http://example.com') do |builder|
212
- concat(builder.commit_button)
213
- end)
214
- end
215
- output_buffer.should have_tag('li.commit input[@value="Submit Post"][@class~="submit"]')
216
- end
217
- end
218
-
219
- describe 'when I18n-localized label is provided' do
220
- before do
221
- ::I18n.backend.store_translations :en,
222
- :formtastic => {
223
- :actions => {
224
- :submit => 'Custom Submit',
225
- }
226
- }
227
- end
228
-
229
- after do
230
- ::I18n.backend.reload!
231
- end
232
-
233
- it 'should render an input with localized label (I18n)' do
234
- with_config :i18n_lookups_by_default, true do
235
- ::I18n.backend.store_translations :en,
236
- :formtastic => {
237
- :actions => {
238
- :post => {
239
- :submit => 'Custom Submit %{model}'
240
- }
241
- }
242
- }
243
- with_deprecation_silenced do
244
- concat(semantic_form_for(:post, :url => 'http://example.com') do |builder|
245
- concat(builder.commit_button)
246
- end)
247
- end
248
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Submit Post"][@class~="submit"]})
249
- end
250
- end
251
-
252
- it 'should render an input with anoptional localized label (I18n) - if first is not set' do
253
- with_config :i18n_lookups_by_default, true do
254
- with_deprecation_silenced do
255
- concat(semantic_form_for(:post, :url => 'http://example.com') do |builder|
256
- concat(builder.commit_button)
257
- end)
258
- end
259
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Submit"][@class~="submit"]})
260
- end
261
- end
262
-
263
- end
264
- end
265
- end
266
-
267
- # New record
268
- describe 'when used on a new record' do
269
- before do
270
- @new_post.stub!(:new_record?).and_return(true)
271
- end
272
-
273
- describe 'when explicit label is provided' do
274
- it 'should render an input with the explicitly specified label' do
275
- with_deprecation_silenced do
276
- concat(semantic_form_for(@new_post) do |builder|
277
- concat(builder.commit_button("Click!"))
278
- end)
279
- end
280
- output_buffer.should have_tag('li.commit input[@value="Click!"][@class~="create"]')
281
- end
282
- end
283
-
284
- describe 'when no explicit label is provided' do
285
- describe 'when no I18n-localized label is provided' do
286
- before do
287
- ::I18n.backend.store_translations :en, :formtastic => {:create => 'Create %{model}'}
288
- end
289
-
290
- after do
291
- ::I18n.backend.reload!
292
- end
293
-
294
- it 'should render an input with default I18n-localized label (fallback)' do
295
- with_deprecation_silenced do
296
- concat(semantic_form_for(@new_post) do |builder|
297
- concat(builder.commit_button)
298
- end)
299
- end
300
- output_buffer.should have_tag('li.commit input[@value="Create Post"][@class~="create"]')
301
- end
302
- end
303
-
304
- describe 'when I18n-localized label is provided' do
305
- before do
306
- ::I18n.backend.store_translations :en,
307
- :formtastic => {
308
- :actions => {
309
- :create => 'Custom Create',
310
- }
311
- }
312
- end
313
-
314
- after do
315
- ::I18n.backend.reload!
316
- end
317
-
318
- it 'should render an input with localized label (I18n)' do
319
- with_config :i18n_lookups_by_default, true do
320
- ::I18n.backend.store_translations :en,
321
- :formtastic => {
322
- :actions => {
323
- :post => {
324
- :create => 'Custom Create %{model}'
325
- }
326
- }
327
- }
328
- with_deprecation_silenced do
329
- concat(semantic_form_for(@new_post) do |builder|
330
- concat(builder.commit_button)
331
- end)
332
- end
333
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Create Post"][@class~="create"]})
334
- end
335
- end
336
-
337
- it 'should render an input with anoptional localized label (I18n) - if first is not set' do
338
- with_config :i18n_lookups_by_default, true do
339
- with_deprecation_silenced do
340
- concat(semantic_form_for(@new_post) do |builder|
341
- concat(builder.commit_button)
342
- end)
343
- end
344
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Create"][@class~="create"]})
345
- end
346
- end
347
-
348
- end
349
- end
350
- end
351
-
352
- # Existing record
353
- describe 'when used on an existing record' do
354
- before do
355
- @new_post.stub!(:persisted?).and_return(true)
356
- end
357
-
358
- describe 'when explicit label is provided' do
359
- it 'should render an input with the explicitly specified label' do
360
- with_deprecation_silenced do
361
- concat(semantic_form_for(@new_post) do |builder|
362
- concat(builder.commit_button("Click!"))
363
- end)
364
- end
365
- output_buffer.should have_tag('li.commit input[@value="Click!"][@class~="update"]')
366
- end
367
- end
368
-
369
- describe 'when no explicit label is provided' do
370
- describe 'when no I18n-localized label is provided' do
371
- before do
372
- ::I18n.backend.store_translations :en, :formtastic => {:update => 'Save %{model}'}
373
- end
374
-
375
- after do
376
- ::I18n.backend.reload!
377
- end
378
-
379
- it 'should render an input with default I18n-localized label (fallback)' do
380
- with_deprecation_silenced do
381
- concat(semantic_form_for(@new_post) do |builder|
382
- concat(builder.commit_button)
383
- end)
384
- end
385
- output_buffer.should have_tag('li.commit input[@value="Save Post"][@class~="update"]')
386
- end
387
- end
388
-
389
- describe 'when I18n-localized label is provided' do
390
- before do
391
- ::I18n.backend.reload!
392
- ::I18n.backend.store_translations :en,
393
- :formtastic => {
394
- :actions => {
395
- :update => 'Custom Save',
396
- }
397
- }
398
- end
399
-
400
- after do
401
- ::I18n.backend.reload!
402
- end
403
-
404
- it 'should render an input with localized label (I18n)' do
405
- with_config :i18n_lookups_by_default, true do
406
- ::I18n.backend.store_translations :en,
407
- :formtastic => {
408
- :actions => {
409
- :post => {
410
- :update => 'Custom Save %{model}'
411
- }
412
- }
413
- }
414
- with_deprecation_silenced do
415
- concat(semantic_form_for(@new_post) do |builder|
416
- concat(builder.commit_button)
417
- end)
418
- end
419
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Save Post"][@class~="update"]})
420
- end
421
- end
422
-
423
- it 'should render an input with anoptional localized label (I18n) - if first is not set' do
424
- with_config :i18n_lookups_by_default, true do
425
- with_deprecation_silenced do
426
- concat(semantic_form_for(@new_post) do |builder|
427
- concat(builder.commit_button)
428
- end)
429
- end
430
- output_buffer.should have_tag(%Q{li.commit input[@value="Custom Save"][@class~="update"]})
431
- ::I18n.backend.store_translations :en, :formtastic => {}
432
- end
433
- end
434
-
435
- end
436
- end
437
- end
438
- end
439
-
440
- describe 'when the model is two words' do
441
- before do
442
- output_buffer = ''
443
- class ::UserPost
444
- extend ActiveModel::Naming if defined?(ActiveModel::Naming)
445
- include ActiveModel::Conversion if defined?(ActiveModel::Conversion)
446
-
447
- def id
448
- end
449
-
450
- def persisted?
451
- end
452
-
453
- # Rails does crappy human_name
454
- def self.human_name
455
- "User post"
456
- end
457
- end
458
- @new_user_post = ::UserPost.new
459
-
460
- @new_user_post.stub!(:new_record?).and_return(true)
461
- with_deprecation_silenced do
462
- concat(semantic_form_for(@new_user_post, :url => '') do |builder|
463
- concat(builder.commit_button())
464
- end)
465
- end
466
- end
467
-
468
- it "should render the string as the value of the button" do
469
- output_buffer.should have_tag('li input[@value="Create User post"]')
470
- end
471
-
472
- end
473
-
474
- describe ':wrapper_html option' do
475
-
476
- describe 'when provided' do
477
- it 'should be passed down to the li tag' do
478
- with_deprecation_silenced do
479
- concat(semantic_form_for(@new_post) do |builder|
480
- concat(builder.commit_button('text', :wrapper_html => {:id => :another_id}))
481
- end)
482
- end
483
- output_buffer.should have_tag("form li#another_id")
484
- end
485
-
486
- it 'should append given classes to li default classes' do
487
- with_deprecation_silenced do
488
- concat(semantic_form_for(@new_post) do |builder|
489
- concat(builder.commit_button('text', :wrapper_html => {:class => :another_class}))
490
- end)
491
- end
492
- output_buffer.should have_tag("form li.commit")
493
- output_buffer.should have_tag("form li.another_class")
494
- end
495
-
496
- it 'should allow classes to be an array' do
497
- with_deprecation_silenced do
498
- concat(semantic_form_for(@new_post) do |builder|
499
- concat(builder.commit_button('text', :wrapper_html => {:class => [ :my_class, :another_class ]}))
500
- end)
501
- end
502
- output_buffer.should have_tag("form li.commit")
503
- output_buffer.should have_tag("form li.my_class")
504
- output_buffer.should have_tag("form li.another_class")
505
- end
506
- end
507
-
508
- describe 'when not provided' do
509
- it 'should use default class' do
510
- with_deprecation_silenced do
511
- concat(semantic_form_for(@new_post) do |builder|
512
- concat(builder.commit_button('text'))
513
- end)
514
- end
515
- output_buffer.should have_tag("form li.commit.button")
516
- end
517
-
518
- it 'should use default id' do
519
- with_deprecation_silenced do
520
- concat(semantic_form_for(@new_post) do |builder|
521
- concat(builder.commit_button('text'))
522
- end)
523
- end
524
- output_buffer.should have_tag("form li.commit.button input#post_submit")
525
- end
526
- end
527
-
528
- end
529
-
530
- end