Class: FocusNfe::Esquemas::Esquema
- Inherits:
-
Object
- Object
- FocusNfe::Esquemas::Esquema
- Defined in:
- lib/focus_nfe/esquemas/esquema.rb
Overview
Esquema de emissão de um documento fiscal: a coleção de Campos esperados pela API para aquele tipo de documento.
Constant Summary collapse
- DIRETORIO =
Returns diretório dos schemas empacotados (+data/schemas/+).
File.("../../../data/schemas", __dir__.to_s)
- NOME_VALIDO =
Returns nomes de schema aceitos (alfanumérico, hífen, underscore).
/\A[\w-]+\z/
Instance Attribute Summary collapse
-
#campos ⇒ Array<Campo>
readonly
Campos definidos pelo esquema.
Class Method Summary collapse
-
.carregar(nome) ⇒ Esquema?
Carrega o schema empacotado de um documento, memoizando por nome.
Instance Method Summary collapse
-
#descrever ⇒ Array<Hash>
Descrição serializável do esquema: um Hash por campo, na ordem do schema.
-
#initialize(definicoes) ⇒ Esquema
constructor
A new instance of Esquema.
Constructor Details
Instance Attribute Details
#campos ⇒ Array<Campo> (readonly)
Returns campos definidos pelo esquema.
57 58 59 |
# File 'lib/focus_nfe/esquemas/esquema.rb', line 57 def campos @campos end |
Class Method Details
.carregar(nome) ⇒ Esquema?
Carrega o schema empacotado de um documento, memoizando por nome. Nomes
fora do padrão alfanumérico são rejeitados (devolve nil) antes de tocar
o filesystem, evitando travessia de caminho via nome e não poluindo o
cache com entradas arbitrárias.
41 42 43 44 45 46 47 |
# File 'lib/focus_nfe/esquemas/esquema.rb', line 41 def carregar(nome) return cache[nome] if cache.key?(nome) return nil unless nome.to_s.match?(NOME_VALIDO) caminho = File.join(DIRETORIO, "schema_#{nome}.json") cache[nome] = File.exist?(caminho) ? new(JSON.parse(File.read(caminho))) : nil end |
Instance Method Details
#descrever ⇒ Array<Hash>
Descrição serializável do esquema: um Hash por campo, na ordem do schema.
67 68 69 |
# File 'lib/focus_nfe/esquemas/esquema.rb', line 67 def descrever campos.map(&:to_h) end |