Human readable byte size

Hi I wasn't able to find this function in Rails. Probably it already exists somewhere- if not, maybe this will save someone 2 minutes

def human_size(size)   if size < 1.kilobyte     size + " Bytes"   elsif size < 1.megabyte     sprintf("%.0f KB", size / 1.kilobyte.to_f)   elsif size < 1.gigabyte     sprintf("%.1f MB", size / 1.megabyte.to_f)   elsif size < 1.terabyte     sprintf("%.1f GB", size / 1.gigabyte.to_f)   elsif size < 1.petabyte     sprintf("%.1f TB", size / 1.terabyte.to_f)   elsif size < 1.exabyte     sprintf("%.1f PB", size / 1.petabyte.to_f)   else     sprintf("%.1f EB", size / 1.exabyte.to_f)   end end

Ryan

I wasn't able to find this function in Rails. Probably it already exists somewhere- if not, maybe this will save someone 2 minutes

It's in ActionView::Helpers::NumberHelper.

It's even called human_size via an alias. If you had tried it in a view before coding it, it would have worked! That has happened to me a couple times. Rails rocks.

FYI: Here's the implementation. Doesn't go past TB.

# File vendor/rails/actionpack/lib/action_view/helpers/number_helper.rb, line 87 def number_to_human_size(size)   case     when size < 1.kilobyte: '%d Bytes' % size     when size < 1.megabyte: '%.1f KB' % (size / 1.0.kilobyte)     when size < 1.gigabyte: '%.1f MB' % (size / 1.0.megabyte)     when size < 1.terabyte: '%.1f GB' % (size / 1.0.gigabyte)     else '%.1f TB' % (size / 1.0.terabyte)   end.sub('.0', '') rescue   nil end

Hi I wasn't able to find this function in Rails. Probably it already exists somewhere- if not, maybe this will save someone 2 minutes

It is...

number_to_human_size(size)

Returns a formatted-for-humans file size.

Examples:

   human_size(123) => 123 Bytes    human_size(1234) => 1.2 KB    human_size(12345) => 12.1 KB    human_size(1234567) => 1.2 MB    human_size(1234567890) => 1.1 GB