Sha256: 01eebf9816afef2b6a03340e1164eb1eac52a5f29a8f33b687bb2e1eef2d6471

Contents?: true

Size: 781 Bytes

Versions: 2

Compression:

Stored size: 781 Bytes

Contents

# frozen_string_literal: true

class ImageOptim
  # Present size in readable form as fixed length string
  module Space
    SIZE_SYMBOLS = %w[B K M G T P E].freeze
    BASE = 1024.0
    PRECISION = 1
    LENGTH = PRECISION + 4 + 1

    EMPTY_SPACE = ' ' * LENGTH

    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 == 0
          size.to_s
        else
          denominator = BASE**degree
          number = size / denominator
          format("%.#{PRECISION}f", number)
        end
        "#{number_string}#{SIZE_SYMBOLS[degree]}".rjust(LENGTH)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
image_optim-0.31.4 lib/image_optim/space.rb
image_optim-0.31.3 lib/image_optim/space.rb