Class: FocusNfe::Esquemas::Decimal
- Inherits:
-
Object
- Object
- FocusNfe::Esquemas::Decimal
- Defined in:
- lib/focus_nfe/esquemas/decimal.rb
Overview
Especificação decimal de um Campo (ex.: Decimal[13.2], Decimal[13.2-4]):
até inteiros dígitos inteiros e de casas_minimas a casas_maximas casas
decimais. Sabe validar um valor informado contra esses limites.
Constant Summary collapse
- ESPEC =
Returns captura inteiros e a faixa de casas (ex.:
Decimal[13.2-4]). /\ADecimal\[(?<inteiros>\d+)(?:\.(?<casas_min>\d*)(?:-(?<casas_max>\d+))?)?\]/- VALOR =
Returns decompõe um valor em parte inteira e fracionária.
/\A-?(?<inteira>\d+)(?:[.,](?<fracionaria>\d+))?\z/
Instance Attribute Summary collapse
-
#casas_maximas ⇒ Integer
readonly
Quantidade máxima de casas decimais.
-
#casas_minimas ⇒ Integer
readonly
Quantidade mínima de casas decimais.
-
#inteiros ⇒ Integer
readonly
Quantidade máxima de dígitos inteiros.
Class Method Summary collapse
-
.parsear(bruto) ⇒ Decimal?
A especificação parseada, ou
nilsebrutonão for decimal.
Instance Method Summary collapse
-
#initialize(match) ⇒ Decimal
constructor
A new instance of Decimal.
-
#to_h ⇒ Hash
Descrição serializável da especificação.
-
#validar(valor) ⇒ String?
Valida um valor decimal.
Constructor Details
#initialize(match) ⇒ Decimal
Returns a new instance of Decimal.
32 33 34 35 36 |
# File 'lib/focus_nfe/esquemas/decimal.rb', line 32 def initialize(match) @inteiros = Integer(match[:inteiros]) @casas_minimas = match[:casas_min].to_s.empty? ? 0 : Integer(match[:casas_min]) @casas_maximas = match[:casas_max] ? Integer(match[:casas_max]) : @casas_minimas end |
Instance Attribute Details
#casas_maximas ⇒ Integer (readonly)
Returns quantidade máxima de casas decimais.
29 30 31 |
# File 'lib/focus_nfe/esquemas/decimal.rb', line 29 def casas_maximas @casas_maximas end |
#casas_minimas ⇒ Integer (readonly)
Returns quantidade mínima de casas decimais.
26 27 28 |
# File 'lib/focus_nfe/esquemas/decimal.rb', line 26 def casas_minimas @casas_minimas end |
#inteiros ⇒ Integer (readonly)
Returns quantidade máxima de dígitos inteiros.
23 24 25 |
# File 'lib/focus_nfe/esquemas/decimal.rb', line 23 def inteiros @inteiros end |
Class Method Details
Instance Method Details
#to_h ⇒ Hash
Returns descrição serializável da especificação.
51 52 53 |
# File 'lib/focus_nfe/esquemas/decimal.rb', line 51 def to_h { inteiros: inteiros, casas_minimas: casas_minimas, casas_maximas: casas_maximas } end |
#validar(valor) ⇒ String?
Valida um valor decimal. Lenient: aceita menos casas que o mínimo (zeros à direita são equivalentes) — rejeita apenas o claramente inválido.
43 44 45 46 47 48 |
# File 'lib/focus_nfe/esquemas/decimal.rb', line 43 def validar(valor) match = VALOR.match(valor.to_s.strip) return "valor decimal inválido" unless match erro_de_tamanho(match[:inteira].to_s, match[:fracionaria]) end |