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