Extractly (Extractly v0.2.0) View Source

Provide easy access to information inside the templates rendered by mix xtra

Link to this section Summary

Functions

Emits a comment including a message not to edit the created file, as it will be recreated from this template.

Returns docstring of a function (or nil) Ex

Returns docstring of a macro (or nil)

Returns docstring of a module (or nil) Ex

Link to this section Functions

Link to this function

do_not_edit_warning(opts \\ [])

View Source

Emits a comment including a message not to edit the created file, as it will be recreated from this template.

It is a convenience to include this into your templates as follows

      <%= xtra.do_not_edit_warning %>

or I18n'ed

      <%= xtra.do_not_edit_warning, lang: :fr %>

If you are not generating html or markdown the comment can be parametrized

      <%= xtra.do_not_edit_warning, comment_start: "-- ", comment_end: "" %>

If you want to include the name of the source template use template: template option, so a call may be as complex as:

      <%= xtra.do_not_edit_warning, comment_start: "-- ", comment_end: "", template: template, lang: :it %>
Link to this function

functiondoc(name, opts \\ [])

View Source

Returns docstring of a function (or nil) Ex:

  iex(1)> Extractly.functiondoc("Extractly.moduledoc/1")
  [ "  Returns docstring of a module (or nil)",
    "  Ex:",
    "", 
    "      Extractly.moduledoc(\"Extractly\")",
    ""
    ] |> Enum.join("\n")

We can also pass a list of functions to get their docs concatenated

  iex(2)> out = Extractly.functiondoc(["Extractly.moduledoc/1", "Extactly.functiondoc/2"])
  ...(2)> # as we are inside the docstring we required we would need a quine to check for the
  ...(2)> # output, let us simplify
  ...(2)> String.split(out, "\n") |> Enum.take(5)
  [ "  Returns docstring of a module (or nil)",
    "  Ex:",
    "", 
    "      Extractly.moduledoc(\"Extractly\")",
    ""]

If all the functions are in the same module the following form can be used

  iex(3)> out = Extractly.functiondoc(["moduledoc/1", "functiondoc/2"], module: "Extractly")
  ...(3)> String.split(out, "\n") |> hd()
  "  Returns docstring of a module (or nil)"

However it is convenient to add a markdown headline before each functiondoc, especially in these cases, it can be done by indicating the headline: level option

  iex(4)> out = Extractly.functiondoc(["moduledoc/1", "functiondoc/2"], module: "Extractly", headline: 2)
  ...(4)> String.split(out, "\n") |> Enum.take(3)
  [ "## Extractly.moduledoc/1",
    "",
    "  Returns docstring of a module (or nil)"]

Often times we are interested by all public functiondocs...

  iex(5)> out = Extractly.functiondoc(:all, module: "Extractly", headline: 2)
  ...(5)> String.split(out, "\n") |> Enum.take(3)
  [ "## Extractly.do_not_edit_warning/1",
    "",
    "  Emits a comment including a message not to edit the created file, as it will be recreated from this template."]

Returns docstring of a macro (or nil)

Same naming convention for macros as for functions.

Returns docstring of a module (or nil) Ex:

  Extractly.moduledoc("Extractly")