Class: FocusNfe::Esquemas::Validador

Inherits:
Object
  • Object
show all
Defined in:
lib/focus_nfe/esquemas/validador.rb

Overview

Validação client-side opt-in de um payload de emissão contra um Esquema: confere presença dos campos obrigatórios e tipo/tamanho dos campos escalares. Recorre em coleções: para cada item do Array valida seus subcampos contra o sub-esquema da coleção, em profundidade arbitrária, prefixando os erros com o caminho — a posição do item é base 1 (ex.: itens[1].descricao, itens[1].adicoes[3].numero). A restrição de cada campo (tipo/tamanho, decimal, data e enum) é delegada a Campo#validar_valor.

Além do esquema de topo, aceita sub-esquemas aninhados — indexados pela chave do payload que os contém (ex.: modal_rodoviario) — para validar objetos aninhados cujo esquema depende de dados de runtime. Os erros do objeto aninhado vêm prefixados pela chave (ex.: modal_rodoviario.rntrc).

Instance Method Summary collapse

Constructor Details

#initialize(esquema, aninhados: {}) ⇒ Validador

Returns a new instance of Validador.

Parameters:

  • esquema (Esquema)

    esquema dos campos de topo do documento

  • aninhados (Hash{String => Esquema}) (defaults to: {})

    sub-esquemas por chave aninhada do payload



20
21
22
23
# File 'lib/focus_nfe/esquemas/validador.rb', line 20

def initialize(esquema, aninhados: {})
  @esquema = esquema
  @aninhados = aninhados
end

Instance Method Details

#validar(dados) ⇒ Array<String>

Returns mensagens dos campos inválidos/ausentes (vazio se válido).

Parameters:

  • dados (Hash)

    payload de emissão (chaves String ou Symbol)

Returns:

  • (Array<String>)

    mensagens dos campos inválidos/ausentes (vazio se válido)



27
28
29
30
31
# File 'lib/focus_nfe/esquemas/validador.rb', line 27

def validar(dados)
  normalizados = normalizar(dados)

  validar_campos(@esquema, normalizados) + validar_aninhados(normalizados)
end

#validar!(dados) ⇒ void

This method returns an undefined value.

Parameters:

  • dados (Hash)

    payload de emissão

Raises:



36
37
38
39
# File 'lib/focus_nfe/esquemas/validador.rb', line 36

def validar!(dados)
  erros = validar(dados)
  raise ErroDeValidacao, erros unless erros.empty?
end