Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Document and improve ExDoc usage #32

Open
btkostner opened this issue Jul 6, 2022 · 4 comments
Open

Document and improve ExDoc usage #32

btkostner opened this issue Jul 6, 2022 · 4 comments
Labels
discussion documentation Improvements or additions to documentation

Comments

@btkostner
Copy link

First off, this project is super awesome! I love being able to have always up to date mermaid diagrams for my Ecto schemas.

I am currently using this library to generate mermaid diagrams in ex_doc. I think this usage is pretty common, but it's not documented and the API is a little verbose.

I can get mermaid diagrams outputted like so:

  @moduledoc """
  This is information about our `ATcms.Account` context.

  #{ATcms.Account.UserSchema |> Code.ensure_loaded!() |> then(fn _ -> "" end)}

  ` ` `mermaid
  #{Ecto.ERD.Document.render([ATcms.Account.UserSchema], ".mmd", &Function.identity/1, [])}
  ` ` `
  """

We should document this use case so other people can enjoy the fun! Secondly, it would be awesome to clean up this code and make it easier to use. Something like Ecto.ERD.render([ATcms.Account.UserSchema], ".mmd") that would ensure the code is loaded and render out the modules to mermaid.

@fuelen
Copy link
Owner

fuelen commented Jul 7, 2022

Hi @btkostner

Having a public Ecto.ERD.render is a good idea.

Just want to warn you that such usage adds compile-time dependencies with the schema modules. I'd suggest generating diagrams separately and do not embed them into the code directly. Code compilation is a much more frequent operation than generating docs. So, in your Account context, just insert a link to the markdown file with Mermaid diagram or directly to the generated image and that's it. If you really want to have it in moduledocs, then I'd do this only using some compile-time flag, which would require a new env for docs.

@fuelen fuelen added documentation Improvements or additions to documentation discussion labels Jul 7, 2022
@fuelen
Copy link
Owner

fuelen commented Jul 13, 2022

Now, I'm not sure about exposing a public function for rendering a document in order not to encourage usage in moduledocs. I need other scenarios why public function is needed and not a mix task :)

@btkostner
Copy link
Author

So, going against adding a public function in documentation because of the compile errors and all the other issues there. I think the use case still stands (just needs to be implemented differently.) I'd still like a way to render only some modules so I can do it on a per context basis. I can think of:

  1. Users writing a mix task that runs the public render function and generates all of the needed files. This can already be done, but it'd be nice to clean up the functions and possibly document this approach.
  2. Updating the ecto_erd configuration file to allow multiple renders and specifying which modules to render

@fuelen
Copy link
Owner

fuelen commented Jul 14, 2022

It is already possible to render only some modules by using map_node parameter. The callback function must return nil for modules which must be removed.
Multiple renders can be achieved by using multiple configuration files :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants