Sha256: 001d5c8004db1c947e38bf9193e697153f7796bb4da285c8a76c52da1ca6f69e

Contents?: true

Size: 774 Bytes

Versions: 3

Compression:

Stored size: 774 Bytes

Contents

module Virtuaaliviivakoodi
  class AmountNormalizer
    def self.call(value)
      amount = value.to_f

      if amount
        raise(ArgumentError, "Amount is negative") if (amount < 0)
        raise(ArgumentError, "Amount is too large, maximum is 999999.99") if (amount > 999999.99)

        decimals = digits_after_decimal_point(amount)
        raise(ArgumentError, "There can't be more than two decimals") if decimals > 2

        euros, cents = sprintf("%0.02f", amount).split(".")

        Virtuaaliviivakoodi.pad(euros, 6) + cents
      else
        Virtuaaliviivakoodi.pad("", 8)
      end
    end

    private

    def self.digits_after_decimal_point(f)
      sign, digits, base, exponent = BigDecimal(f.to_s).split
      digits.length - exponent
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
virtuaaliviivakoodi-1.0.0 lib/virtuaaliviivakoodi/amount_normalizer.rb
virtuaaliviivakoodi-0.1.1 lib/virtuaaliviivakoodi/amount_normalizer.rb
virtuaaliviivakoodi-0.1.0 lib/virtuaaliviivakoodi/amount_normalizer.rb