Skip to content

Commit

Permalink
fix: number() return null
Browse files Browse the repository at this point in the history
Correct the function number() to return null if the given string is not a number, instead of throwing an exception.
  • Loading branch information
saig0 committed Aug 22, 2024
1 parent b2afedd commit cabb5f2
Showing 1 changed file with 19 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -170,16 +170,25 @@ class ConversionBuiltinFunctions(valueMapper: ValueMapper) {
builtinFunction(
params = List("from"),
invoke = { case List(ValString(from)) =>
ValNumber(from)
parseNumber(from)
}
)

private def parseNumber(from: String): Val = {
Try(
ValNumber(from)
).getOrElse(
ValError(s"Can't parse '$from' as a number")
)
}

private def numberFunction2 = builtinFunction(
params = List("from", "grouping separator"),
invoke = {
case List(ValString(from), ValString(grouping)) if (isValidGroupingSeparator(grouping)) =>
ValNumber(from.replace(grouping, ""))
case List(ValString(from), ValString(grouping)) =>
parseNumber(from.replace(grouping, ""))

case List(ValString(_), ValString(_)) =>
ValError(s"illegal argument for grouping. Must be one of ' ', ',' or '.'")
}
)
Expand All @@ -191,13 +200,16 @@ class ConversionBuiltinFunctions(valueMapper: ValueMapper) {
if (isValidGroupingSeparator(grouping) && isValidDecimalSeparator(
decimal
) && grouping != decimal) =>
ValNumber(from.replace(grouping, "").replace(decimal, "."))
parseNumber(from.replace(grouping, "").replace(decimal, "."))

case List(ValString(from), ValNull, ValString(decimal)) if isValidDecimalSeparator(decimal) =>
ValNumber(from.replace(decimal, "."))
parseNumber(from.replace(decimal, "."))

case List(ValString(from), ValString(grouping), ValNull)
if isValidGroupingSeparator(grouping) =>
ValNumber(from.replace(grouping, ""))
case List(ValString(from), ValString(grouping), ValString(decimal)) =>
parseNumber(from.replace(grouping, ""))

case List(ValString(_), ValString(_), ValString(_)) =>
ValError(
s"illegal arguments for grouping or decimal. Must be one of ' ' (grouping only), ',' or '.'"
)
Expand Down

0 comments on commit cabb5f2

Please sign in to comment.