Sha256: a22a98734667eaa4f417857a9c608f8dd7a81342e1328c93a4aac2924ba1413a

Contents?: true

Size: 1001 Bytes

Versions: 12

Compression:

Stored size: 1001 Bytes

Contents

# frozen_string_literal: true

module Facter
  class BytesToHumanReadable
    class << self
      def convert(bytes)
        return unless bytes
        return bytes.to_s + ' bytes' if bytes < 1024

        units = %w[K M G T P E]
        result = determine_exponent(bytes)
        return bytes.to_s + ' bytes' if result[:exp] > units.size

        converted_number = pad_number(result[:converted_number])
        converted_number + " #{units[result[:exp] - 1]}iB"
      end

      private

      def pad_number(number)
        number = number.to_s
        number << '0' if number.split('.').last.length == 1
        number
      end

      def determine_exponent(bytes)
        exp = (Math.log2(bytes) / 10.0).floor
        converted_number = (100.0 * (bytes / 1024.0**exp)).round / 100.0

        if (converted_number - 1024.0).abs < Float::EPSILON
          exp += 1
          converted_number = 1.00
        end
        { exp: exp, converted_number: converted_number }
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
facter-4.0.18 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.17 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.16 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.15 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.14 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.13 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.12 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.11 lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.10.pre lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.9.pre lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.8.pre lib/facts_utils/bytes_to_human_readable.rb
facter-4.0.7.pre lib/facts_utils/bytes_to_human_readable.rb