From 7d09b8d723e7d8d0d2b913573ecd404a84305397 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 2 Apr 2005 07:54:01 +0000 Subject: Fixed include_blank for select_hour/minute/second #527 [edward@debian.org] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1055 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 + actionpack/lib/action_view/helpers/date_helper.rb | 18 ++-- actionpack/test/template/date_helper_test.rb | 118 +++++++++++++++++++++- 3 files changed, 128 insertions(+), 10 deletions(-) (limited to 'actionpack') diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 363076d0f6..8ae43e9ffe 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed include_blank for select_hour/minute/second #527 [edward@debian.org] + * Improved the message display on the exception handler pages #963 [Johan Sorensen] * Fixed that on very rare occasions, webrick would raise a NoMethodError: private method 'split' called for nil #1001 [Flurin Egger] diff --git a/actionpack/lib/action_view/helpers/date_helper.rb b/actionpack/lib/action_view/helpers/date_helper.rb index b774b67315..9ffafe70b4 100755 --- a/actionpack/lib/action_view/helpers/date_helper.rb +++ b/actionpack/lib/action_view/helpers/date_helper.rb @@ -104,7 +104,7 @@ module ActionView second_options = [] 0.upto(59) do |second| - second_options << ((datetime.kind_of?(Fixnum) ? datetime : datetime.sec) == second ? + second_options << ((datetime && (datetime.kind_of?(Fixnum) ? datetime : datetime.sec) == second) ? "\n" : "\n" ) @@ -119,7 +119,7 @@ module ActionView minute_options = [] 0.upto(59) do |minute| - minute_options << ((datetime.kind_of?(Fixnum) ? datetime : datetime.min) == minute ? + minute_options << ((datetime && (datetime.kind_of?(Fixnum) ? datetime : datetime.min) == minute) ? "\n" : "\n" ) @@ -134,7 +134,7 @@ module ActionView hour_options = [] 0.upto(23) do |hour| - hour_options << ((datetime.kind_of?(Fixnum) ? datetime : datetime.hour) == hour ? + hour_options << ((datetime && (datetime.kind_of?(Fixnum) ? datetime : datetime.hour) == hour) ? "\n" : "\n" ) @@ -149,7 +149,7 @@ module ActionView day_options = [] 1.upto(31) do |day| - day_options << ((date.kind_of?(Fixnum) ? date : date.day) == day ? + day_options << ((date && (date.kind_of?(Fixnum) ? date : date.day) == day) ? "\n" : "\n" ) @@ -179,7 +179,7 @@ module ActionView Date::MONTHNAMES[month_number] end - month_options << ((date.kind_of?(Fixnum) ? date : date.month) == month_number ? + month_options << ((date && (date.kind_of?(Fixnum) ? date : date.month) == month_number) ? %(\n) : %(\n) ) @@ -195,11 +195,11 @@ module ActionView # select_year(Date.today, :start_year => 1992, :end_year => 2007) def select_year(date, options = {}) year_options = [] - y = date.kind_of?(Fixnum) ? (y = (date == 0) ? Date.today.year : date) : date.year + y = date ? (date.kind_of?(Fixnum) ? (y = (date == 0) ? Date.today.year : date) : date.year) : Date.today.year default_start_year, default_end_year = y-5, y+5 (options[:start_year] || default_start_year).upto(options[:end_year] || default_end_year) do |year| - year_options << ((date.kind_of?(Fixnum) ? date : date.year) == year ? + year_options << ((date && (date.kind_of?(Fixnum) ? date : date.year) == year) ? "\n" : "\n" ) @@ -256,7 +256,7 @@ module ActionView defaults = { :discard_type => true } options = defaults.merge(options) options_with_prefix = Proc.new { |position| options.merge(:prefix => "#{@object_name}[#{@method_name}(#{position}i)]") } - datetime = options[:include_blank] ? (value || 0) : (value || Time.now) + datetime = options[:include_blank] ? (value || nil) : (value || Time.now) datetime_select = select_year(datetime, options_with_prefix.call(1)) datetime_select << select_month(datetime, options_with_prefix.call(2)) unless options[:discard_month] @@ -268,4 +268,4 @@ module ActionView end end end -end +end \ No newline at end of file diff --git a/actionpack/test/template/date_helper_test.rb b/actionpack/test/template/date_helper_test.rb index 80f33bd9fe..fa51ef8253 100755 --- a/actionpack/test/template/date_helper_test.rb +++ b/actionpack/test/template/date_helper_test.rb @@ -51,6 +51,15 @@ class DateHelperTest < Test::Unit::TestCase assert_equal expected, select_day(16, :include_blank => true) end + def test_select_day_nil_with_blank + expected = %(\n" + + assert_equal expected, select_day(nil, :include_blank => true) + end + def test_select_month expected = %(\n) + expected << %(\n\n\n\n\n\n\n\n\n\n\n\n\n) + expected << "\n" + + assert_equal expected, select_month(Time.mktime(2003, 8, 16), :include_blank => true) + assert_equal expected, select_month(8, :include_blank => true) + end + + def test_select_month_nil_with_blank + expected = %(\n" + + assert_equal expected, select_month(nil, :include_blank => true) + end + def test_select_month_with_numbers expected = %(\n) + expected << %(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n) + expected << "\n" + + assert_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), :include_blank => true) + end + + def test_select_hour_nil_with_blank + expected = %(\n" + + assert_equal expected, select_hour(nil, :include_blank => true) + end + def test_select_minute expected = %(\n) + expected << %(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n) + expected << "\n" + + assert_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), :include_blank => true) + end + + def test_select_minute_nil_with_blank + expected = %(\n" + + assert_equal expected, select_minute(nil, :include_blank => true) + end + def test_select_second expected = %(\n) + expected << %(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n) + expected << "\n" + + assert_equal expected, select_second(Time.mktime(2003, 8, 16, 8, 4, 18), :include_blank => true) + end + + def test_select_second_nil_with_blank + expected = %(\n" + + assert_equal expected, select_second(nil, :include_blank => true) + end + def test_select_date expected = %(\n) + (Date.today.year-5).upto(Date.today.year+5) { |y| expected << %(\n) } + expected << "\n" + + expected << %(\n" + + expected << %(\n" + + assert_equal expected, select_date(nil, :prefix => "date[first]") + end + + def test_datetime_select_with_nil_value_and_no_start_and_end_year + expected = %(\n" + + expected << %(\n" + + expected << %(\n" + + expected << %(\n" + + expected << %(\n" + + assert_equal expected, select_datetime(nil, :prefix => "date[first]") + end + + end -- cgit v1.2.3