Just a couple of weeks ago we had something similar come up which involved collecting key/values into a map based upon conditions in another data structure. I came up with this helper function:
defp conditional_put(map, _key, nil), do: map
defp conditional_put(map, key, val), do: Map.put(map, key, val)
and for decimals:
defp conditional_put_decimal(map, _key, nil), do: map
defp conditional_put_decimal(map, key, num_str) do
case Decimal.parse(num_str) do
{:ok, num} -> Map.put(map, key, num)
:error -> map
end
end
Those pipeline nicely.






















