Sha256: 50a7b31e3bb344fa56f145e3eb8ba85cf0ef7fb5f19e8117913dc1923cdd6b6e
Contents?: true
Size: 1.15 KB
Versions: 16
Compression:
Stored size: 1.15 KB
Contents
# frozen_string_literal: true module RubyPgExtras class SizeParser def self.to_i(arg) value = to_i_si(arg) || to_i_binary(arg) || to_i_digits(arg) raise ArgumentError, "Unparseable size: #{arg}" if value.nil? value end def self.regexp_for_units(units) /\A(-?\d+)\s?(#{units.join("|")})\z/i end SI_UNITS = %w[bytes kB MB GB TB PB EB ZB YB].map(&:downcase).freeze SI_REGEXP = regexp_for_units(SI_UNITS) def self.to_i_si(arg) to_i_for_units(arg, SI_REGEXP, SI_UNITS, 1000) end BINARY_UNITS = %w[bytes KiB MiB GiB TiB PiB EiB ZiB YiB].map(&:downcase).freeze BINARY_REGEXP = regexp_for_units(BINARY_UNITS) def self.to_i_binary(arg) to_i_for_units(arg, BINARY_REGEXP, BINARY_UNITS, 1024) end def self.to_i_for_units(arg, regexp, units, multiplier) match_data = regexp.match(arg) return nil unless match_data exponent = units.index(match_data[2].downcase).to_i match_data[1].to_i * multiplier ** exponent end DIGITS_ONLY_REGEXP = /\A(-?\d+)\z/.freeze def self.to_i_digits(arg) DIGITS_ONLY_REGEXP.match?(arg) ? arg.to_i : nil end end end
Version data entries
16 entries across 16 versions & 1 rubygems