View Source Routex.Extension behaviour (Routex v1.1.0)

Specification for composable Routex extensions.

Optional callbacks:

  • configure
  • transform
  • post_transform
  • create_helpers

See also: Routex Extensions

Summary

Callbacks

The configure/2 callback is called in the first stage with the options provided to Routex and the name of the Routex backend. It is expected to return a new list of options.

The create_helpers/3 callback is called in the last stage with a list of routes belonging to a Routex backend, the name of the Routex backend and the current environment. It is expected to return Elixir AST.

The post_transform/1 callback is called in the third stage with a list of routes belonging to a Routex backend. It is expected to return a list of Phoenix.Router.Route structs almost identical to the input, only adding Routex.Attrs -for own usage- is allowed.

The transform/3 callback is called in the second stage with a list of routes belonging to a Routex backend, the name of the configuration model and the current environment. It is expected to return a list of Phoenix.Router.Route structs with flattened Routex.Attrs.

Types

backend()

@type backend() :: Routex.Backend.t()

env()

@type env() :: Macro.Env.t()

opts()

@type opts() :: list()

routes()

@type routes() :: [Phoenix.Router.Route.t()]

Callbacks

configure(opts, backend)

(optional)
@callback configure(opts(), backend()) :: opts()

The configure/2 callback is called in the first stage with the options provided to Routex and the name of the Routex backend. It is expected to return a new list of options.

create_helpers(routes, backend, env)

(optional)
@callback create_helpers(routes(), backend(), env()) :: Macro.output()

The create_helpers/3 callback is called in the last stage with a list of routes belonging to a Routex backend, the name of the Routex backend and the current environment. It is expected to return Elixir AST.

The AST is included in MyAppWeb.Router.RoutexHelpers.

post_transform(routes, backend, env)

(optional)
@callback post_transform(routes(), backend(), env()) :: routes()

The post_transform/1 callback is called in the third stage with a list of routes belonging to a Routex backend. It is expected to return a list of Phoenix.Router.Route structs almost identical to the input, only adding Routex.Attrs -for own usage- is allowed.

transform(routes, backend, env)

(optional)
@callback transform(routes(), backend(), env()) :: routes()

The transform/3 callback is called in the second stage with a list of routes belonging to a Routex backend, the name of the configuration model and the current environment. It is expected to return a list of Phoenix.Router.Route structs with flattened Routex.Attrs.