From f60dc7498991b2680f283119b3d294a8be74f756 Mon Sep 17 00:00:00 2001 From: Xavier Defrang Date: Thu, 25 Feb 2010 17:44:03 +0100 Subject: [PATCH] Added negative number support to number_to_human_size --- .../lib/action_view/helpers/number_helper.rb | 6 +++--- actionpack/test/template/number_helper_test.rb | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/actionpack/lib/action_view/helpers/number_helper.rb b/actionpack/lib/action_view/helpers/number_helper.rb index 3d3502a..d555eb4 100644 --- a/actionpack/lib/action_view/helpers/number_helper.rb +++ b/actionpack/lib/action_view/helpers/number_helper.rb @@ -280,13 +280,13 @@ module ActionView storage_units_format = I18n.translate(:'number.human.storage_units.format', :locale => options[:locale], :raise => true) - if number.to_i < 1024 - unit = I18n.translate(:'number.human.storage_units.units.byte', :locale => options[:locale], :count => number.to_i, :raise => true) + if (absolute_value = number.to_i.abs) < 1024 + unit = I18n.translate(:'number.human.storage_units.units.byte', :locale => options[:locale], :count => absolute_value, :raise => true) storage_units_format.gsub(/%n/, number.to_i.to_s).gsub(/%u/, unit) else max_exp = STORAGE_UNITS.size - 1 number = Float(number) - exponent = (Math.log(number) / Math.log(1024)).to_i # Convert to base 1024 + exponent = (Math.log(number.abs) / Math.log(1024)).to_i # Convert to base 1024 exponent = max_exp if exponent > max_exp # we need this to avoid overflow for the highest unit number /= 1024 ** exponent diff --git a/actionpack/test/template/number_helper_test.rb b/actionpack/test/template/number_helper_test.rb index 0a2b82b..3776117 100644 --- a/actionpack/test/template/number_helper_test.rb +++ b/actionpack/test/template/number_helper_test.rb @@ -127,6 +127,9 @@ class NumberHelperTest < ActionView::TestCase assert_equal '10 Bytes', number_to_human_size(10) #assert_nil number_to_human_size('x') # fails due to API consolidation assert_nil number_to_human_size(nil) + assert_equal '-1 Byte', number_to_human_size(-1) + assert_equal '-2 Bytes', number_to_human_size("-2") + assert_equal '-12.1 KB', number_to_human_size(-12345) end def test_number_to_human_size_with_options_hash -- 1.5.5.1