module Money::Helpers

def value_to_currency(currency)

def value_to_currency(currency)
  case currency
  when Money::Currency, Money::NullCurrency
    currency
  when nil, ''
    default = Money::Config.current.currency
    raise(Money::Currency::UnknownCurrency, '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
      if Money::Config.current.legacy_deprecations
        Money.deprecate(error.message)
        Money::NULL_CURRENCY
      else
        raise error
      end
    end
  else
    raise ArgumentError, "could not parse as currency #{currency.inspect}"
  end
end

def value_to_decimal(num)

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
      BigDecimal(num)
    else
      raise ArgumentError, "could not parse as decimal #{num.inspect}"
    end
  return DECIMAL_ZERO if value.sign == BigDecimal::SIGN_NEGATIVE_ZERO
  value
end