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