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,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