Class: FocusNfe::Esquemas::Campo
- Inherits:
-
Object
- Object
- FocusNfe::Esquemas::Campo
- Defined in:
- lib/focus_nfe/esquemas/campo.rb
Overview
Constant Summary collapse
- ESCALAR =
Returns captura base e tamanho de um escalar de comprimento (ex.:
String[1-60]). /\A(?<base>String|Integer)\[(?<inicio>\d+)(?:-(?<fim>\d+))?\]/- CODIGO_ENUM =
Returns captura os códigos declarados em um enum (+*
0: …+ ou +*+0+: …+). /\*\s*\+([^+]+)\+/
Instance Attribute Summary collapse
-
#decimal ⇒ Decimal?
readonly
Especificação decimal do campo, ou
nilse não for decimal. -
#tamanho_maximo ⇒ Integer?
readonly
Tamanho/quantidade de dígitos máximo (escalares).
-
#tamanho_minimo ⇒ Integer?
readonly
Tamanho/quantidade de dígitos mínimo (escalares).
-
#tipo ⇒ Symbol
readonly
Tipo parseado (+:string+,
:integer,:decimal,:date,:datetime,:enum,:colecaoou:desconhecido).
Instance Method Summary collapse
-
#colecao? ⇒ Boolean
Se o campo é uma coleção de subitens.
-
#descricao ⇒ String?
Descrição do campo conforme
campos.focusnfe.com.br. -
#enum ⇒ String?
Enumeração dos valores aceitos, como documentada.
-
#enum? ⇒ Boolean
Se o campo declara um conjunto de valores aceitos.
-
#esquema_colecao ⇒ Esquema?
Esquema dos subcampos da coleção, ou
nilse o campo não for coleção ou não declararobject_attributes. -
#initialize(definicao) ⇒ Campo
constructor
A new instance of Campo.
-
#nome ⇒ String
Nome do campo no payload de emissão.
-
#obrigatorio? ⇒ Boolean
Se o campo é obrigatório na emissão.
-
#tag ⇒ String?
Tag XML subjacente do campo.
-
#tipo_bruto ⇒ String?
Tipo bruto como documentado (ex.:
"String[1-60]"). -
#to_h ⇒ Hash
Representação serializável do campo, para introspecção externa (devs e ferramentas automatizadas).
-
#validar_valor(valor) ⇒ String?
Valida um valor contra o tipo/tamanho e o conjunto de enum do campo.
-
#valores_enum ⇒ Array<String>
Códigos aceitos extraídos do #enum (vazio se não houver).
Constructor Details
#initialize(definicao) ⇒ Campo
Returns a new instance of Campo.
19 20 21 22 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 19 def initialize(definicao) @definicao = definicao parsear_tipo end |
Instance Attribute Details
#decimal ⇒ Decimal? (readonly)
Returns especificação decimal do campo, ou nil se não for decimal.
85 86 87 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 85 def decimal @decimal end |
#tamanho_maximo ⇒ Integer? (readonly)
Returns tamanho/quantidade de dígitos máximo (escalares).
82 83 84 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 82 def tamanho_maximo @tamanho_maximo end |
#tamanho_minimo ⇒ Integer? (readonly)
Returns tamanho/quantidade de dígitos mínimo (escalares).
79 80 81 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 79 def tamanho_minimo @tamanho_minimo end |
#tipo ⇒ Symbol (readonly)
Returns tipo parseado (+:string+, :integer, :decimal, :date,
:datetime, :enum, :colecao ou :desconhecido).
68 69 70 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 68 def tipo @tipo end |
Instance Method Details
#colecao? ⇒ Boolean
Returns se o campo é uma coleção de subitens.
64 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 64 def colecao? = tipo == :colecao |
#descricao ⇒ String?
Returns descrição do campo conforme campos.focusnfe.com.br.
28 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 28 def descricao = @definicao["description"] |
#enum ⇒ String?
Returns enumeração dos valores aceitos, como documentada.
34 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 34 def enum = @definicao["enum"] |
#enum? ⇒ Boolean
Returns se o campo declara um conjunto de valores aceitos.
42 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 42 def enum? = !valores_enum.empty? |
#esquema_colecao ⇒ Esquema?
Returns esquema dos subcampos da coleção, ou nil se o campo
não for coleção ou não declarar object_attributes.
72 73 74 75 76 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 72 def esquema_colecao return unless colecao? @esquema_colecao ||= (atributos = @definicao.dig("collection", "object_attributes")) && Esquema.new(atributos) end |
#nome ⇒ String
Returns nome do campo no payload de emissão.
25 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 25 def nome = @definicao["name"] |
#obrigatorio? ⇒ Boolean
Returns se o campo é obrigatório na emissão.
61 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 61 def obrigatorio? = @definicao["required"] == true |
#tag ⇒ String?
Returns tag XML subjacente do campo.
45 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 45 def tag = @definicao["tag"] |
#tipo_bruto ⇒ String?
Returns tipo bruto como documentado (ex.: "String[1-60]").
31 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 31 def tipo_bruto = @definicao["type"] |
#to_h ⇒ Hash
Representação serializável do campo, para introspecção externa (devs e
ferramentas automatizadas). Coleções aninham a descrição dos subcampos em
:colecao, em profundidade arbitrária; campos escalares têm :colecao nil.
52 53 54 55 56 57 58 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 52 def to_h { nome: nome, descricao: descricao, tipo: tipo, tipo_bruto: tipo_bruto, obrigatorio: obrigatorio?, tamanho_minimo: tamanho_minimo, tamanho_maximo: tamanho_maximo, decimal: decimal&.to_h, enum: enum, tag: tag, colecao: esquema_colecao&.descrever } end |
#validar_valor(valor) ⇒ String?
Valida um valor contra o tipo/tamanho e o conjunto de enum do campo. Coleções e tipos desconhecidos não restringem nesta etapa.
92 93 94 95 96 97 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 92 def validar_valor(valor) erro = validar_tipo(valor) return erro if erro validar_enum(valor) if enum? end |
#valores_enum ⇒ Array<String>
Returns códigos aceitos extraídos do #enum (vazio se não houver).
37 38 39 |
# File 'lib/focus_nfe/esquemas/campo.rb', line 37 def valores_enum @valores_enum ||= enum.to_s.scan(CODIGO_ENUM).flatten end |