Skip to content

How to extend submodule .Type #48

Description

@willjleong

I've noticed .Type is generated by Waffle.Ecto.Definition's macros as a submodule of our custom uploader Definition. If I want to extend the Ecto.Type so I can add forms in Kaffy admin, I can't figure out a clean way to extend the module that is created using this code:

defmodule Module.concat(unquote(definition), "Type") do
  # After the 3.2 version Ecto has moved @behavior
  # inside the `__using__` macro
  if macro_exported?(Ecto.Type, :__using__, 1) do
    use Ecto.Type
  else
    # in order to support versions lower than 3.2
    @behaviour Ecto.Type
  end

  def type, do: Waffle.Ecto.Type.type()
  def cast(value), do: Waffle.Ecto.Type.cast(unquote(definition), value)
  def load(value), do: Waffle.Ecto.Type.load(unquote(definition), value)
  def dump(value), do: Waffle.Ecto.Type.dump(unquote(definition), value)
end

I'm also not too familiar with metaprogramming in elixir so maybe there's a trick to extend the generated .Type submodule to add the functions I want to add render_form/5 and render_index/3 to integrate a Waffle.Ecto type into Kaffy Admin.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions