Module: ImageOptim::Space

Defined in:
lib/image_optim/space.rb

Overview

Present size in readable form as fixed length string

Constant Summary collapse

SIZE_SYMBOLS =
%w[B K M G T P E].freeze
BASE =
1024.0
PRECISION =
1
LENGTH =
4 + PRECISION + 1
EMPTY_SPACE =
' ' * LENGTH

Class Method Summary collapse

Class Method Details

.space(size) ⇒ Object


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/image_optim/space.rb', line 11

def self.space(size)
  case size
  when 0, nil
    EMPTY_SPACE
  else
    log_denominator = Math.log(size.abs) / Math.log(BASE)
    degree = [log_denominator.floor, SIZE_SYMBOLS.length - 1].min
    number_string = if degree.zero?
      size.to_s
    else
      denominator = BASE**degree
      number = size / denominator
      format("%.#{PRECISION}f", number)
    end
    "#{number_string}#{SIZE_SYMBOLS[degree]}".rjust(LENGTH)
  end
end