Module: FriendlyNumbers::NumberToHumanSize

Extended by:
NumberToHumanSize
Included in:
NumberToHumanSize
Defined in:
lib/friendly_numbers/number_to_human_size.rb

Instance Method Summary collapse

Instance Method Details

#calculate_smallest_value_with_scale(value) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/friendly_numbers/number_to_human_size.rb', line 17

def calculate_smallest_value_with_scale(value)
  scale = 0
  while value >= 1024
    value /= 1024.0
    scale += 1
  end
  [value, scale]
end

#convert(bytes, options) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/friendly_numbers/number_to_human_size.rb', line 5

def convert(bytes, options)
  options = {
    precision: 3,
    scales: %w(Bytes KB MB GB TB PB)
  }.merge(options)

  value, scale = calculate_smallest_value_with_scale(bytes)
  precision = zero_precision_for_zero_remainder(value, options[:precision])

  format("%.#{precision}f %s", value, options[:scales][scale])
end

#zero_precision_for_zero_remainder(value, default_precision = 0) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/friendly_numbers/number_to_human_size.rb', line 26

def zero_precision_for_zero_remainder(value, default_precision = 0)
  if (value % 1).zero?
    0
  else
    default_precision
  end
end