Svelixir.Config.Project (svelixir v0.11.0)

Copy Markdown

Identity of the project being scaffolded — the project: section.

name and app are independent: name is the mix new positional directory argument, app is the OTP application name, and mix svelixir.new NAME --app other_app is a supported invocation. Never derive one from the other, and never require them to match.

This struct accepts any non-blank name, because it is also the model of priv/templates/*, whose placeholder default is "NAME". A name arriving from a project's svelixir.exs is additionally held to ~r/\A[a-z][a-z0-9_]*\z/ — by Svelixir.Config.read!/1, at the file boundary, which is the only place that grammar applies.

type gates the assets section only. security and container are type-independent, so they apply to an :otp project too.

github_org is the canonical name. The scaffolder skills spell it github.org, a sectioned TOML key flattened to one atom here; see the mapping table in Svelixir.Config.

Summary

Functions

Builds this section, and any nested block, from input.

Types

t()

@type t() :: %Svelixir.Config.Project{
  app: atom(),
  github_org: String.t(),
  module: module(),
  name: String.t(),
  schema_version: pos_integer(),
  type: atom()
}

Functions

new!(input \\ [])

@spec new!(keyword() | map()) :: t()

Builds this section, and any nested block, from input.

valid?(self)