From 3873728e03f4fed5b8d42f10f7e1778239c20e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 3 Feb 2010 15:56:27 +0100 Subject: [PATCH] Do not pass :include_blank for DateTime inputs neither for PriorityZones when a priority is defined. --- lib/simple_form/inputs/base.rb | 6 ------ lib/simple_form/inputs/collection_input.rb | 10 +++++++++- lib/simple_form/inputs/priority_input.rb | 8 +++++++- test/inputs_test.rb | 13 ++++++++++--- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/lib/simple_form/inputs/base.rb b/lib/simple_form/inputs/base.rb index adc4773b..fd5f64f1 100644 --- a/lib/simple_form/inputs/base.rb +++ b/lib/simple_form/inputs/base.rb @@ -26,7 +26,6 @@ module SimpleForm end def input_options - options[:include_blank] = true unless skip_include_blank? options end @@ -58,11 +57,6 @@ module SimpleForm reflection ? reflection.name : attribute_name end - # Check if :include_blank must be included by default. - def skip_include_blank? - options.key?(:prompt) || options.key?(:include_blank) - end - # Retrieve options for the given namespace from the options hash def html_options_for(namespace, *extra) html_options = options[:"#{namespace}_html"] || {} diff --git a/lib/simple_form/inputs/collection_input.rb b/lib/simple_form/inputs/collection_input.rb index 526bfd12..43587eaf 100644 --- a/lib/simple_form/inputs/collection_input.rb +++ b/lib/simple_form/inputs/collection_input.rb @@ -19,10 +19,18 @@ module SimpleForm options[:label_method], input_options, input_html_options) end + def input_options + options = super + options[:include_blank] = true unless skip_include_blank? + options + end + protected + # Check if :include_blank must be included by default. def skip_include_blank? - super || options[:input_html].try(:[], :multiple) + (options.keys & [:prompt, :include_blank, :default, :selected]).any? || + options[:input_html].try(:[], :multiple) end # Detect the right method to find the label and value for a collection. diff --git a/lib/simple_form/inputs/priority_input.rb b/lib/simple_form/inputs/priority_input.rb index 6af6798e..5e373030 100644 --- a/lib/simple_form/inputs/priority_input.rb +++ b/lib/simple_form/inputs/priority_input.rb @@ -1,6 +1,6 @@ module SimpleForm module Inputs - class PriorityInput < Base + class PriorityInput < CollectionInput def input @builder.send(:"#{input_type}_select", attribute_name, input_priority, input_options, input_html_options) @@ -9,6 +9,12 @@ module SimpleForm def input_priority options[:priority] || SimpleForm.send(:"#{input_type}_priority") end + + protected + + def skip_include_blank? + super || input_priority.present? + end end end end \ No newline at end of file diff --git a/test/inputs_test.rb b/test/inputs_test.rb index ddfababe..fad59b03 100644 --- a/test/inputs_test.rb +++ b/test/inputs_test.rb @@ -116,15 +116,17 @@ class InputTest < ActionView::TestCase assert_select 'select option[value=Brasilia]', '(GMT-03:00) Brasilia' assert_no_select 'select option[value=][disabled=disabled]' end - + test 'input should generate a time zone select field with default' do with_input_for @user, :time_zone, :time_zone, :default => 'Brasilia' assert_select 'select option[value=Brasilia][selected=selected]' + assert_no_select 'select option[value=]' end - + test 'input should generate a time zone select using options priority' do with_input_for @user, :time_zone, :time_zone, :priority => /Brasilia/ assert_select 'select option[value=][disabled=disabled]' + assert_no_select 'select option[value=]', /^$/ end # DateTime input @@ -162,7 +164,12 @@ class InputTest < ActionView::TestCase assert_select 'select.date option', 'mês' assert_select 'select.date option', 'dia' end - + + test 'input should be able to pass :default to date select' do + with_input_for @user, :born_at, :date, :default => Date.today + assert_select "select.date option[value=#{Date.today.year}][selected=selected]" + end + test 'input should generate a time select for time attributes' do with_input_for @user, :delivery_time, :time assert_select 'input[type=hidden]#user_delivery_time_1i'