Экто | Как получить все модули схемы в приложении

Я пытаюсь создать смешанную задачу для автоматизации некоторых строительных лесов, и я хочу получить список всех имен модулей в приложении, которые имеют реализацию схемы и схемы внедрения. В конце концов я хотел бы иметь список всех схем с определениями полей, а не только именами модулей. Можем ли мы его получить, и если да, то как, предоставляет ли ecto такой API?


person AndreyKo    schedule 14.03.2019    source источник


Ответы (1)


Согласно документации Ecto.Schema,

Любой модуль схемы будет генерировать функцию __schema__, которую можно использовать для самоанализа схемы во время выполнения.

Вы можете использовать это вместе с собственными средствами самоанализа Erlang и Elixir для фильтрации всех соответствующих модулей и аккуратного извлечения деталей любых определенных схем, например:

{:ok, modules} = :application.get_key(:your_app, :modules)

modules 
|> Enum.filter(&({:__schema__, 1} in &1.__info__(:functions))) 
|> Enum.each(&(IO.inspect(&1.__schema__(:fields))))
person Vadim Landa    schedule 14.03.2019
comment
Спасибо, Вадим! Именно то, что мне было нужно. - person AndreyKo; 14.03.2019