Sha256: 8ae359c3dbcb4d8c265d6d43be473c3547ddd837e44294ff60ce477afe944661
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
# frozen_string_literal: true require 'bigdecimal' class Money module Helpers module_function NUMERIC_REGEX = /\A\s*[\+\-]?\d*(\.\d+)?\s*\z/ DECIMAL_ZERO = BigDecimal.new(0).freeze MAX_DECIMAL = 21 def value_to_decimal(num) value = case num when Money num.value when BigDecimal num when nil, 0, '' DECIMAL_ZERO when Integer BigDecimal.new(num) when Float BigDecimal.new(num, Float::DIG) when Rational BigDecimal.new(num, MAX_DECIMAL) when String string_to_decimal(num) else raise ArgumentError, "could not parse as decimal #{num.inspect}" end return DECIMAL_ZERO if value.sign == BigDecimal::SIGN_NEGATIVE_ZERO value end def value_to_currency(currency) case currency when Money::Currency, Money::NullCurrency currency when nil, '' default = Money.current_currency || Money.default_currency raise(ArgumentError, 'missing currency') if default.nil? || default == '' value_to_currency(default) when 'xxx', 'XXX' Money::NULL_CURRENCY when String begin Currency.find!(currency) rescue Money::Currency::UnknownCurrency => error Money.deprecate(error.message) Money::NULL_CURRENCY end else raise ArgumentError, "could not parse as currency #{currency.inspect}" end end def string_to_decimal(num) if num =~ NUMERIC_REGEX return BigDecimal.new(num) end Money.deprecate("using Money.new('#{num}') is deprecated and will raise an ArgumentError in the next major release") begin BigDecimal.new(num) rescue ArgumentError DECIMAL_ZERO end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
shopify-money-0.10.0 | lib/money/helpers.rb |