class Sped2DB::Registro
Attributes
campos[R]
nome[R]
pai[R]
valores[R]
Public Class Methods
new(linha, metadados)
click to toggle source
# File lib/sped2db/registro.rb, line 5 def initialize(linha, metadados) @linha = linha @metadados = metadados @valores = dividir_linha_em_valores linha @nome = @valores.shift.upcase validar_registro @pai = @metadados[@nome]['pai'] @campos = @metadados[@nome]['campos'] validar_campos corrigir_caracteres_especiais corrigir_datas @hash = to_h end
Public Instance Methods
[](key)
click to toggle source
# File lib/sped2db/registro.rb, line 29 def [](key) @hash[key.to_sym] end
to_h()
click to toggle source
# File lib/sped2db/registro.rb, line 24 def to_h valores = @valores.map { |v| v.empty? ? nil : v } @campos.map(&:to_sym).zip(valores).to_h end
Private Instance Methods
corrigir_caracteres_especiais()
click to toggle source
# File lib/sped2db/registro.rb, line 39 def corrigir_caracteres_especiais @valores.map! do |c| c.strip! c.sub!(/,/, '.') if eh_decimal? c c.gsub!(/'/, "''") c end end
corrigir_datas()
click to toggle source
# File lib/sped2db/registro.rb, line 52 def corrigir_datas @campos.each_with_index do |campo, i| if campo.start_with?('dt_', 'dat_') @valores[i] = formatar_data @valores[i] end end @valores[0] = '0' if @nome == 'C495' && @valores[0] == '' end
dividir_linha_em_valores(linha)
click to toggle source
# File lib/sped2db/registro.rb, line 35 def dividir_linha_em_valores(linha) linha.chomp.sub(/^\|/, '').sub(/\|$/, '').gsub('\\', '\\\\\\\\').split('|', -1) end
eh_decimal?(str)
click to toggle source
# File lib/sped2db/registro.rb, line 48 def eh_decimal?(str) str =~ /^-?\d+,\d+$/ end
formatar_data(d)
click to toggle source
# File lib/sped2db/registro.rb, line 62 def formatar_data(d) d != '' ? Date.strptime(d, '%d%m%Y').strftime('%Y-%m-%d') : '' end
validar_campos()
click to toggle source
# File lib/sped2db/registro.rb, line 71 def validar_campos msg = "Linha contem #{@valores.size + 1} campo(s), " msg << "mas #{@campos.size + 1} eram esperado(s)" raise SpedError.new msg, @linha if @valores.size != @campos.size end
validar_registro()
click to toggle source
# File lib/sped2db/registro.rb, line 66 def validar_registro msg = "Registro #{@nome} nao suportado" raise SpedError.new msg, @linha unless @metadados.key? @nome end