MailglassAdmin.Router (MailglassAdmin v0.3.2)

Copy Markdown View Source

Dev-only preview dashboard mount.

Usage

import MailglassAdmin.Router

if Application.compile_env(:my_app, :dev_routes) do
  scope "/dev" do
    pipe_through :browser
    mailglass_admin_routes "/mail"
  end
end

Restart mix phx.server, visit /dev/mail, done. Zero endpoint.ex edits.

Options

  • :mailables:auto_scan (default) or explicit list [MyApp.UserMailer, ...]. :auto_scan walks :application.get_key/2 across loaded apps and keeps modules that use Mailglass.Mailable. Explicit lists bypass the scan.

  • :on_mount — Extra on_mount hooks appended BEFORE the internal MailglassAdmin.Preview.Mount hook.

  • :live_session_name — Name of the library-owned live_session (default :mailglass_admin_preview). Rename to resolve collisions with an adopter live_session of the same name.

  • :as — Route helper prefix (default :mailglass_admin).

Every opt is a public API contract once shipped; the v0.1 schema is deliberately lean (four keys) per CONTEXT D-09. Added opts ship only when a concrete adopter asks.

Dev-only enforcement

The library does NOT enforce :dev — wrapping the mount in if Application.compile_env(:my_app, :dev_routes) do ... end is the ADOPTER's job, matching the Phoenix 1.8 mix phx.new-generated router idiom. Mix.env() is unreliable in release builds (always :prod); keeping dev-enforcement in adopter code means v0.5's prod-admin surface is a README change, not a breaking macro change.

Does NOT do

  • Mix.env() checks in the macro body (unreliable in releases)
  • Pass conn.private.plug_session into LiveView assigns (would leak adopter cookies; __session__/2 builds a whitelisted map)
  • Register any named GenServer (name: __MODULE__ is banned in library code per CLAUDE.md)

Summary

Functions

Mounts the preview dashboard at path.

Functions

mailglass_admin_routes(path, opts \\ [])

(since 0.1.0) (macro)

Mounts the preview dashboard at path.

Expands to a scope containing asset routes (compile-time served via MailglassAdmin.Controllers.Assets) and a live_session with MailglassAdmin.PreviewLive. Session isolation is provided by the whitelisted __session__/2 callback.

Example

scope "/dev" do
  pipe_through :browser
  mailglass_admin_routes "/mail"
end

Unknown opts

Raises ArgumentError at compile time with a message starting invalid opts for mailglass_admin_routes/2.