diff --git a/lib/formtastic.rb b/lib/formtastic.rb index df5ab8b89..4a1e0e11c 100644 --- a/lib/formtastic.rb +++ b/lib/formtastic.rb @@ -77,6 +77,14 @@ class SemanticFormBuilder < ActionView::Helpers::FormBuilder # <% end %> # def input(method, options = {}) + if options.key?(:selected) || options.key?(:checked) || options.key?(:default) + ::ActiveSupport::Deprecation.warn( + "The :selected, :checked (and :default) options are deprecated in Formtastic and will be removed from 1.0. " << + "Please set default values in your models (using an after_initialize callback) or in your controller set-up. " << + "See http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html for more information.", caller) + end + + options[:required] = method_required?(method) unless options.key?(:required) options[:as] ||= default_input_type(method, options) diff --git a/spec/inputs/boolean_input_spec.rb b/spec/inputs/boolean_input_spec.rb index ef297eb24..138ee5d87 100644 --- a/spec/inputs/boolean_input_spec.rb +++ b/spec/inputs/boolean_input_spec.rb @@ -65,8 +65,10 @@ before do @new_post.stub!(:allow_comments).and_return(true) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:allow_comments, :as => :boolean, :selected => false)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:allow_comments, :as => :boolean, :selected => false)) + end end end @@ -78,9 +80,11 @@ describe "selected" do before do @new_post.stub!(:allow_comments).and_return(false) - - semantic_form_for(@new_post) do |builder| - concat(builder.input(:allow_comments, :as => :boolean, :selected => true)) + + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:allow_comments, :as => :boolean, :selected => true)) + end end end diff --git a/spec/inputs/check_boxes_input_spec.rb b/spec/inputs/check_boxes_input_spec.rb index 366e4a873..b0aaffd54 100644 --- a/spec/inputs/check_boxes_input_spec.rb +++ b/spec/inputs/check_boxes_input_spec.rb @@ -115,8 +115,10 @@ before do @new_post.stub!(:author_ids).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :check_boxes, :selected => nil)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :check_boxes, :selected => nil)) + end end end @@ -129,8 +131,10 @@ before do @new_post.stub!(:author_ids).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :check_boxes, :selected => @fred.id)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :check_boxes, :selected => @fred.id)) + end end end @@ -144,9 +148,11 @@ describe "multiple selected items" do before do @new_post.stub!(:author_ids).and_return(nil) - - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :check_boxes, :selected => [@bob.id, @fred.id])) + + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :check_boxes, :selected => [@bob.id, @fred.id])) + end end end @@ -160,8 +166,20 @@ end end + + it 'should warn about :selected deprecation' do + with_deprecation_silenced do + ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :check_boxes, :selected => @bob.id)) + end + end + end + end + + end diff --git a/spec/inputs/date_input_spec.rb b/spec/inputs/date_input_spec.rb index dc3b7736b..eb0ef0f43 100644 --- a/spec/inputs/date_input_spec.rb +++ b/spec/inputs/date_input_spec.rb @@ -52,8 +52,10 @@ it "should select the object value (ignoring :default)" do output_buffer.replace '' @new_post.stub!(:created_at => Time.mktime(2012)) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :date, :default => Time.mktime(1999))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :date, :default => Time.mktime(1999))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='2012'][@selected]", :count => 1) @@ -64,8 +66,10 @@ it "should select the :default if provided as a Date" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :date, :default => Date.new(1999))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :date, :default => Date.new(1999))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1) @@ -74,8 +78,10 @@ it "should select the :default if provided as a Time" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :date, :default => Time.mktime(1999))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :date, :default => Time.mktime(1999))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1) @@ -84,8 +90,10 @@ it "should not select an option if the :default is provided as nil" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :date, :default => nil)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :date, :default => nil)) + end end output_buffer.should_not have_tag("form li ol li select#post_created_at_1i option[@selected]") end @@ -133,7 +141,7 @@ it 'should warn about :selected deprecation' do with_deprecation_silenced do - ::ActiveSupport::Deprecation.should_receive(:warn) + ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times semantic_form_for(@new_post) do |builder| concat(builder.input(:created_at, :as => :date, :selected => Date.new(1999))) end diff --git a/spec/inputs/datetime_input_spec.rb b/spec/inputs/datetime_input_spec.rb index c4890f3d7..d070747f2 100644 --- a/spec/inputs/datetime_input_spec.rb +++ b/spec/inputs/datetime_input_spec.rb @@ -158,8 +158,10 @@ it "should select the object value (ignoring :default)" do output_buffer.replace '' @new_post.stub!(:created_at => Time.mktime(2012)) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :datetime, :default => Time.mktime(1999))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :datetime, :default => Time.mktime(1999))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='2012'][@selected]", :count => 1) @@ -170,8 +172,10 @@ it "should select the :default if provided as a Date" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :datetime, :default => Date.new(1999))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :datetime, :default => Date.new(1999))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1) @@ -180,8 +184,10 @@ it "should select the :default if provided as a Time" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :datetime, :default => Time.mktime(1999))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :datetime, :default => Time.mktime(1999))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_1i option[@value='1999'][@selected]", :count => 1) @@ -190,8 +196,10 @@ it "should not select an option if the :default is provided as nil" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :datetime, :default => nil)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :datetime, :default => nil)) + end end output_buffer.should_not have_tag("form li ol li select#post_created_at_1i option[@selected]") end @@ -210,7 +218,7 @@ it 'should warn about :selected deprecation' do with_deprecation_silenced do - ::ActiveSupport::Deprecation.should_receive(:warn) + ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times semantic_form_for(@new_post) do |builder| concat(builder.input(:created_at, :as => :date, :selected => Time.mktime(1999))) end @@ -248,7 +256,7 @@ it 'should warn about :selected deprecation' do with_deprecation_silenced do - ::ActiveSupport::Deprecation.should_receive(:warn) + ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times semantic_form_for(@new_post) do |builder| concat(builder.input(:created_at, :as => :datetime, :selected => Time.mktime(1999))) end diff --git a/spec/inputs/radio_input_spec.rb b/spec/inputs/radio_input_spec.rb index 8046e7c38..8ba38e675 100644 --- a/spec/inputs/radio_input_spec.rb +++ b/spec/inputs/radio_input_spec.rb @@ -120,9 +120,11 @@ describe "no selected items" do before do @new_post.stub!(:author_ids).and_return(nil) - - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :radio, :selected => nil)) + + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :radio, :selected => nil)) + end end end @@ -134,9 +136,10 @@ describe "single selected item" do before do @new_post.stub!(:author_ids).and_return(nil) - - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :radio, :selected => @fred.id)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :radio, :selected => @fred.id)) + end end end diff --git a/spec/inputs/select_input_spec.rb b/spec/inputs/select_input_spec.rb index 07d1aae6a..3be01f990 100644 --- a/spec/inputs/select_input_spec.rb +++ b/spec/inputs/select_input_spec.rb @@ -354,7 +354,7 @@ end end end - + describe 'when :selected is set' do before do @output_buffer = '' @@ -363,11 +363,13 @@ describe "no selected items" do before do @new_post.stub!(:author_id).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:author, :as => :select, :selected => nil)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:author, :as => :select, :selected => nil)) + end end end - + it 'should not have any selected item(s)' do output_buffer.should_not have_tag("form li select option[@selected='selected']") end @@ -376,8 +378,10 @@ describe "single selected item" do before do @new_post.stub!(:author_id).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:author, :as => :select, :selected => @bob.id)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:author, :as => :select, :selected => @bob.id)) + end end end @@ -394,8 +398,10 @@ before do @new_post.stub!(:author_ids).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :select, :selected => [@bob.id, @fred.id], :multiple => false)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :select, :selected => [@bob.id, @fred.id], :multiple => false)) + end end end @@ -410,8 +416,10 @@ before do @new_post.stub!(:author_ids).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:authors, :as => :select, :selected => [@bob.id, @fred.id])) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:authors, :as => :select, :selected => [@bob.id, @fred.id])) + end end end @@ -427,7 +435,7 @@ end end - + describe "enum" do before do @output_buffer = '' @@ -466,5 +474,16 @@ end end end - + + it 'should warn about :selected deprecation' do + with_deprecation_silenced do + ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times + semantic_form_for(@new_post) do |builder| + concat(builder.input(:author_id, :as => :select, :selected => @bob.id)) + end + end + end + + + end diff --git a/spec/inputs/time_input_spec.rb b/spec/inputs/time_input_spec.rb index 0dea6eb53..1899478cf 100644 --- a/spec/inputs/time_input_spec.rb +++ b/spec/inputs/time_input_spec.rb @@ -48,8 +48,10 @@ it "should select the object value (ignoring :default)" do output_buffer.replace '' @new_post.stub!(:created_at => Time.mktime(2012, 11, 30, 21, 45)) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :time, :default => Time.mktime(1999, 12, 31, 22, 59))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :time, :default => Time.mktime(1999, 12, 31, 22, 59))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@value='21'][@selected]", :count => 1) @@ -60,8 +62,10 @@ it "should select the :default if provided as a Time" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :time, :default => Time.mktime(1999, 12, 31, 22, 59))) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :time, :default => Time.mktime(1999, 12, 31, 22, 59))) + end end output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@selected]", :count => 1) output_buffer.should have_tag("form li ol li select#post_created_at_4i option[@value='22'][@selected]", :count => 1) @@ -70,8 +74,10 @@ it "should not select an option if the :default is provided as nil" do output_buffer.replace '' @new_post.stub!(:created_at => nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:created_at, :as => :time, :default => nil)) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:created_at, :as => :time, :default => nil)) + end end output_buffer.should_not have_tag("form li ol li select#post_created_at_4i option[@selected]") end @@ -118,7 +124,7 @@ it 'should warn about :selected deprecation' do with_deprecation_silenced do - ::ActiveSupport::Deprecation.should_receive(:warn) + ::ActiveSupport::Deprecation.should_receive(:warn).any_number_of_times semantic_form_for(@new_post) do |builder| concat(builder.input(:created_at, :as => :time, :selected => Time.mktime(1999))) end diff --git a/spec/inputs/time_zone_input_spec.rb b/spec/inputs/time_zone_input_spec.rb index 620eed710..860455a5f 100644 --- a/spec/inputs/time_zone_input_spec.rb +++ b/spec/inputs/time_zone_input_spec.rb @@ -85,8 +85,10 @@ # @new_post.stub!(:time_zone).and_return('Stockholm') @new_post.stub!(:time_zone).and_return(nil) - semantic_form_for(@new_post) do |builder| - concat(builder.input(:time_zone, :as => :time_zone, :selected => 'Melbourne')) + with_deprecation_silenced do + semantic_form_for(@new_post) do |builder| + concat(builder.input(:time_zone, :as => :time_zone, :selected => 'Melbourne')) + end end end