From e9b3dc1691ee93c6d3647741a17b78d2cdb60753 Mon Sep 17 00:00:00 2001 From: Luiz Rodrigo de Souza Date: Wed, 30 Oct 2024 20:00:54 -0300 Subject: [PATCH] first try --- lib/type_id/ecto.ex | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/type_id/ecto.ex b/lib/type_id/ecto.ex index 4137fe2..815bc2e 100644 --- a/lib/type_id/ecto.ex +++ b/lib/type_id/ecto.ex @@ -95,22 +95,39 @@ if Code.ensure_loaded?(Ecto.ParameterizedType) do def load(_, _, _), do: :error + defp validate_type!(type) do + unless type in ~w[string uuid]a do + raise ArgumentError, "`type` must be `:string` or `:uuid`" + end + + type + end + + defp get_type(opts) do + default_type = Application.get_env(:typeid_elixir, :default_type, :string) + + case Keyword.get(opts, :column_type) do + nil -> + opts + |> Keyword.get(:type, default_type) + |> validate_type!() + + type -> + validate_type!(type) + end + end + defp validate_opts!(opts) do primary_key = Keyword.get(opts, :primary_key, false) schema = Keyword.fetch!(opts, :schema) field = Keyword.fetch!(opts, :field) - default_type = Application.get_env(:typeid_elixir, :default_type, :string) - type = Keyword.get(opts, :type, default_type) prefix = Keyword.get(opts, :prefix) + type = get_type(opts) if primary_key do TypeID.validate_prefix!(prefix) end - unless type in ~w[string uuid]a do - raise ArgumentError, "`type` must be `:string` or `:uuid`" - end - if primary_key do %{primary_key: primary_key, schema: schema, field: field, prefix: prefix, type: type} else