From ab5e1f15a67b22410835a84ba11a926f50b31cbe Mon Sep 17 00:00:00 2001
From: Michael Koziarski <michael@koziarski.com>
Date: Sun, 5 Aug 2007 01:00:54 +0000
Subject: Fix number_to_human_size when using different precisions. Closes
 #7536. [RichardStrand, mpalmer]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7275 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 actionpack/CHANGELOG                                | 2 ++
 actionpack/lib/action_view/helpers/number_helper.rb | 4 ++--
 actionpack/test/template/number_helper_test.rb      | 4 ++++
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 48f46479b6..15293a4b89 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
 *SVN*
 
+* Fix number_to_human_size when using different precisions. Closes #7536. [RichardStrand, mpalmer]
+
 * Added partial layouts (see example in action_view/lib/partials.rb) [DHH]
 
 * Allow you to set custom :conditions on resource routes.  [Rick]
diff --git a/actionpack/lib/action_view/helpers/number_helper.rb b/actionpack/lib/action_view/helpers/number_helper.rb
index e2db853f93..64e424df2f 100644
--- a/actionpack/lib/action_view/helpers/number_helper.rb
+++ b/actionpack/lib/action_view/helpers/number_helper.rb
@@ -164,13 +164,13 @@ module ActionView
       def number_to_human_size(size, precision=1)
         size = Kernel.Float(size)
         case
-          when size == 1        : "1 Byte"
+          when size.to_i == 1   : "1 Byte"
           when size < 1.kilobyte: "%d Bytes" % size
           when size < 1.megabyte: "%.#{precision}f KB"  % (size / 1.0.kilobyte)
           when size < 1.gigabyte: "%.#{precision}f MB"  % (size / 1.0.megabyte)
           when size < 1.terabyte: "%.#{precision}f GB"  % (size / 1.0.gigabyte)
           else                    "%.#{precision}f TB"  % (size / 1.0.terabyte)
-        end.sub('.0', '')
+        end.sub(/([0-9])\.?0+ /, '\1 ' )
       rescue
         nil
       end
diff --git a/actionpack/test/template/number_helper_test.rb b/actionpack/test/template/number_helper_test.rb
index 9cc203bc42..19ca471245 100644
--- a/actionpack/test/template/number_helper_test.rb
+++ b/actionpack/test/template/number_helper_test.rb
@@ -83,6 +83,10 @@ class NumberHelperTest < Test::Unit::TestCase
     assert_equal '1.18 MB',   number_to_human_size(1234567, 2)
     assert_equal '3 Bytes',   number_to_human_size(3.14159265, 4)
     assert_equal("123 Bytes", number_to_human_size("123"))
+    assert_equal '1.01 KB',   number_to_human_size(1.0123.kilobytes, 2)
+    assert_equal '1.01 KB',   number_to_human_size(1.0100.kilobytes, 4)
+    assert_equal '10 KB',   number_to_human_size(10.000.kilobytes, 4)
+    assert_equal '1 Byte',   number_to_human_size(1.1)
     assert_nil number_to_human_size('x')
     assert_nil number_to_human_size(nil)
   end
-- 
cgit v1.2.3