# Cascade

Generate code from templates.

`Cascade` provides an easy to use interface for generating code from a set of
templates. It's main features are:

  - *Templates as code* - all template files are evaluated using `EEx`, the actual
  generation code can be modified by overriding the default implementation.
  - `mix cascade` - a helper mix task for generating code from a template, it
  supports parsing of CLI options, and automatically generated help messages from
  the template file.
  - `mix` - automatically generate help for your custom templates,
  similar to `mix help`

## Usage

You can generate a new template under your mix project by running:

$ mix cascade template -- --name my_template
* creating templates/my_template/
* creating lib/cascade/templates/my_template.ex

This generates two files:

  - The actual template code, which by default is located under
  - A sample template `` file under `templates/{template_name}`

If you now run `mix` you will see the newly added template
in the list of available templates:

$ mix
The following templates are available:

  my_template  # TODO: Add shortdoc
  template     # Generates \a new template

Run mix cascade NAME to generate code from the given template
Run mix NAME to see help for a specific template

You can generate some code using the `my_template` template by running:

$ mix cascade my_template

This will generate all code associated to the given template. In this case it
will only generate the `` which was added by the `mix cascade`

You can check the help message of the newly created template by running:

$ mix my_template

### Implementing your template

You are now free to implement your actual template logic. You are able to:

  - Add any asset under the the template's assets folder (in our example
  - The assets can be plain files or `EEx` templates. In the latter case
  they will be evaluated during generation.
  - Define a set of CLI arguments that your template expects. `mix cascade`
  will validate these options automatically. Notice that by default the
  `:cli_options` package is used for defining the CLI arguments schema.
  - Implement any custom logic in your template's module.

For more details check the `Cascade.Template` docs.

## Installation

The package can be installed by adding `cascade` to your list of dependencies
in `mix.exs`:

def deps do
    {:cascade, "~> 0.1.0"}

## License

Copyright (c) 2023 Panagiotis Nezis, Sportradar

Cascade is released under the MIT License. See the [LICENSE](LICENSE) file for more