Sha256: 4c8ea76eee46d570130b3b2338fa7d9b625345a81e73bcb40359ddf41942e400

Contents?: true

Size: 1.63 KB

Versions: 5

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true
require 'bigdecimal'

class Money
  module Helpers
    module_function

    DECIMAL_ZERO = BigDecimal(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(num)
        when Float
          BigDecimal(num, Float::DIG)
        when Rational
          BigDecimal(num, MAX_DECIMAL)
        when String
          decimal = BigDecimal(num, exception: false)
          return decimal if decimal

          Money.deprecate("using Money.new('#{num}') is deprecated and will raise an ArgumentError in the next major release")
          DECIMAL_ZERO
        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
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
shopify-money-0.14.6 lib/money/helpers.rb
shopify-money-0.14.5 lib/money/helpers.rb
shopify-money-0.14.4 lib/money/helpers.rb
shopify-money-0.14.3 lib/money/helpers.rb
shopify-money-0.14.2 lib/money/helpers.rb