mongodb_ecto icon indicating copy to clipboard operation
mongodb_ecto copied to clipboard

Decimal Support [Or Custom Type Support Documentation]

Open bmurithi opened this issue 7 years ago • 3 comments
trafficstars

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

bmurithi avatar Dec 27 '17 15:12 bmurithi

Decimal support should be added to this adapter. Would you be willing to submit a PR?

ankhers avatar Feb 08 '18 19:02 ankhers

I'll give it a go this weekend.

bmurithi avatar Feb 09 '18 06:02 bmurithi

@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.

bmurithi avatar May 20 '18 18:05 bmurithi