Design by Contract para os componentes.
Uma violação de contrato é um bug de quem chama, não fluxo de negócio: por
isso falha alto (ArgumentError), em vez de renderizar algo errado em
silêncio. Entrada de usuário (valores de formulário) nunca passa por aqui;
ela vira errors do Phoenix.HTML.FormField.
require!/3— pré-condição: o valor pertence ao domínio permitido.ensure!/2— pós-condição / invariante: algo que o código garantiu.
Summary
Functions
Pós-condição ou invariante: levanta ArgumentError com message se condition for falsa.
Pré-condição: value deve estar em allowed. Devolve value.
Functions
Pós-condição ou invariante: levanta ArgumentError com message se condition for falsa.
@spec require!(term(), Enumerable.t(), atom() | String.t()) :: term()
Pré-condição: value deve estar em allowed. Devolve value.