mongodb_ecto
mongodb_ecto copied to clipboard
Decimal Support [Or Custom Type Support Documentation]
Noticed that :decimal ecto native type is not supported but managed to get it working via a custom ecto type.
Where is the best place to include this? README or module docs?
defmodule DecimalType do
@behaviour Ecto.Type
def type, do: :string
def cast(term) when is_binary(term) or is_number(term) do
{:ok, Decimal.new(term)}
end
def cast(_), do: :error
def dump(%Decimal{} = term) do
{:ok, Decimal.to_string(term)}
end
def dump(_), do: :error
def load(term) when is_binary(term) or is_number(term) do
{:ok, Decimal.new(term)}
end
def load(_), do: :error
end
Decimal support should be added to this adapter. Would you be willing to submit a PR?
I'll give it a go this weekend.
@ankhers finally came around to look at this.
See (This fails the integration tests I believe as a result of incomplete decimal support):
https://github.com/bmurithi/mongodb_ecto/commit/165677ff6a98ce5947f5ab25a7f4411dec4b4e24
From what I can tell, there's mongodb does not support Mongo decimals as documented here:
https://docs.mongodb.com/manual/tutorial/model-monetary-data/
So my implementation would work only by coercing decimals to binaries.
Kindly take a look and advise?
Will take another stab at it see if I can get actual decimals marshalled correctly by the adapter both ways.