From 55e5e48c09aa1ac7b3bbf14c0c8822b8e11d2693 Mon Sep 17 00:00:00 2001 From: Shane Mingins Date: Fri, 5 Dec 2008 13:36:48 +1300 Subject: [PATCH] Average, maximum, and minimum on associations should return 0 when no rows are returned [like sum does] --- activerecord/lib/active_record/calculations.rb | 6 +++--- activerecord/test/cases/calculations_test.rb | 12 ++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/activerecord/lib/active_record/calculations.rb b/activerecord/lib/active_record/calculations.rb index 65512d5..230c1d9 100644 --- a/activerecord/lib/active_record/calculations.rb +++ b/activerecord/lib/active_record/calculations.rb @@ -284,9 +284,9 @@ module ActiveRecord def type_cast_calculated_value(value, column, operation = nil) operation = operation.to_s.downcase case operation - when 'count' then value.to_i - when 'sum' then type_cast_using_column(value || '0', column) - when 'avg' then value && (value.is_a?(Fixnum) ? value.to_f : value).to_d + when 'count' then value.to_i + when 'sum', 'max', 'min' then type_cast_using_column(value || '0', column) + when 'avg' then (value.is_a?(Fixnum) ? value.to_f : value || '0').to_d else type_cast_using_column(value, column) end end diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb index 8bd0dd0..4716249 100644 --- a/activerecord/test/cases/calculations_test.rb +++ b/activerecord/test/cases/calculations_test.rb @@ -22,8 +22,16 @@ class CalculationsTest < ActiveRecord::TestCase assert_equal BigDecimal.new('53.0'), value end - def test_should_return_nil_as_average - assert_nil NumericData.average(:bank_balance) + def test_should_return_zero_as_average + assert_equal 0, NumericData.average(:bank_balance) + end + + def test_should_return_zero_as_minimum + assert_equal 0, NumericData.minimum(:bank_balance) + end + + def test_should_return_zero_as_average + assert_equal 0, NumericData.maximum(:bank_balance) end def test_type_cast_calculated_value_should_convert_db_averages_of_fixnum_class_to_decimal -- 1.6.0.2