formtastic 0.9.7 → 0.9.8
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.
- data/README.textile +69 -12
- data/Rakefile +1 -1
- data/generators/form/templates/view__form.html.erb +2 -2
- data/generators/form/templates/view__form.html.haml +2 -2
- data/generators/formtastic/templates/formtastic.css +58 -50
- data/generators/formtastic/templates/formtastic.rb +3 -0
- data/generators/formtastic/templates/formtastic_changes.css +5 -1
- data/lib/formtastic.rb +108 -37
- data/lib/formtastic/layout_helper.rb +10 -0
- data/rails/init.rb +2 -0
- data/spec/commit_button_spec.rb +26 -4
- data/spec/custom_macros.rb +0 -101
- data/spec/form_helper_spec.rb +6 -0
- data/spec/input_spec.rb +34 -0
- data/spec/inputs/boolean_input_spec.rb +9 -5
- data/spec/inputs/check_boxes_input_spec.rb +33 -10
- data/spec/inputs/date_input_spec.rb +137 -25
- data/spec/inputs/datetime_input_spec.rb +177 -54
- data/spec/inputs/hidden_input_spec.rb +9 -0
- data/spec/inputs/radio_input_spec.rb +15 -9
- data/spec/inputs/select_input_spec.rb +113 -83
- data/spec/inputs/time_input_spec.rb +151 -25
- data/spec/inputs/time_zone_input_spec.rb +4 -2
- data/spec/layout_helper_spec.rb +29 -0
- data/spec/semantic_errors_spec.rb +98 -0
- data/spec/spec_helper.rb +26 -18
- metadata +50 -22
data/rails/init.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
require File.join(File.dirname(__FILE__), *%w[.. lib formtastic])
|
3
|
+
require File.join(File.dirname(__FILE__), *%w[.. lib formtastic layout_helper])
|
3
4
|
ActionView::Base.send :include, Formtastic::SemanticFormHelper
|
5
|
+
ActionView::Base.send :include, Formtastic::LayoutHelper
|
data/spec/commit_button_spec.rb
CHANGED
@@ -121,9 +121,6 @@ describe 'SemanticFormBuilder#commit_button' do
|
|
121
121
|
end
|
122
122
|
|
123
123
|
describe 'label' do
|
124
|
-
before do
|
125
|
-
::Post.stub!(:human_name).and_return('Post')
|
126
|
-
end
|
127
124
|
|
128
125
|
# No object
|
129
126
|
describe 'when used without object' do
|
@@ -240,6 +237,10 @@ describe 'SemanticFormBuilder#commit_button' do
|
|
240
237
|
}
|
241
238
|
::Formtastic::SemanticFormBuilder.i18n_lookups_by_default = true
|
242
239
|
end
|
240
|
+
|
241
|
+
after do
|
242
|
+
::I18n.backend.store_translations :en, :formtastic => nil
|
243
|
+
end
|
243
244
|
|
244
245
|
it 'should render an input with localized label (I18n)' do
|
245
246
|
semantic_form_for(@new_post) do |builder|
|
@@ -261,6 +262,8 @@ describe 'SemanticFormBuilder#commit_button' do
|
|
261
262
|
concat(builder.commit_button)
|
262
263
|
end
|
263
264
|
output_buffer.should have_tag(%Q{li.commit input[@value="Custom Create"][@class~="create"]})
|
265
|
+
::I18n.backend.store_translations :en, :formtastic => nil
|
266
|
+
|
264
267
|
end
|
265
268
|
|
266
269
|
end
|
@@ -334,11 +337,30 @@ describe 'SemanticFormBuilder#commit_button' do
|
|
334
337
|
concat(builder.commit_button)
|
335
338
|
end
|
336
339
|
output_buffer.should have_tag(%Q{li.commit input[@value="Custom Save"][@class~="update"]})
|
340
|
+
::I18n.backend.store_translations :en, :formtastic => {}
|
337
341
|
end
|
338
342
|
|
339
343
|
end
|
340
344
|
end
|
341
345
|
end
|
342
346
|
end
|
343
|
-
|
347
|
+
|
348
|
+
describe 'when the model is two words' do
|
349
|
+
before do
|
350
|
+
output_buffer = ''
|
351
|
+
class ::UserPost; def id; end; def self.human_name; "Userpost"; end; end # Rails does crappy human_name
|
352
|
+
@new_user_post = ::UserPost.new
|
353
|
+
|
354
|
+
@new_user_post.stub!(:new_record?).and_return(true)
|
355
|
+
semantic_form_for(@new_user_post, :url => '') do |builder|
|
356
|
+
concat(builder.commit_button())
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
it "should render the string as the value of the button" do
|
361
|
+
output_buffer.should have_tag('li input[@value="Create User post"]')
|
362
|
+
end
|
363
|
+
|
364
|
+
end
|
365
|
+
|
344
366
|
end
|
data/spec/custom_macros.rb
CHANGED
@@ -224,107 +224,6 @@ module CustomMacros
|
|
224
224
|
end
|
225
225
|
end
|
226
226
|
|
227
|
-
def it_should_select_existing_datetime_else_current(*datetime_parts)
|
228
|
-
describe "default value" do
|
229
|
-
before do
|
230
|
-
@new_post.should_receive(:publish_at=).any_number_of_times
|
231
|
-
end
|
232
|
-
|
233
|
-
describe "when attribute value is present" do
|
234
|
-
before do
|
235
|
-
@output_buffer = ''
|
236
|
-
publish_at_value = 1.year.ago + 2.month + 3.day + 4.hours + 5.minutes # No comment =)
|
237
|
-
@new_post.stub!(:publish_at).and_return(publish_at_value)
|
238
|
-
|
239
|
-
semantic_form_for(@new_post) do |builder|
|
240
|
-
concat(builder.input(:publish_at, :as => :datetime))
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
it "should select the present value by default" do
|
245
|
-
# puts output_buffer
|
246
|
-
output_buffer.should have_tag("form li select#post_publish_at_1i option[@selected='selected'][@value='#{@new_post.publish_at.year}']") if datetime_parts.include?(:year)
|
247
|
-
output_buffer.should have_tag("form li select#post_publish_at_2i option[@selected='selected'][@value='#{@new_post.publish_at.month}']") if datetime_parts.include?(:month)
|
248
|
-
output_buffer.should have_tag("form li select#post_publish_at_3i option[@selected='selected'][@value='#{@new_post.publish_at.day}']") if datetime_parts.include?(:day)
|
249
|
-
output_buffer.should have_tag("form li select#post_publish_at_4i option[@selected='selected'][@value='#{@new_post.publish_at.strftime("%H")}']") if datetime_parts.include?(:hour)
|
250
|
-
output_buffer.should have_tag("form li select#post_publish_at_5i option[@selected='selected'][@value='#{@new_post.publish_at.strftime("%M")}']") if datetime_parts.include?(:minute)
|
251
|
-
#output_buffer.should have_tag("form li select#post_publish_at_6i option[@selected='selected'][@value='#{@new_post.publish_at.sec}']") if datetime_parts.include?(:second)
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
describe "when no attribute value is present" do
|
256
|
-
before do
|
257
|
-
@output_buffer = ''
|
258
|
-
@new_post.stub!(:publish_at).and_return(nil)
|
259
|
-
@current_time = ::Time.now
|
260
|
-
|
261
|
-
semantic_form_for(@new_post) do |builder|
|
262
|
-
concat(builder.input(:publish_at, :as => :datetime))
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
it "should select the current day/time by default" do
|
267
|
-
# puts output_buffer
|
268
|
-
output_buffer.should have_tag("form li select#post_publish_at_1i option[@selected='selected'][@value='#{@current_time.year}']") if datetime_parts.include?(:year)
|
269
|
-
output_buffer.should have_tag("form li select#post_publish_at_2i option[@selected='selected'][@value='#{@current_time.month}']") if datetime_parts.include?(:month)
|
270
|
-
output_buffer.should have_tag("form li select#post_publish_at_3i option[@selected='selected'][@value='#{@current_time.day}']") if datetime_parts.include?(:day)
|
271
|
-
output_buffer.should have_tag("form li select#post_publish_at_4i option[@selected='selected'][@value='#{@current_time.strftime("%H")}']") if datetime_parts.include?(:hour)
|
272
|
-
output_buffer.should have_tag("form li select#post_publish_at_5i option[@selected='selected'][@value='#{@current_time.strftime("%M")}']") if datetime_parts.include?(:minute)
|
273
|
-
#output_buffer.should have_tag("form li select#post_publish_at_6i option[@selected='selected'][@value='#{@custom_default_time.sec}']") if datetime_parts.include?(:second)
|
274
|
-
end
|
275
|
-
|
276
|
-
# TODO: Scenario when current time is not a possible choice (because of specified date/time ranges)?
|
277
|
-
end
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
def it_should_select_explicit_default_value_if_set(*datetime_parts)
|
282
|
-
describe 'when :selected is set' do
|
283
|
-
before do
|
284
|
-
@output_buffer = ''
|
285
|
-
end
|
286
|
-
|
287
|
-
# Note: Not possible to override default selected value for time_zone input
|
288
|
-
# without overriding Rails core helper. This Rails helper works "a bit different". =/
|
289
|
-
#
|
290
|
-
describe "no selected items" do
|
291
|
-
before do
|
292
|
-
@default_time = 2.days.ago
|
293
|
-
@new_post.stub!(:publish_at).and_return(@default_time)
|
294
|
-
|
295
|
-
semantic_form_for(@new_post) do |builder|
|
296
|
-
concat(builder.input(:publish_at, :as => :time_zone, :selected => nil))
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
it 'should not have any selected item(s)' do
|
301
|
-
output_buffer.should_not have_tag("form li select#post_publish_at_1i option[@selected='selected']")
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
describe "single selected item" do
|
306
|
-
before do
|
307
|
-
@custom_default_time = 5.days.ago
|
308
|
-
@new_post.stub!(:publish_at).and_return(2.days.ago)
|
309
|
-
|
310
|
-
semantic_form_for(@new_post) do |builder|
|
311
|
-
concat(builder.input(:publish_at, :as => :datetime, :selected => @custom_default_time))
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should select the specified value" do
|
316
|
-
output_buffer.should have_tag("form li select#post_publish_at_1i option[@selected='selected'][@value='#{@custom_default_time.year}']") if datetime_parts.include?(:year)
|
317
|
-
output_buffer.should have_tag("form li select#post_publish_at_2i option[@selected='selected'][@value='#{@custom_default_time.month}']") if datetime_parts.include?(:month)
|
318
|
-
output_buffer.should have_tag("form li select#post_publish_at_3i option[@selected='selected'][@value='#{@custom_default_time.day}']") if datetime_parts.include?(:day)
|
319
|
-
output_buffer.should have_tag("form li select#post_publish_at_4i option[@selected='selected'][@value='#{@custom_default_time.strftime("%H")}']") if datetime_parts.include?(:hour)
|
320
|
-
output_buffer.should have_tag("form li select#post_publish_at_5i option[@selected='selected'][@value='#{@custom_default_time.strftime("%M")}']") if datetime_parts.include?(:minute)
|
321
|
-
#output_buffer.should have_tag("form li select#post_publish_at_6i option[@selected='selected'][@value='#{@custom_default_time.sec}']") if datetime_parts.include?(:second)
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
end
|
326
|
-
end
|
327
|
-
|
328
227
|
def it_should_use_the_collection_when_provided(as, countable)
|
329
228
|
describe 'when the :collection option is provided' do
|
330
229
|
|
data/spec/form_helper_spec.rb
CHANGED
@@ -40,6 +40,12 @@ describe 'SemanticFormHelper' do
|
|
40
40
|
output_buffer.should have_tag("form.post")
|
41
41
|
end
|
42
42
|
|
43
|
+
it 'adds a namespaced class to the generated form' do
|
44
|
+
semantic_form_for(::Namespaced::Post.new, :url => '/hello') do |builder|
|
45
|
+
end
|
46
|
+
output_buffer.should have_tag("form.namespaced_post")
|
47
|
+
end
|
48
|
+
|
43
49
|
describe 'allows :html options' do
|
44
50
|
before(:each) do
|
45
51
|
semantic_form_for(:post, ::Post.new, :url => '/hello', :html => { :id => "something-special", :class => "something-extra", :multipart => true }) do |builder|
|
data/spec/input_spec.rb
CHANGED
@@ -399,6 +399,26 @@ describe 'SemanticFormBuilder#input' do
|
|
399
399
|
end
|
400
400
|
|
401
401
|
describe 'when not provided' do
|
402
|
+
describe 'when localized label is provided' do
|
403
|
+
describe 'and object is given' do
|
404
|
+
describe 'and label_str_method not default' do
|
405
|
+
it 'should render a label with localized label (I18n)' do
|
406
|
+
with_config :label_str_method, :capitalize do
|
407
|
+
@localized_label_text = 'Localized title'
|
408
|
+
@new_post.stub!(:meta_description)
|
409
|
+
@new_post.class.should_receive(:human_attribute_name).with('meta_description').and_return(@localized_label_text)
|
410
|
+
|
411
|
+
semantic_form_for(@new_post) do |builder|
|
412
|
+
concat(builder.input(:meta_description))
|
413
|
+
end
|
414
|
+
|
415
|
+
output_buffer.should have_tag('form li label', @localized_label_text)
|
416
|
+
end
|
417
|
+
end
|
418
|
+
end
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
402
422
|
describe 'when localized label is NOT provided' do
|
403
423
|
describe 'and object is not given' do
|
404
424
|
it 'should default the humanized method name, passing it down to the label tag' do
|
@@ -424,6 +444,20 @@ describe 'SemanticFormBuilder#input' do
|
|
424
444
|
output_buffer.should have_tag("form li label", /#{'meta_description'.humanize}/)
|
425
445
|
end
|
426
446
|
end
|
447
|
+
|
448
|
+
describe 'and object is given with label_str_method set to :capitalize' do
|
449
|
+
it 'should capitalize method name, passing it down to the label tag' do
|
450
|
+
with_config :label_str_method, :capitalize do
|
451
|
+
@new_post.stub!(:meta_description)
|
452
|
+
|
453
|
+
semantic_form_for(@new_post) do |builder|
|
454
|
+
concat(builder.input(:meta_description))
|
455
|
+
end
|
456
|
+
|
457
|
+
output_buffer.should have_tag("form li label", /#{'meta_description'.capitalize}/)
|
458
|
+
end
|
459
|
+
end
|
460
|
+
end
|
427
461
|
end
|
428
462
|
|
429
463
|
describe 'when localized label is provided' do
|
@@ -65,8 +65,10 @@ describe 'boolean input' do
|
|
65
65
|
before do
|
66
66
|
@new_post.stub!(:allow_comments).and_return(true)
|
67
67
|
|
68
|
-
|
69
|
-
|
68
|
+
with_deprecation_silenced do
|
69
|
+
semantic_form_for(@new_post) do |builder|
|
70
|
+
concat(builder.input(:allow_comments, :as => :boolean, :selected => false))
|
71
|
+
end
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
@@ -78,9 +80,11 @@ describe 'boolean input' do
|
|
78
80
|
describe "selected" do
|
79
81
|
before do
|
80
82
|
@new_post.stub!(:allow_comments).and_return(false)
|
81
|
-
|
82
|
-
|
83
|
-
|
83
|
+
|
84
|
+
with_deprecation_silenced do
|
85
|
+
semantic_form_for(@new_post) do |builder|
|
86
|
+
concat(builder.input(:allow_comments, :as => :boolean, :selected => true))
|
87
|
+
end
|
84
88
|
end
|
85
89
|
end
|
86
90
|
|
@@ -22,10 +22,15 @@ describe 'check_boxes input' do
|
|
22
22
|
it_should_call_find_on_association_class_when_no_collection_is_provided(:check_boxes)
|
23
23
|
it_should_use_the_collection_when_provided(:check_boxes, 'input[@type="checkbox"]')
|
24
24
|
|
25
|
-
it 'should generate a legend
|
26
|
-
output_buffer.should have_tag('form li fieldset legend.label')
|
27
|
-
output_buffer.should have_tag('form li fieldset legend.label', /Posts/)
|
25
|
+
it 'should generate a legend containing a label with text for the input' do
|
26
|
+
output_buffer.should have_tag('form li fieldset legend.label label')
|
27
|
+
output_buffer.should have_tag('form li fieldset legend.label label', /Posts/)
|
28
28
|
end
|
29
|
+
|
30
|
+
it 'should not link the label within the legend to any input' do
|
31
|
+
output_buffer.should_not have_tag('form li fieldset legend label[@for^="author_post_ids_"]')
|
32
|
+
end
|
33
|
+
|
29
34
|
|
30
35
|
it 'should generate an ordered list with a list item for each choice' do
|
31
36
|
output_buffer.should have_tag('form li fieldset ol')
|
@@ -110,8 +115,10 @@ describe 'check_boxes input' do
|
|
110
115
|
before do
|
111
116
|
@new_post.stub!(:author_ids).and_return(nil)
|
112
117
|
|
113
|
-
|
114
|
-
|
118
|
+
with_deprecation_silenced do
|
119
|
+
semantic_form_for(@new_post) do |builder|
|
120
|
+
concat(builder.input(:authors, :as => :check_boxes, :selected => nil))
|
121
|
+
end
|
115
122
|
end
|
116
123
|
end
|
117
124
|
|
@@ -124,8 +131,10 @@ describe 'check_boxes input' do
|
|
124
131
|
before do
|
125
132
|
@new_post.stub!(:author_ids).and_return(nil)
|
126
133
|
|
127
|
-
|
128
|
-
|
134
|
+
with_deprecation_silenced do
|
135
|
+
semantic_form_for(@new_post) do |builder|
|
136
|
+
concat(builder.input(:authors, :as => :check_boxes, :selected => @fred.id))
|
137
|
+
end
|
129
138
|
end
|
130
139
|
end
|
131
140
|
|
@@ -139,9 +148,11 @@ describe 'check_boxes input' do
|
|
139
148
|
describe "multiple selected items" do
|
140
149
|
before do
|
141
150
|
@new_post.stub!(:author_ids).and_return(nil)
|
142
|
-
|
143
|
-
|
144
|
-
|
151
|
+
|
152
|
+
with_deprecation_silenced do
|
153
|
+
semantic_form_for(@new_post) do |builder|
|
154
|
+
concat(builder.input(:authors, :as => :check_boxes, :selected => [@bob.id, @fred.id]))
|
155
|
+
end
|
145
156
|
end
|
146
157
|
end
|
147
158
|
|
@@ -155,8 +166,20 @@ describe 'check_boxes input' do
|
|
155
166
|
end
|
156
167
|
|
157
168
|
end
|
169
|
+
|
170
|
+
it 'should warn about :selected deprecation' do
|
171
|
+
with_deprecation_silenced do
|
172
|
+
::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times
|
173
|
+
semantic_form_for(@new_post) do |builder|
|
174
|
+
concat(builder.input(:authors, :as => :check_boxes, :selected => @bob.id))
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
158
179
|
|
159
180
|
end
|
181
|
+
|
182
|
+
|
160
183
|
|
161
184
|
end
|
162
185
|
|
@@ -8,38 +8,150 @@ describe 'date input' do
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "general" do
|
11
14
|
|
12
|
-
|
13
|
-
|
15
|
+
before do
|
16
|
+
output_buffer.replace ''
|
17
|
+
semantic_form_for(@new_post) do |builder|
|
18
|
+
concat(builder.input(:publish_at, :as => :date))
|
19
|
+
end
|
14
20
|
end
|
15
|
-
end
|
16
21
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
it_should_have_input_wrapper_with_class("date")
|
23
|
+
it_should_have_input_wrapper_with_id("post_publish_at_input")
|
24
|
+
it_should_have_a_nested_fieldset
|
25
|
+
it_should_apply_error_logic_for_input_type(:date)
|
26
|
+
|
27
|
+
it 'should have a legend and label with the label text inside the fieldset' do
|
28
|
+
output_buffer.should have_tag('form li.date fieldset legend.label label', /Publish at/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should associate the legend label with the first select' do
|
32
|
+
output_buffer.should have_tag('form li.date fieldset legend.label')
|
33
|
+
output_buffer.should have_tag('form li.date fieldset legend.label label')
|
34
|
+
output_buffer.should have_tag('form li.date fieldset legend.label label[@for]')
|
35
|
+
output_buffer.should have_tag('form li.date fieldset legend.label label[@for="post_publish_at_1i"]')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should have an ordered list of three items inside the fieldset' do
|
39
|
+
output_buffer.should have_tag('form li.date fieldset ol')
|
40
|
+
output_buffer.should have_tag('form li.date fieldset ol li', :count => 3)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should have three labels for year, month and day' do
|
44
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', :count => 3)
|
45
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', /year/i)
|
46
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', /month/i)
|
47
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', /day/i)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should have three selects for year, month and day' do
|
51
|
+
output_buffer.should have_tag('form li.date fieldset ol li select', :count => 3)
|
52
|
+
end
|
24
53
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
54
|
+
|
55
|
+
describe ':selected option' do
|
56
|
+
|
57
|
+
describe "when the object has a value" do
|
58
|
+
it "should select the object value (ignoring :selected)" do
|
59
|
+
output_buffer.replace ''
|
60
|
+
@new_post.stub!(:created_at => Time.mktime(2012))
|
61
|
+
with_deprecation_silenced do
|
62
|
+
semantic_form_for(@new_post) do |builder|
|
63
|
+
concat(builder.input(:created_at, :as => :date, :selected => Time.mktime(1999)))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
|
67
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='2012'][@selected]", :count => 1)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'when the object has no value' do
|
72
|
+
it "should select the :selected if provided as a Date" do
|
73
|
+
output_buffer.replace ''
|
74
|
+
@new_post.stub!(:created_at => nil)
|
75
|
+
with_deprecation_silenced do
|
76
|
+
semantic_form_for(@new_post) do |builder|
|
77
|
+
concat(builder.input(:created_at, :as => :date, :selected => Date.new(1999)))
|
78
|
+
end
|
79
|
+
end
|
80
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
|
81
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should select the :selected if provided as a Time" do
|
85
|
+
output_buffer.replace ''
|
86
|
+
@new_post.stub!(:created_at => nil)
|
87
|
+
with_deprecation_silenced do
|
88
|
+
semantic_form_for(@new_post) do |builder|
|
89
|
+
concat(builder.input(:created_at, :as => :date, :selected => Time.mktime(1999)))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
|
93
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should not select an option if the :selected is provided as nil" do
|
97
|
+
output_buffer.replace ''
|
98
|
+
@new_post.stub!(:created_at => nil)
|
99
|
+
with_deprecation_silenced do
|
100
|
+
semantic_form_for(@new_post) do |builder|
|
101
|
+
concat(builder.input(:created_at, :as => :date, :selected => nil))
|
102
|
+
end
|
103
|
+
end
|
104
|
+
output_buffer.should_not have_tag("form li ol li select#post_created_at_1i option[@selected]")
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should select Time.now if a :selected is not provided" do
|
108
|
+
output_buffer.replace ''
|
109
|
+
@new_post.stub!(:created_at => nil)
|
110
|
+
semantic_form_for(@new_post) do |builder|
|
111
|
+
concat(builder.input(:created_at, :as => :date))
|
112
|
+
end
|
113
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1)
|
114
|
+
output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='#{Time.now.year}'][@selected]", :count => 1)
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
29
119
|
end
|
30
120
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
121
|
+
describe ':labels option' do
|
122
|
+
fields = [:year, :month, :day]
|
123
|
+
fields.each do |field|
|
124
|
+
it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
|
125
|
+
output_buffer.replace ''
|
126
|
+
semantic_form_for(@new_post) do |builder|
|
127
|
+
concat(builder.input(:created_at, :as => :date, :labels => { field => "another #{field} label" }))
|
128
|
+
end
|
129
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length)
|
130
|
+
fields.each do |f|
|
131
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
|
132
|
+
end
|
133
|
+
end
|
37
134
|
|
38
|
-
|
39
|
-
|
135
|
+
it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
|
136
|
+
output_buffer.replace ''
|
137
|
+
semantic_form_for(@new_post) do |builder|
|
138
|
+
concat(builder.input(:created_at, :as => :date, :labels => { field => "" }))
|
139
|
+
end
|
140
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', :count => fields.length-1)
|
141
|
+
fields.each do |f|
|
142
|
+
output_buffer.should have_tag('form li.date fieldset ol li label', /#{f}/i) unless field == f
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
40
146
|
end
|
41
147
|
|
42
|
-
|
43
|
-
|
44
|
-
|
148
|
+
it 'should warn about :selected deprecation' do
|
149
|
+
with_deprecation_silenced do
|
150
|
+
::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times
|
151
|
+
semantic_form_for(@new_post) do |builder|
|
152
|
+
concat(builder.input(:created_at, :as => :date, :selected => Date.new(1999)))
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
45
157
|
end
|